世界最小的Arduino——ATTiny13上手全攻略2B呼吸灯

实验二:多功能调光灯(呼吸灯)

在本实验中,我们将通过制作一款多功能调光灯来熟悉模拟量输入和PWM输出控制。本实验主要由两部分控制逻辑构成,当电位器旋钮调节从0到接近最大值时,LED会将电位器输入的模拟量映射成PWM输出,实现亮度从暗到亮的调节;当电位器旋钮旋转到最大值时,系统会切换到呼吸灯模式。最终实现效果如下图

01_DZ20150503_173238_meitu_1.jpg

02_LZ20150503_173049_meitu_2.jpg

面包板接线也比较简单,左边一个旋钮电位器接到A3端口,右面一个LED接到ATTiny13的PWM0引脚上。在ATTiny13中,模拟量端口支持A0到A3(其中A0是RST复位引脚不能用)。
03_T0104_Fade_PWM_Breathinglight_V3_bb.png

本实验的代码稍微复杂了一点,除了涉及到analogIn()和analogWrite()两个模拟量功能函数,还使用了if()判断和map()映射函数。这里大家要注意一点我们的代码量已经达到了950 bytes,再写几行估计就要存储空间不足了。如果希望包含更多的LED效果,就需要对代码进行优化了,我们会在后续的教程中进行介绍。
04_Code.PNG

当然如果大家仅仅想实现呼吸灯功能,可以直接选择Arduino文件菜单中的File > Examples > 03.Analog > Fading来实现。但要记得把ledPin的值修改为0或1(ATTiny13只有2路PWM输出,其他引脚不支持analogWrite()函数),否则虽然编译可以通过,但是下载进去不会有任何效果。

BreathingLightS.gif

如果希望对ATTiny13的函数有进一步了解,可以打开Arduino软件所在文件夹,找到其目录下的arduino-1.0.3\hardware\arduino\cores\core13\wiring_analog.c文件并用记事本打开。AnalogWrite()函数会先进行兼容性输出模式设置,这也是为什么即使在setup()中我们没有对输出的LED进行pinMode(pin, OUTPUT)的定义,程序也能正常运行的原因。然后判断引脚的兼容性,并对0或1引脚进行PWM的寄存器操作,而其他引脚则不受PWM值影响只有点亮或熄灭两种状态。
05_Analog.PNG

标签: Arduino教程