Fireduino 开源创意平台 立即购买

拥有双核Cortex-M3处理器,集成高质量音频Codec和WiFi模组,拥有良好的IOT扩展性能,完美兼容Arduino IDE和Arduino标准接口,并支持FireBlock图形化编程软件,是一款首选的编程启蒙教学平台,更是一款开源的创意原型平台。

Advanced I/O

更新时间:2017-08-08 阅读:1698

操作环境

   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);
}