Arduino学习笔记③ 经典LED

2019-07-14 00:43发布

  • 版权声明:本文为博主 **单片机菜鸟** 一心一血敲出来的原创作品,未经博主允许不得转载,多谢支持。
  • 本系列博客仅仅做个人技术交流分享,不做任何商业用途。如有不对之处,请留言,本人及时更改。
  • 如何和博主一起学习:
博主建立了ESP8266开发之旅学习群,需要的同学请加 869920142

目录

1.前言

    今天我们开始同时讲解理论以及实践。对于绝大部分有过单片机编程经历的人来说,第一个接触的大多数就是LED灯(忽然想起博主大一那个懵懂的时代,当时大三的师兄给我们展现了一把流水灯功力,当时真是炫了一把,心中无比激动)。

2.数字IO 介绍

    第三课主要用到数字IO口,所以在开始实验之前,我们先来认识一下Arduino的数字IO口。
    数字信号是以0、1表示的不连续信号,也就是以二进制形式表示的信号。在Arduino中数字信号用高低电平来表示,高电平为数字信号1,低电平为数字信号0。Arduino上每一个带有数字编号的引脚都是数字引脚,包括写有"A"编号的模拟输入引脚。使用这些引脚可以完成输入/输出数字信号的功能。
    在使用输入或者输出功能前,需要先通过pinMode()函数配置引脚的模式为输入或者输出模式:

2.1 pinMode(pin,mode)

方法:pinMode(pin,mode)
参数:pin为指定配置的引脚编号,参数mode为指定的配置模式。 image     而我们接下来的LED主要需要用输出模式,所以我们需要配置成 pinMode(pin,OUTPUT);配置为输出模式以后,还需要使用digitalWrite()函数使该引脚输出高电平或低电平。

2.2 digitalWrite(pin,value)

方法:digitalWrite(pin,value)
参数:pin为指定输出的引脚编号。参数value为要指定的输出电平,使用HIGH指定输出高电平,使用LOW指定输出低电平。
  • Arduino中输出的低电平为0V
  • 输出的高电平为当前Arduino的工作电压。
    数字引脚除了用于输出信号外,还可用digitalRead()函数读取外部输入的数字信号。

2.3 digitalRead(pin)

方法:digitalRead(pin)
参数:pin为指定读取状态的引脚编号。
注意:
  • 当Arduino以5v供电时,会将范围为-0.5v-1.5v的输入电压作为低电压识别,将范围在3-5.5v的输入电压作为高电平识别。
  • 过高的输入电压会损坏Arduino。在Arduino核心库中,OUTPUT被定义为1,INPUT被定义为0,HIGH被定义为1,LOW被定义0。

3.时间控制函数

    由于我们接下来的实验程序很多都用到延时函数,那么这里就介绍几个:
  • delay() ----- 毫秒级延时
  • delayMicroseconds() ----- 微秒级延时

4.点亮LED

4.1 实验器材

  • LED模块(这里属于共阳极LED模块)
image
  • Mega2560板子

4.2 实验内容

4.2.1 点亮熄灭单个LED

实验代码/** * @Desc 点亮熄灭单个LED * @author 单片机菜鸟 * @Date 2016/12/2 * 注意:LED的一端接到5V,另外一端接到输出引脚,低电平亮 */ #define LED 2 //定义2号引脚为LED void setup() { // 将2号引脚设置为输出状态 pinMode(LED,OUTPUT); } void loop() { digitalWrite(LED,LOW);//点亮LED delay(1000);//延时1s digitalWrite(LED,HIGH);//关闭LED delay(1000);//延时1s } 烧写到mega2560板子,连接LED引脚到2端口,正常现象会看到LED闪烁。

4.2.2 经典流水灯

实验代码/** * @Desc 流水灯(8个LED依次亮灭) * @author 单片机菜鸟 * @Date 2016/12/2 * 注意:LED的一端接到5V,另外一端接到输出引脚,低电平亮 */ #define LED_START 2 #define LED_END 9 #define DELAY_TIME 500 //延时时间,可以调节然后就可以看到亮灭频率 void setup() { // 将2-9号引脚设置为输出状态 for(int i=LED_START;i<=LED_END;i++){ pinMode(i,OUTPUT); digitalWrite(i,HIGH);//灭掉LED } } void loop() { //从引脚2到9引脚,逐个点亮LED,等待1S再熄灭LED for(int i=LED_START;i<=LED_END;i++){ digitalWrite(i,LOW);//LED亮 delay(DELAY_TIME); digitalWrite(i,HIGH);//LED灭 } //从引脚9到2引脚,逐个点亮LED,等待1S再熄灭LED for(int i=LED_END;i>=LED_START;i--){ digitalWrite(i,LOW);//LED亮 delay(DELAY_TIME); digitalWrite(i,HIGH);//LED灭 } } 不出意外,应该会看到LED灯流水亮灭.

5.总结

这一节我们主要学到:
  • 数字IO
  • 延时函数的使用
  • 经典流水灯