《Arduino开发实战指南:机器人卷》一2.3 高级IO

    xiaoxiao2023-08-20  154

    本节书摘来华章计算机《Arduino开发实战指南:机器人卷》一书中的第2章 ,第2.3节,黄文恺 伍冯洁 陈 虹 编著更多章节内容可以访问云栖社区“华章计算机”公众号查看。

    2.3 高级I/O

    2.3.1 PulseIn(pin,state,timeout)PulseIn函数用于读取指定引脚的脉冲持续的时间长度,该函数返回值类型为无符号长整型(unsigned long),单位为ms,如果超时没有读到的话,则返回0。PulseIn函数包含3个参数pin、state、timeout。参数pin代表脉冲输入的引脚;参数state代表脉冲响应的状态,脉冲可以是HIGH或者LOW,如果是HIGH,则PulseIn函数将先等引脚变为高电平,然后开始计时,一直到变为低电平;参数timeout代表超时时间。做一个按钮脉冲计时器,测一下按钮的时间,测测谁的反应快,看谁能按出最短的时间,其中按钮接引脚3。示例程序如下:

    int button=3; int count; void setup() { pinMode(button,INPUT); } void loop() { count=pulseIn(button,HIGH); if(count!=0) { Serial.println(count,DEC); count=0; } }

    2.3.2 shiftOut(dataPin,clockPin,bitOrder,val)shiftOut函数的作用是将一个数据的一个字节一位一位地移出,它是一个无返回值函数。从最高有效位(最左边)或最低有效位(最右边)开始,依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。shiftOut函数包括4个参数dataPin、clockPin、bitOrder、val,其具体含义如下。

    dataPin:输出每一位数据的引脚,引脚需配置成输出模式。clockPin:时钟脚,当dataPin有数据时,此引脚电平会发生变化,引脚需配置成输出模式。bitOrder:输出位的顺序,有最高位优先(MSBFIRST)和最低位优先(LSBFIRST)两种方式。val:所要输出的数据值,该数据值将以byte形式输出。

    从相应引脚输出500的示例程序如下,其中dataPin接引脚11,clockPin接引脚12,按最低位优先输出方式:

    int dataPin = 11; int clockPin = 12; int data = 500; void setup() { pinMode(dataPin, OUTPUT); // 设置引脚为输出 pinMode(clockPin, OUTPUT); // 设置引脚为输出 } void loop() { shiftOut(dataPin,clockPin,LSBFIRST,data); // 移位输出低字节 shiftOut(dataPin,clockPin,LSBFIRST,data>>8); // 移位输出高字节 }

    注意shiftOut目前只能输出1个字节(8位),所以如果输出值大于255需要分两步。

    相关资源:Arduino开发实战指南 智能家居卷
    最新回复(0)