@toc
1.1 课程说明
认识Arduino控制板的各个部分,
1.2 器材
1.3 UNO电路:
UNO参数
1.4 详细内容:
我们将了解Arduino板上的不同组件。将学习Arduino UNO板,因为它是Arduino板系列中最受欢迎的。此外,它是开始使用电子和编码的最佳板。有些板看起来与下面给出的有些不同,但多数Arduino中的这些组件大部分是共同的。
1.5 板载LED闪烁实验
arduino上有一个名称为L的led发光二级管,这个led其实是连接在13号引脚上的,所以我们通过控制13号引脚就能够控制此led灯闪烁。 下面我们来看程序源码
/*
作者:智芯坊
时间: 年 月 日
发表地址:
程序说明:
使一个Led亮一秒,灭一秒,如此往复。
*/
void setup() {
// 初始化数字引脚,使其为输出状态。
// 大部分Arduino控制板上,数字13号引脚都有一颗Led。
pinMode(13, OUTPUT);
}
void loop() {
digitalWrite(13, HIGH); // 使Led亮
delay(1000); // 持续1秒钟
digitalWrite(13, LOW); // 使Led灭
delay(1000); // 持续1秒钟。
}
程序说明
- 首先打开Arduino IDE,我们把代码输入。
- 然后选择控制板型号,本次实验使用的是arduino兼容控制板,选择为arduino uno即可。
- 然后选择端口号,本次实验为COM7端口,一般为列表最后一个。
- 然后点击编译,编译完成后,会在左下方提示。编程成功后,就可以点击下载了。下载完成后,也会在左下方提示。
Ps:
- 所有Arduino程序都是由参数设置(setup)和循环(loop)两个函数组成,函数名后面一定跟着小括号;大括号({})用于界定程序区块的范围
- 若要指挥Arduino控制某个数字引脚的元器件,必须先把引脚设置成“输出(output)”模式,若是要接收来自传感器的输入值,则要把该引脚设置成“输入(input)”模式。Arduino的每个数字和模拟引脚都能输出“高电位”和低电位信号
- 注释(comment):是程序中的说明文字,语法: //: 放在说明文字的前方;单行注释 /* …… */:多行注释。
1.6 补充阅读相关知识:
1.6.1 模拟引脚
本文是对于Arduino芯片上模拟引脚的介绍。上面所说的Arduino芯片主要包括(Atmega8, Atmega168,Atmega328或Atmega1280)。
- 数模转换电路 Arduino中使用的Atmega控制器都配有一个板载6通道数模转换器,这个转换器的精度为10bit,能够返回0-1023的整数。尽管模拟引脚的主要功能是读取模拟信号,但是实际上和0-13号数字引脚一样,模拟引脚也可以进行INPUT、OUTPUT操作(GPIO)。因此,如果你在做项目时需要更多的数字引脚,那么模拟引脚也可用作GPIO操作。
- 引脚编号 A0、A1、A2、A3……就是模拟引脚的编号。你可以用这个编号让模拟引脚输出高电平或低电平。下面的例子会将A0口设置为输出模式,并且输出高电平:
pinMode(A0, OUTPUT);
digitalWrite(A0, HIGH);
- 上拉电阻 模拟引脚也有和数字引脚一样的内置上拉电阻。通过下列代码激活模拟引脚内部的上拉电阻。 digitalWrite(A0, HIGH); // 将上拉电阻激活。(这与普通的输入引脚有点区别) 但是激活了上拉电阻后,再用analogRead()的话,读出的值会受到影响。
- 一些额外需注意的细节 如果一个引脚已经被设置成为OUTPUT模式,analogRead函数就不能够正常工作。因此,如果要将模拟引脚当做数字引脚并且设置了OUTPUT模式,请在调用analogRead前将这个模拟引脚重新定义为INPUT模式。 如上所述,如果你将模拟引脚定为输出模式并且输出了HIGH,那么它内部的上拉电阻就会被激活。如果这时候再转为INPUT,那么上拉电阻将依然工作着。(因此,你需要先设置为LOW,再转换为INPUT,才能够获得正确结果。) 从Atmega的数据手册中,我们可以知道:如果要在模拟引脚上进行快速的电平切换,会导致电子噪声。这会给模电转换模块带来“抖动”,从而影响到其他引脚上的模拟信号值读取。因此,你需要在将模拟引脚进行电平操作切换后使用后用delay函数进行一小段时间的延迟,然后再使用analogRead()去读取其他引脚上的模拟信号。
1.6.2. 数字引脚
Arduino上的引脚可以被设置为输入模式(INPUT)或输出模式(OUTPUT)。甚至很多Arduino (Atmega单片机)上的模拟引脚也可以被当做数字引脚使用。本篇文章将介绍引脚在两种不同模式(INPUT和OUTPUT)下的功能。
- INPUT模式 Arduino (Atmega) 引脚默认是输入模式(INPUT)因此在程序中一般你不需要特别指定为INPUT模式。处在INPUT模式的引脚将处于高阻抗状态(high-impedance)(相当于引脚串接了一个100兆欧的电阻),因而它对于电路几乎没有任何影响。数字引脚可以被用来读取触碰开关、把LED当做以光电二极管读取,或者使用RCTime来读取模拟信号传感器。 然而,使用pinMode(pin, INPUT)配置的引脚在没连接到任何电路上时(处于悬空状态),从引脚读出的结果可能会“乱跳”。这是因为引脚收到了电子噪声的干扰,或者由于电容耦合读取了附近引脚的值。
- INPUT模式引脚的上拉电阻 一般来说,我们希望在输入引脚悬空时保持一个稳定的状态。这可以通过加一个上拉电阻(上拉到+5V)或加一个下拉电阻(下拉到GND)来实现。上拉电阻或下拉电阻一般选用10kΩ电阻比较合适。
- 使用INPUT_PULLUP对输入引脚进行配置 在Atmega芯片中每个输入引脚都对应着一个20kΩ的上拉电阻,你可以通过代码去使这些内置上拉电阻发挥作用(只需在pinMode函数中传入INPUT_PULLUP函数作为参数即可) 。使用上拉电阻会“反转”读取结果,当读取到HIGH的时候说明引脚上为低电压,当读取到LOW时说明引脚上是高电压。 不同微控制器内置上拉电阻的阻值大小也不尽相同。在大多数AVR板中,上拉电阻用的是20kΩ到50kΩ。而在Arduino Due中,上拉电阻用的是50kΩ到150kΩ。如果你想知道你板子上内置上拉电阻的确切阻值,请参阅微控制器的数据手册。 当传感器连接到用INPUT_PULLUP常量配置的引脚时,传感器的另一端应该被连接到GND。假如你将一个开关连接到这个引脚上,当开关断开时将会读到HIGH,闭合时读到LOW。 上拉电阻的电流足够让LED微微亮起,所以如果你发现在自己的项目中,LED虽然在工作,但是亮度很微弱,一般就说明你将引脚错误地设置为了INPUT模式。 在单片机内部,上拉电阻是用一个寄存器(单片机的一块记忆区域)控制的,这个寄存器又同时控制引脚是高电平(HIGH)还是低电(LOW)。基于这个原因,如果你将一个INPUT_PULLUP的输入引脚重新配置成OUTPUT的话,它会立即输出高电平。相反,如果你将一个正在输出高电平的OUTPUT引脚重新配置为INTPUT,它会自动将上拉电阻打开。 在Arduino 1.0.1之前可以用以下代码配置内部上拉电阻:
pinMode(pin, INPUT); // 将引脚设置为INPUT模式
digitalWrite(pin, HIGH); // 打开引脚的上拉电阻
而目前应该这样写
pinMode(pin,INPUT_PULLUP);
特别提示: 13号引脚相比其他引脚来说不适宜配置为INPUT模式,因为在绝大多数板上,它连着一个板载LED。如果你激活13号引脚上的上拉电阻,它只能拉到1.7V而非你所期望的5V,因为LED分走了电压。而由于一直不满5V,从13号引脚上读出的结果总是LOW。如果你非要将13号引脚设置为INPUT模式,请外加一个下拉电阻。 4. OUTPUT模式 OUTPUT模式的引脚在工作时是低阻抗的,也就是说OUTPUT模式的引脚能够给外部电路提供可靠的电流支持。Atmega引脚最高可以为外部设备提供40mA的电流。这个电流完全足够点亮LED(别忘记串接电阻,否则甚至会烧掉你的LED)或者驱动绝大多数传感器。不过别指望用它去直接驱动大多数继电器、螺线管或者电机。 让Arduino的引脚短路,或者让大电流通过都可能会损坏内部晶体管或损坏Atmega芯片。如果第一种情况发生,你会发现虽然Arduino貌似工作正常,但是那个损坏的引脚已经无法工作了。因此,最好在外围串接470Ω到1kΩ的电阻,来确保外电路总电流小于等于40mA,除非如果你的电路确实需要比较高的电流,否则就最好进行限流。### 1.7 wiki:
- void: 只用在函数声明中。它表示该函数将不会被返回任何数据到它被调用的函数中。
- setup():当Arduino板起动时setup()函数会被调用。用它来初始化变量,引脚模式,开始使用某个库,等等。该函数在Arduino板的每次上电和复位时只运行一次。
- loop():可以用它来实时控制arduino板。
- pinMode(): void pinMode (uint8_t pin, uint8_t mode) 设置引脚模式 配置引脚为输出或输出模式。 参数: pin 引脚编号 mode: INPUT, OUTPUT, 或 INPUT_PULLUP。 例子:
- pinMode(ledPin, OUTPUT); // sets the digital pin as output 注解: 模拟引脚也可以当作数字引脚使用, 编号为14(对应模拟引脚0)到19(对应模拟引脚5). digitalWrite() void digitalWrite (uint8_t pin, uint8_t value) 写数字引脚 写数字引脚, 对应引脚的高低电平. 在写引脚之前, 需要将引脚设置为OUTPUT模式. 参数: pin 引脚编号 value HIGH 或 LOW 用法:
- digitalWrite(ledPin, HIGH); // 点亮LED 注解: 模拟引脚也可以当作数字引脚使用, 编号为14(对应模拟引脚0)到19(对应模拟引脚5). delay(ms) void delay (unsigned long ms)
延时(毫秒) 延时, 单位毫秒(1秒有1000毫秒). 警告: 参数为unsigned long, 因此在延时参数超过32767(int型最大值)时, 需要用"UL"后缀表示为无符号 长整型, 例如: delay(60000UL);. 同样在参数表达式, 切表达式中有int类型时, 需要强制转换为 unsigned long类型, 例如: - delay((unsigned long)tdelay * 100UL);