3.1 调声函数
1.tone()
功能:让指定引脚产生一个占空比为50%的指定频率的方波
语法:
tone(pin,frequency);
tone(pin, frequency, duration);
pin是输出方波的引脚;frequency为输出方波的频率;duration为频率持续的时间,单位为毫秒。如果没有该参数,Arduino将持续发出设定的音调,直到改变了发声频率或者使用no Tone()函数停止发声。
注意:同一时间的tone函数只能作用于一个引脚,如果有多个引脚需要使用tone函数,则必须先使用noTone函数停止之前已经使用了tone函数的引脚
3.2脉冲宽度测量函数及超声波测距
3.2.1脉冲宽度测量函数
pulseIn()
功能:检测指定引脚上的脉冲信号宽度
语法:pulseIn(pin,value); pulseIn(pin,value, timeout);
参数:pin:读取脉冲的引脚
value:需要读取脉冲的类型,为HIGH或LOW;
timeout:超时时间,单位为微秒,返回值类型为 unsigned long
(如果超过设定时间仍未检测到脉冲,则会退出pulseIn()函数并返回0。当没有设定超时时间时,默认返回1s)
3.2.2超声波测距
1.SR04超声波传感器
引脚Vcc Trig(触发引脚) Echo(回馈引脚) Gnd(地)
2.使用方法
使用Arduino数字引脚给SR04模块的Trig引脚至少10us的高电平信号,触发测距功能
若有信号返回Echo引脚会输出高电平,高电平持续时间是超声波从反射到返回的时间。此时pulseIn()函数获取测距结果,并计算实际距离
示例程序:(编译已通过)
//设定SR04连接的Arduino引脚
const int TrigPin = 2;
const int EchoPin = 3;
float distance;
void setup() {
//初始化串口通信及连接SR04的引脚
Serial.begin(9600);
pinMode(TrigPin, OUTPUT);
pinMode(EchoPin, INPUT);
Serial.println("Ultrasonic sensor:");
}
void loop() {
//产生一个10us的高脉冲去触发TrigPin
digitalWrite(TrigPin,LOW);
delayMicroseconds(2);
digitalWrite(TrigPin,HIGH);
delayMicroseconds(10);
digitalWrite(TrigPin,LOW);
//检测脉冲宽度,并计算出距离
distance = pulseIn(EchoPin,HIGH)/58.00; //s = (v*t)/2;
Serial.print(distance);
Serial.print("cm");
delay(1000);
}
4.中断函数
在setup()中使用attachInterrupt()函数对中断引脚进行初始化配置,以开启Arduino的外部中断功能
4.1中断触发方式
LOW:低电平触发
CHANGE:电平变化触发
RISING:上升沿触发,即低电平变高电平
FALLING:下降沿触发,即高电平变低电平
4.2attachInterrupt(interrupt,function,mode)
功能:对中断引脚进行初始化配置
参数:
interrupt:中断编号(不是引脚编号)int0,int1;
function:中断函数名,当中断触发后便执行此函数
mode:中断模式
例如
attachInterrupt(0, hello, FALLING);//UNO板上的2号引脚
如果不需要使用外部中断,则可以使用中断分离函数detachInterrupt()来关闭中断功能
4.3detachInterrupt(interrupt)
功能:禁用外部中断
参数:interrupt,要禁用的中断号