该电路涉及将一根导线从Arduino上的I/O引脚13连接到电阻器。电阻器的另一端连接到LED的阳极(长)脚。LED的阴极端连接到Arduino接地(GND)引脚。第二个LED使用基本相同类型的连接,只是它连接到I/O引脚12。
那么,每个电阻器的值应该是多少?这实际上取决于你使用的特定LED。Arduino I/O引脚上的最大负载不得超过20毫安,LED上的最大额定电流为5毫安。因此,它们在I/O引脚额定值范围内。欧姆定律规定,伏特等于安培×欧姆。下式求电阻值:
Resistance=Volts/Amps
因为Arduino板工作电压为5伏,最大电流为20毫安(或0.020安培),电阻值为250欧姆(这些计算未考虑LED的正向电压,导致电流减少。这对于LED来说是安全的)。但是,该电阻在Arduino I/O引脚最大额定电流下运行,这可能不是好主意。结果,笔者将电阻值增加到470欧姆。读者可以从更高的起点开始电阻值,然后看看是什么工作成果。减小电阻值将增加LED的亮度;将电阻增加太多,它将不会发光。对于大多数LED,470至1000欧姆的电阻值将工作很好。图4-3显示了当上述程序完成时笔者的面包板的外观。电路示意图如图4-4所示。
图4-3 实际发光LED电路
LED的极性确实很重要,如图4-4的电路图所示。尽管也有例外,大多数LED的负极(阴极)端子比阳极短,并且通常在阴极正上方的塑料透镜上有一个平边。有个好消息是,即使你确实把导线接反了,最糟糕的事情是LED不亮。
图4-4 2路LED电路示意图
程序代码:
程序以一系列程序注释开始,之后出现两个int的定义变量,led1和led2。这两个整数变量在初始化为各自的I/O引脚值。接下来,代码调用setup()函数,该函数负责实际启动要运行的程序。setup()函数所做的全部工作就是初始化两个I/O引脚,通过调用pinMode()。这意味着当使用digitalWrite()函数调用其中一个管脚时,引脚模式为高电平时,引脚状态设置为+5伏。如果引脚的模式为低,则电压为0伏,从而将其关闭。在setup()函数中设置引脚模式后,程序自动转到loop()函数代码。
loop()函数块首先调用led1的digitalWrite(),将该引脚设置为高位值(即,电压开启)。接下来,对digitalWrite()进行另一次调用,但这次是对led2的模式调用设置为低。在两次digitalWrite()调用之后,进行延迟(1000)调用,其效果为暂停程序1秒钟。延迟1秒后,相同的digitalWrite()调用进行时,仅反转这些调用中的pin值,然后程序再次暂停1秒。如果你研究这段代码,你应该能够发现,这会导致两个LED发光,每秒来回“眨眼”一次。此过程将永远持续,直到电源断开或出现系统故障。
大家可以把这个示例放到Arduino的IDE和使用对应的开发板进行试验。运行这个程序,认真对待硬件、摆弄软件是真正学习这些东西的唯一途径。(www.xing528.com)
现在,让我们修改程序以使用if语句块。唯一受影响的语句块是loop()函数块。修改后的代码为:
其中,新变量counter是一个长整型数据类型,初始化为0,并在led1和led2的数据定义之后进行定义。
让我们看看代码:
counter%2
获取计数器的当前值并对其执行模数2运算。因为模运算返回除法后的余数,所以模2的任何数字都等同于询问该数字是奇数还是偶数。考虑:
1%2=1
2%2=0
3%2=1
4%2=0
5%2=1
等等,因为每次通过环路时计数器都会增加1(计数器=计数器+1),所以模测试具有切换LED的效果。最终的结果是程序的执行与以前几乎一样。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。