查看: 22409|回复: 14

数字I/O的使用

[复制链接]
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2017-12-18 00:23 | 显示全部楼层 |阅读模式
    本文节选自《Arduino程序设计基础》

    Arduino上每一个带有数字编号的引脚,都是数字引脚,包括写有“A”编号的模拟输入引脚。使用这些引脚,可以完成输入输出数字信号的功能。
    a.jpg

    数字信号
    数字信号是以0、1表示的电平不连续变化的信号,也就是以二进制的形式表示的信号。 在Arduino中数字信号通过高低电平来表示,高电平则为数字信号1,低电平则为数字信号0 。
    251.jpg


    Arduino上每一个带有数字编号的引脚,都是数字引脚,包括写有“A”编号的模拟输入引脚。使用这些引脚,可以完成输入输出数字信号的功能。
    在使用输入或输出功能前,你需要先通过pinMode() 函数配置引脚的模式为输入模式或输出模式。


    参数pin为指定配置的引脚编号;参数mode为指定的配置模式。
    可使用的三种模式:
    INPUT        输入模式
    OUTPUT        输出模式
    INPUT_PULLUP        输入上拉模式

    如之前我们在Blink程序中使用到了pinMode(13, OUTPUT),即是把13号引脚配置为输出模式。
    配置成输出模式后,你还需要使用digitalWrite() 让其输出高电平或者是低电平。其调用形式为:


    参数pin为指定输出的引脚编号;参数value为你要指定输出的电平,使用HIGH指定输出高电平,或是使用LOW指定输出低电平。

    Arduino中输出的低电平为0V,输出的高电平为当前Arduino的工作电压。例如Arduino UNO的工作电压为5V,其高电平输出也是5V;Arduino Due工作电压为3.3V,所以高电平输出也就是3.3V。

    数字引脚除了用于输出信号外,还可以用digitalRead() 函数读取外部输入的数字信号,其调用形式为:

    参数pin为指定读取状态的引脚编号;返回值value为获取到的信号状态,1为高电平,0为低电平。

    Arduino UNO会将大于3V的输入电压视为高电平识别,小于1.5V的电压视为低电平识别。所以,即使输入电压不太准确,Arduino UNO也可以正常识别。需要注意的是,超过5V的输入电压可能会损坏Arduino UNO。(不同型号的Arduino有所不同)

    在Arduino核心库中,OUTPUT被定义等于1,INPUT被定义等于0,HIGH被定义等于1,LOW被定义等于0。因此这里也可以用数字替代这些定义。如:

    此处仅作说明,并不推荐这样写代码,因为这样会降低程序的可读性。

    我们再回到最初的Blink程序,在Arduino IDE菜单>文件>示例>01.Basics>Blink 找到它。程序如下:

    kittenblock中小学创客名师推荐的图形化编程软件

    /*
      Blink
    等待一秒钟,点亮LED,再等待一秒钟,熄灭LED,如此循环
    */
    
    // 在大多数Arduino控制板上 13号引脚都连接了一个标有“L”的LED灯
    // 给13号引脚连接的设备设置一个别名“led”
    int led = 13;
    
    // 在板子启动或者复位重启后, setup部分的程序只会运行一次
    void setup(){
      // 将“led”引脚设置为输出状态
      pinMode(led, OUTPUT);     
    }
    
    // setup部分程序运行完后,loop部分的程序会不断重复运行
    void loop() 
    {
      digitalWrite(led, HIGH);   // 点亮LED
      delay(1000);           // 等待一秒钟
      digitalWrite(led, LOW);   // 通过将引脚电平拉低,关闭LED
      delay(1000);           // 等待一秒钟
    }


    在Blink中,我们通过新建变量的方法

    为13脚连接的设备设置了一个变量名“led”,在此后的程序中,使用“led”则可代表对应编号的引脚(或者是该引脚上连接的设备)。这种写法可以提高程序的可读性,并且方便修改,如设备需要更换连接引脚,直接修改该变量对应的数值即可。
    也可以使用如下语句:

    以宏定义的方式,来为设备设置一个名称。

    delay() 为毫秒延时函数,delay(1000) 即延时1秒(1000毫秒),在本程序中用来控制,开关LED的间隔时间。你可以自行修改其中的参数,观察实际运行效果。

    Blink是最简单的Arduino程序,在此基础上,我们还可以制作控制多个LED,逐个点亮,逐个熄灭的流水灯效果。


    下一节流水灯实验:
    http://www.arduino.cn/thread-74477-1-1.html



    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

     楼主| 发表于 2017-12-18 22:01 | 显示全部楼层

    等空了,排版上传
    如果以上内容对你有帮助,你可以通过打赏支持作者

    该用户从未签到

    发表于 2018-2-1 13:20 | 显示全部楼层
    感谢,对新手真的很有用。
  • TA的每日心情
    开心
    2018-5-25 09:08
  • 签到天数: 31 天

    [LV.5]常住居民I

    发表于 2018-2-3 20:12 | 显示全部楼层
    真的有帮助,谢谢
  • TA的每日心情
    郁闷
    2019-3-18 13:24
  • 签到天数: 95 天

    [LV.6]常住居民II

    发表于 2018-4-2 21:19 | 显示全部楼层
    有帮助,谢谢
  • TA的每日心情
    擦汗
    2018-12-11 22:03
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2018-4-20 22:06 | 显示全部楼层
    哈 看完了  看楼主的教程感觉很简单的样子  真不错
  • TA的每日心情

    2018-6-20 23:03
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2018-6-20 23:37 | 显示全部楼层
    学了模电以后才学的数电,个人感觉数电比较简单,但是还是有很多不同的地方和难点需要去攻克
  • TA的每日心情
    开心
    2018-8-27 15:22
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2018-8-27 20:02 | 显示全部楼层
    想不到这教程是今年才写的

    点评

    几年前写的,今年更新了下  详情 回复 发表于 2018-8-27 20:34
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    AT固件无法正常使用
    AT固件无法正常使用
    按照文档烧入AT固件后,串口(9600)输出如下: 发送AT指令没有反应。
    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    数字传感器与模拟传感器的使用
    数字传感器与模拟传感器的
    很多新人问,如何写XX传感器的驱动,这里说说简单只需要读取一个数字信号或者模拟信号
    基于Esp8266的点阵时钟
    基于Esp8266的点阵时钟
    芯片是ESP8266 12F 配合点阵单元板(64*32,单色),实现自动对时,天气预报,农历,
    做个遥控玩具
    做个遥控玩具
    现在我想做个手工,想用这个当5V马达+5V灯光+5V音乐的遥控器 可以实现吗?还需要买Ar
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表