Arduino项目式编程教学第二章——呼吸灯

文章目录
一、Arduino UNO拓展板简介
二、电位器及串口监视器的使用
三、LED灯模块的使用
四、使用电位器模块控制LED灯的亮度
五、实现呼吸灯效果(for循环的使用)
六、总结

硬件清单

在这里插入图片描述

一、Arduino UNO拓展板简介

在这里插入图片描述
如图所示为市面常见的 Arduino UNO 拓展板,其作用便是将 UNO 板上有限的端口进行拓展,比如将所有的信号端与电源端口组合到一起,使得接线变得清晰方便,其价格一般在 10 元以内,在后面的章节中我们会将 UNO 板与拓展板组合在一起使用。

二、电位器及串口监视器的使用

1.电位器模块的使用

在这里插入图片描述

如图为电位器模块,其原理并不难理解,在其内部相当于一个滑动变阻器,通过旋转旋钮使得分得的电压不同,从而在 OUT 端口输出的电平数值也会发生变化,进而被 Arduino 板卡读取;其有三个接口,GND接负极VCC接正极OUT接模拟输入端口(即 A 开头的端口);按照下图进行接线:
在这里插入图片描述
接下来对数字端口模拟端口作进一步的说明——数字端口(DIGITAL)可向外输出高/低电平信号(即 0/1),能够使灯亮/灭、使电机转/不转,仅两种状态;也可接传感器,但也仅能接收高低两种电平信号(即 0/1);至于 PWM 的作用我们下文作讲解。模拟端口(ANALOG IN)仅能用作接收信号,但能根据接收的电压大小来映射到 0~10231024 个状态。因此作为能够输出不同电压信号的电位器,需要接到模拟输入端口。

2.串口监视器的使用

在将电位器模块接入模拟输入端口后,需要思考一个问题——我们应该如何检测到电位器当前的状态?因此接下来介绍一个位于 Arduino 编译器页面的起监视传感器状态作用的工具——串口监视器
在这里插入图片描述
如图所示位置,点击即可进入串口监视器页面。

在这里插入图片描述
串口监视器中央较大的区域会根据我们的要求及程序来进行相应的显示。
接下来完成通过串口监视器电位器模块状态进行监视的程序:

void setup() 
{
	pinMode(A0,INPUT);  //将电位器连接的模拟端口设置为输入模式
	Serial.begin(9600);  //初始化串口监视器,默认设置为 9600 波特率
}

setup 区域内初始化 A0 端口为输入模式;并且初始化串口监视器的波特率9600(此数值并不是固定的,但要与串口监视器界面的波特率对应)。

void loop() 
{
  Serial.println(analogRead(A0));  //通过串口监视器输出模拟数值
}

现对 loop 区域的代码进行说明:Serial.println()为调用 Serial 库内的一种方法 println(),此方法可以输出括号内的数值,print() 为直接输出,但 println()即可换行输出,方便观察;另外 analogRead()作用为获取模拟端口的模拟信号,范围为 0~1023。将以上程序上传至 Arduino UNO 板,成功后在编译器页面打开串口监视器
在这里插入图片描述
旋转电位器模块旋钮,观察串口监视器的输出,可以发现数值是在 0~1023 之间进行变化的。

三、LED 灯模块的使用

在这里插入图片描述
此LED灯模块上的灯头比我们上一章节中使用的要大很多,并且不易烧坏,同样有各种颜色的灯头,当然价格也会稍贵一些,在2~3元钱/个左右;但也存在另外一个区别——之前的LED灯仅有两个针脚,但此LED灯模块有3个针脚,接下来我们对LED灯模块的电路原理进行分析:
在这里插入图片描述
此LED灯模块的三个针脚VCC接正极GND接负极IN接数字信号端口;当给IN针脚低电平信号时(如左图),LED灯所在电路部分被短路,不会被点亮;当给IN针脚高电平信号时,LED灯所在电路形成一个电流回路,能够被点亮。当然,不同款式的LED灯模块的电路原理会稍有不同,并且即使不了解此原理也不会影响使用,知道给IN针脚高电平信号即可点亮LED灯即可。
按照下图将LED灯模块进行接线测试:
在这里插入图片描述
完成以下代码:

void setup()
{
	pinMode(3,OUTPUT);  //设置3号数字端口为输出
}

void loop()
{
	digitalWrite(3,HIGH);  //设置3号数字端口输出高电平信号
}

上传上述程序到Arduino板,并检查是否可以点亮LED灯。

四、使用电位器模块控制LED灯的亮度

1.使用PWM脉冲调制信号改变LED灯亮度

在这里插入图片描述
接下来我们对Arduino板数字针脚部分的PWM作详细介绍:
在这里插入图片描述
在对Arduino端口进行介绍时,我们说到数字端口(DIGITAL)可用作输入输出高低电平信号两种状态,模拟端口(ANALOG IN)仅可输入0~1023范围的模拟信号;但如果要调节LED灯的亮度的话,仅靠数字端口的高低两种状态的电平信号显然是不够的(仅能控制亮与灭);因此这里引入PWM信号的原理及作用——PWM全称为“脉冲宽度调制”,即通过分配某一周期内高低电平的占空比,来输出0~5V间的电平信号,如上图所示,如果一个周期内的高低占比各50%,则可以输出2.5V的电平。所以Arduino UNO板上的6个数字端口,3、5、6、9、10、11(即带有的几个端口),均可以输出PWM信号,完成以下代码:

void setup()
{
	pinMode(3,OUTPUT);
}

void loop()
{
	analogWrite(3,10);  //向3号端口输出模拟信号
	delay(200);
	analogWrite(3,100);  //输出模拟信号范围为 0 ~ 255
	delay(200);
	analogWrite(3,255);  //最大为255,即最大输出电平
	delay(200);
}

对上述程序作简要讲解:分别向3号端口输出不同的模拟信号,但要注意模拟信号范围为0~255,并且要给予一定的延时,使得变化速度能够被肉眼观察到;上传上述程序到Arduino板,并观察是否有亮度的变化。

2.电位器控制LED灯亮度的实现

在这里插入图片描述
按照上图对电位器模块LED灯模块进行连接,并完成以下代码。

void setup()
{
  pinMode(A0,INPUT);  //设置模拟端口A0为输入模式
  pinMode(3,OUTPUT);  //设置PWM端口3号为输出模式
}

int a;  //定义两个变量a,b
int b;  //用于存储从电位器获取的模拟信号

void loop()
{
  a = analogRead(A0);  //将从电位器获取的模拟信号存储于变量a
  b = map(a,0,1023,0,255);  //通过map函数将0~1023范围的信号映射到0~255
  analogWrite(3,b);  //将映射到0~255范围的信号写入3号PWM端口
}

现对上述程序进行解释:“int”称之为“整型”,可以记录−2147483648~2147483647范围内的整数,并且定义了两个变量a与b用于存储数值;接下来将从电位器模块获取的模拟信号赋值给变量a,此时a的范围为0~1023,但在上文使用PWM端口控制LED灯亮度时,已经了解到PWM端口输出数值范围为0~255
因此需要将0~1023的数值映射到0~255,这里使用了map()函数用于映射数值,map()函数内依次有5个数值,第一个位置为要被映射的数值,第二三位置为映射前数值的范围,第四五位置为要映射到的数值;因此map(a, 0, 1023, 0, 255)可将变量a0~1023映射到0~255
将上述程序上穿到Arduino板,并旋转电位器,观察是否可以改变LED灯的亮度。

五、实现呼吸灯效果(for循环的使用)

现可将电位器模块去除,仅保留LED灯模块:
在这里插入图片描述
接下来需要思考呼吸灯效果的逻辑——即LED灯由灭逐渐到最亮,然后逐渐熄灭,依次不断循环。对应到本章中,即要给LED灯从信号0逐步增加到信号255,再逐渐减少到0,依次不断循环。接下来需要引入可以实现此种功能的函数——for循环。
在这里插入图片描述
仔细阅读上图for循环的执行顺序,并作简要讲解,用以下代码作为示例:

for(int i = 0; i <= 100; i++)
{
	Serial.println(i);
}

上述代码为完整的for循环,执行顺序为1.先赋值变量i为0;2.执行判断“i <= 100”,如果满足则继续执行,若不满足则跳出循环;3.若满足条件,则执行循环内语句,输出i当前的数值;4.执行“i++”,即i自身数值加1
接下来完成呼吸灯效果程序:

void setup()
{
  pinMode(3,OUTPUT);
}
void loop()
{
  for(int i = 0; i <= 255; i++)   //使用for循环将i从0逐渐加到255
  {
    analogWrite(3, i);  //将i的数值写入3号针脚
    delay(10);  //延时10毫秒
  }
  for(int i = 255; i >= 0; i--)   //使用for循环将i从255逐渐减到0
  {
    analogWrite(3, i);  //将i的数值写入3号针脚
    delay(10);  //延时10毫秒
  }
}

将以上程序写入Arduino板;通过我们的分析,需要使用for循环将要写入3号针脚的数值i先增加到255再减到0,逐步循环,则通过以上程序即可完成这一功能;也可尝试改变一下delay延时到数值,以改变呼吸灯的呼吸速度。

六、总结

本章涉及内容较多,我们引入了Arduino UNO拓展板电位器模块LED灯模块这几类硬件的使用,也延伸了编译器的串口监视器功能及PWM脉宽调制信号的概念及使用,并且了解了map()函数用于映射数据,for()循环用于循环执行指令;在功能上完成了使用电位器对LED灯亮度的控制,以及呼吸灯效果的实现;较多的内容,需要读者耐心的研读琢磨,并以此为基础,才能顺利完成后面章节的学习。

关于呼吸的C语言编程Options 1,0,0 // Target 'Target 1' Device (AT89C51) Vendor (Atmel) Cpu (IRAM(0-0x7F) IROM(0-0xFFF) CLOCK(24000000)) FlashUt () StupF ("LIB\STARTUP.A51" ("Standard 8051 Startup Code")) FlashDR () DevID (2976) Rgf (REGX51.H) Mem () C () A () RL () OH () DBC_IFX () DBC_CMS () DBC_AMS () DBC_LMS () UseEnv=0 EnvBin () EnvInc () EnvLib () EnvReg (Atmel\) OrgReg (Atmel\) TgStat=16 OutDir (.\) OutName (a9) GenApp=1 GenLib=0 GenHex=1 Debug=1 Browse=1 LstDir (.\) HexSel=0 MG32K=0 TGMORE=0 RunUsr 0 0 RunUsr 1 0 BrunUsr 0 0 BrunUsr 1 0 SVCSID MODEL5=0 RTOS5=0 ROMSZ5=2 DHOLD5=0 XHOLD5=0 T51FL=80 XT51FL=0 CBANKS5=0 XBANKS5=0 RCB51 { 0,0,0,0,0,0,0,1,0 } RXB51 { 0,0,0,0,0,0,0,0,0 } OCM51 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } OCR51 { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } IRO51 { 1,0,0,0,0,0,16,0,0 } IRA51 { 0,0,0,0,0,128,0,0,0 } XRA51 { 0,0,0,0,0,0,0,0,0 } XRA512 { 0,0,0,0,0,0,0,0,0 } IROM512 { 0,0,0,0,0,0,0,0,0 } C51FL=21630224 C51VA=0 C51MSC () C51DEF () C51UDF () INCC5 () AX51FL=4 AX51MSC () AX51SET () AX51RST () INCA5 () PropFld { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } IncBld=1 AlwaysBuild=0 GenAsm=0 AsmAsm=0 PublicsOnly=0 StopCode=3 CustArgs () LibMods () BankNo=65535 LX51FL=292 LX51OVL () LX51MSC () LX51DWN () LX51LFI () LX51ASN () LX51RES () LX51CCL () LX51UCL () LX51CSC () LX51UCS () LX51COB () LX51XDB () LX51PDB () LX51BIB () LX51DAB () LX51IDB () LX51PRC () LX51STK () LX51COS () LX51XDS () LX51BIS () LX51DAS () LX51IDS () OPTDL (S8051.DLL)()(DP51.DLL)(-p51)(S8051.DLL)()(TP51.DLL)(-p51) OPTDBG 48125,-1,()()()()()()()()()() ()()()() FLASH1 { 0,0,0,0,0,0,0,0,255,255,255,255,0,0,0,0,0,0,0,0 } FLASH2 () FLASH3 () FLASH4 () EndOpt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

洪博hopes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值