话不多说,先上代码:
#include #include#include
#define VOICE 0
void ultraInit(void){
pinMode(VOICE,OUTPUT);//我们此处是用的是GPIO.0输入输出端口,所以pin=0
}void doVoice(void){
digitalWrite(VOICE,LOW);//初始化引脚电平值为LOW
for(int i=1;i<=6;i++){
printf("This is NO.%d\n",i);
digitalWrite(VOICE,HIGH);//设置引脚传出高电平
delay(500);
digitalWrite(VOICE,LOW);//设置引脚传出低电平
delay(1000);
}
digitalWrite(VOICE,LOW);
}intmain(){if(wiringPiSetup() == -1){ //初始化树莓派
printf("setup wiringPi failed !");return 1;
}
ultraInit();//初始化端口
doVoice();//控制蜂鸣器发声
printf("This is END\n");return 0;
}
接下来我们来看一下这个实验主要用到的模块——高电平蜂鸣器。顾名思义,高电平蜂鸣器就是在引脚传入HIGH电平时会发出时声音,声音的模式是bing~bing~。
我们可以看到高电平蜂鸣器有三个引脚(使用母对母杜邦线):
1.GND 接地引脚(接树莓派14号引脚)
2.I/O 输入输出引脚(接树莓派11号引脚——GPIO.0)
3.VCC 接电源引脚(接树莓派4号引脚)
程序的开始我们先用pinMode将GPIO.0引脚设置为OUTPUT(输出)模式。
因为该蜂鸣器的触发模式是传入一个高电平,所以在开始之前先将11号引脚的电平值设置为LOW,然后我们运用一个for循环控制蜂鸣器响的次数。
在for循环中,我们首先设置11号引脚的电平值为HIGH,这个时候蜂鸣器开始发声,然后用delay函数让程序休眠500ms,要注意的是,引脚的电平值在改变后在下一次改变之前是不会改变的,在程序休眠的这500ms,11号引脚的输出电平一直是HIGH。在休眠500ms后,我们修改11号引脚的电平值为LOW,蜂鸣器停止发声。然后让程序休眠1000ms,在这1s内,11号引脚的电平值一直为LOW。
我在这里设置的for循环次数为6,所以蜂鸣器会发声6次,每次500ms。之后程序结束。
程序运行时还是先用gcc -Wall -o voice voice.c -lwiringPi编译,然后用sudo ./voice运行。