Advanced I/O
更新时间:2017-08-08 阅读:13966
目录
操作环境
1. 操作系统 : Windows 7 Ultimate 64-bit 2. IDE : Arduino1.6.6
tone()
说明
在一个引脚上产生一个特定频率的方波(50%占空比)。持续时间可以设定,否则波形会一直产生直到调用noTone()函数。该引脚可以连接压电蜂鸣器或其他喇叭播放声音。 在同一时刻只能产生一个声音。如果一个引脚已经在播放音乐,那调用tone()将不会有任何效果。如果音乐在同一个引脚上播放,它会自动调整频率。 使用tone()函数会与3脚和11脚的PWM产生干扰(Mega板除外)。
语法
tone(pin,frequency) tone(pin,frequency,duration)
参数
pin:要产生声音的引脚 frequency: 产生声音的频率,单位Hz,类型unsigned int duration:声音持续的时间,单位毫秒(可选),类型unsigned long注意事项
返回值
无
注意事项
如果你要在多个引脚上产生不同的音调,你要在对下一个引脚使用tone()函数前对此引脚调用noTone()函数。
noTone()
说明
停止由tone()产生的方波。如果没有使用tone()将不会有效果。
语法
noTone(pin)
参数
pin:所要停止产生声音的引脚。
返回值
无
注意事项
如果你想在多个引脚上产生不同的声音,你要在对下个引脚使用tone()前对刚才的引脚调用noTone()。
shiftOut()
说明
将一个数据的一个字节一位一位的移出。 从最高有效位(最左边)或最低有效位(最右边)开始。 依次向数据脚写入每一位,之后时钟脚被拉高或拉低,指示刚才的数据有效。
语法
shiftOut(dataPin, clockPin, bitOrder, value)
参数
dataPin:输出每一位数据的引脚(int) clockPin:时钟脚,当dataPin有值时此引脚电平变化(int) bitOrder:输出位的顺序,最高位优先或最低位优先 value: 要移位输出的数据(byte)
返回值
无
注意事项
1.如果你所连接的设备时钟类型为上升沿,你要确定在调用shiftOut()前时钟脚为低电平,如调用digitalWrite(clockPin, LOW)。 2.dataPin和clockPin要用pinMode()配置为输出。 shiftOut目前只能输出1个字节(8位),所以如果输出值大于255需要分两步。
示例
// Do this for MSBFIRST serial int data = 500; // shift out highbyte shiftOut(dataPin, clock, MSBFIRST, (data >> 8)); // shift out lowbyte shiftOut(dataPin, clock, MSBFIRST, data); // Or do this for LSBFIRST serial data = 500; // shift out lowbyte shiftOut(dataPin, clock, LSBFIRST, data); // shift out highbyte shiftOut(dataPin, clock, LSBFIRST, (data >> 8));
示例程序
//**************************************************************// // Name : shiftOutCode, Hello World // // Author : Carlyn Maw,Tom Igoe // // Date : 25 Oct, 2006 // // Version : 1.0 // // Notes : Code for using a 74HC595 Shift Register // // : to count from 0 to 255 // //**************************************************************** //Pin connected to ST_CP of 74HC595 int latchPin = 8; //Pin connected to SH_CP of 74HC595 int clockPin = 12; ////Pin connected to DS of 74HC595 int dataPin = 11; void setup() { //set pins to output because they are addressed in the main loop pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { //count up routine for (int j = 0; j < 256; j++) { //ground latchPin and hold low for as long as you are transmitting digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, LSBFIRST, j); //return the latch pin high to signal chip that it //no longer needs to listen for information digitalWrite(latchPin, HIGH); delay(1000); } }
shiftIn()
说明
将一个数据的一个字节一位一位的移入。 从最高有效位(最左边)或最低有效位(最右边)开始。 对于每个位,先拉高时钟电平,再从数据传输线中读取一位,再将时钟线拉低。
语法描述
shiftIn(dataPin,clockPin,bitOrder)
参数介绍
dataPin:输出每一位数据的引脚(int) clockPin:时钟脚,当dataPin有值时此引脚电平变化(int) bitOrder:输出位的顺序,最高位优先或最低位优先
返回值
读取的值(byte)
注意事项
这是一个软件实现;Arduino提供了一个硬件实现的SPI库,它速度更快但只在特定脚有效。
pulseIn()
功能介绍
读取一个引脚的脉冲(HIGH或LOW)。 例如,如果value是HIGH,pulseIn()会等待引脚变为HIGH,开始计时,再等待引脚变为LOW并停止计时。 返回脉冲的长度,单位微秒。 如果在指定的时间内无脉冲函数返回。 此函数的计时功能由经验决定,长时间的脉冲计时可能会出错。计时范围从10微秒至3分钟。(1秒=1000毫秒=1000000微秒)。
语法描述
pulseIn(pin, value) pulseIn(pin, value, timeout)
参数介绍
pin:你要进行脉冲计时的引脚号(int)。 value:要读取的脉冲类型,HIGH或LOW(int)。 timeout (可选):指定脉冲计数的等待时间,单位为微秒,默认值是1秒(unsigned long)。
返回值
脉冲长度(微秒),如果等待超时返回0(unsigned long)。
示例程序
int pin = 7; unsigned long duration; void setup() { pinMode(pin, INPUT); } void loop() { duration = pulseIn(pin, HIGH); }