极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12063|回复: 1

《博哥Arduino学习笔记系列》- 第三课 经典LED

[复制链接]
发表于 2016-12-2 23:55:08 | 显示全部楼层 |阅读模式
本帖最后由 单片机菜鸟 于 2016-12-3 23:56 编辑

一、前言

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

二、数字IO 介绍

      第三课主要用到数字IO口,所以在开始实验之前,我们先来认识一下Arduino的数字IO口。

      数字信号是以0、1表示的不连续信号,也就是以二进制形式表示的信号。在Arduino中数字信号用高低电平来表示,高电平为数字信号1,低电平为数字信号0。Arduino上每一个带有数字编号的引脚都是数字引脚,包括写有"A"编号的模拟输入引脚。使用这些引脚可以完成输入/输出数字信号的功能
      在使用输入或者输出功能前,需要先通过pinMode()函数配置引脚的模式为输入或者输出模式:
      pinMode(pin,mode);
      其中参数pin为指定配置的引脚编号,参数mode为指定的配置模式。

      

      而我们接下来的LED主要需要用输出模式,所以我们需要配置成 pinMode(pin,OUTPUT);配置为输出模式以后,还需要使用digitalWrite()函数使该引脚输出高电平或低电平。其调用形式为:
      digitalWrite(pin,value);
      其中参数pin为指定输出的引脚编号。参数value为要指定的输出电平,使用HIGH指定输出高电平,使用LOW指定输出低电平。
      Arduino中输出的低电平为0V,输出的高电平为当前Arduino的工作电压。

      数字引脚除了用于输出信号外,还可用digitalRead()函数读取外部输入的数字信号,其调用形式为:
      digitalRead(pin);
      其中参数pin为指定读取状态的引脚编号。
      当Arduino以5v供电时,会将范围为-0.5v~1.5v的输入电压作为低电压识别,将范围在3~5.5v的输入电压作为高电平识别。注意,过高的输入电压会损坏Arduino。在Arduino核心库中,OUTPUT被定义为1,INPUT被定义为0,HIGH被定义为1,LOW被定义0。

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

四、点亮LED
      
      实验用的LED模块(属于共阳极LED模块)如下:
      
      在玩流水灯之前,我们先尝试点亮熄灭一个LED(以后的实验板子都是Mega2560,,尽量在代码中注释,请大伙看注释):
      
  1. /**
  2. * @Desc 点亮熄灭单个LED
  3. * @author 单片机菜鸟
  4. * @Date  2016/12/2
  5. * 注意:LED的一端接到5V,另外一端接到输出引脚,低电平亮
  6. */

  7. #define LED 2  //定义2号引脚为LED

  8. void setup() {
  9.   // 将2号引脚设置为输出状态
  10.   pinMode(LED,OUTPUT);
  11. }

  12. void loop() {
  13.   digitalWrite(LED,LOW);//点亮LED
  14.   delay(1000);//延时1s
  15.   digitalWrite(LED,HIGH);//关闭LED
  16.   delay(1000);//延时1s
  17. }
复制代码


五、经典流水灯
  1. /**
  2. * @Desc 流水灯(8个LED依次亮灭)
  3. * @author 单片机菜鸟
  4. * @Date  2016/12/2
  5. * 注意:LED的一端接到5V,另外一端接到输出引脚,低电平亮
  6. */

  7. #define LED_START 2
  8. #define LED_END  9
  9. #define DELAY_TIME 500 //延时时间,可以调节然后就可以看到亮灭频率

  10. void setup() {
  11.   // 将2-9号引脚设置为输出状态
  12.   for(int i=LED_START;i<=LED_END;i++){
  13.     pinMode(i,OUTPUT);
  14.     digitalWrite(i,HIGH);//灭掉LED
  15.   }
  16. }

  17. void loop() {

  18.   //从引脚2到9引脚,逐个点亮LED,等待1S再熄灭LED
  19.   for(int i=LED_START;i<=LED_END;i++){
  20.     digitalWrite(i,LOW);//LED亮
  21.     delay(DELAY_TIME);
  22.     digitalWrite(i,HIGH);//LED灭
  23.   }

  24.   //从引脚9到2引脚,逐个点亮LED,等待1S再熄灭LED
  25.   for(int i=LED_END;i>=LED_START;i--){
  26.     digitalWrite(i,LOW);//LED亮
  27.     delay(DELAY_TIME);
  28.     digitalWrite(i,HIGH);//LED灭
  29.   }
  30.   
  31. }
复制代码

   本来楼主想上传个视频,但是有限制,那就只能这样了。不出意外,应该会看到流水亮灭
   此外,各位看官就可以实现各种现实效果的流水灯了。
六、总结
      这一节我们主要学到:
      1)数字IO
      2)延时函数的使用
      3)经典流水灯


博哥学习笔记系列:

《博哥Arduino学习笔记系列》- 第一课 初识Arduino
        http://www.geek-workshop.com/thread-27936-1-1.html

《博哥Arduino学习笔记系列》- 第二课 Arduino语言基础
        http://www.geek-workshop.com/thread-27938-1-1.html

《博哥Arduino学习笔记系列》- 第三课 经典LED
        http://www.geek-workshop.com/thread-27948-1-1.html

《博哥Arduino学习笔记系列》- 第四课 经典按键实验
        http://www.geek-workshop.com/thread-27958-1-1.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

 楼主| 发表于 2016-12-3 00:11:19 | 显示全部楼层
一楼镇楼哈哈哈
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-29 07:01 , Processed in 0.046724 second(s), 18 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表