話不多說,先上代碼:
#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運行。