树莓派控制高电平蜂鸣器(c语言+新手向)
话不多说,先上代码:
#include <wiringPi.h> #include <stdio.h> #include <sys/time.h> #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); } int main(){ 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运行。