蜂鳴器模塊功能實現
-
驅動方式:
慣用驅動蜂鳴器的方式有兩種:一種是 PWM 輸出口直接驅動,另一種是利用I/O 定時翻轉電平產生驅動波形對蜂鳴器進行驅動。
PWM 輸出口直接驅動是利用 PWM 輸出口本身可以輸出一定的方波來直接驅動蜂鳴器。在單片機的軟件設置中有幾個系統寄存器是用來設置 PWM 口的輸出的,可以設置占空比、周期等等,通過設置這些寄存器產生符合蜂鳴器要求的頻率的波形之后,只要打開 PWM 輸出, PWM 輸出口就能輸出該頻率的方波,這個時候利用這個波形就可以驅動蜂鳴器了。比如頻率為 2000Hz的蜂鳴器的驅動,可以知道周期為 500μs,這樣只需要把 PWM 的周期設置為 500μs,占空比電平設置為 250μs,就能產生一個頻率為 2000Hz 的方波,通過這個方波再利用三極管就可以去驅動這個蜂鳴器了。
而利用 I/O 定時翻轉電平來產生驅動波形的方式會比較麻煩一點,必須利用定時器來做定時,通過定時翻轉電平產生符合蜂鳴器要求的頻率的波形,這個波形就可以用來驅動蜂鳴器了。比如為 2500Hz 的蜂鳴器的驅動,可以知道周期為 400μs,這樣只需要驅動蜂鳴器的 I/O 口,每 200μs 翻轉一次電平就可以產生一個頻率為2500Hz,占空比為 1/2duty 的方波,再通過三極管放大就可以驅動這個蜂鳴器了。
-
簡易有源蜂鳴器實現功能:每100ms響一下而后停100ms蜂鳴器
-
程序頭文件和引腳宏定義
-
對於main函數,需先調用int wiringPiSetup (void)函數來初始化樹莓派引腳,若該函數返回值為-1則說明初始化失敗
-
引腳配置使用pinMode (int pin, int mode)
Pin:配置的引腳
Mode:指定引腳的IO模式,可取的值:INPUT、OUTPUT、PWM_OUTPUT,GPIO_CLOCK
-
使用void digitalWrite (int pin, int value)
Value:引腳輸出的電平值,可取值:HIGH代表輸出高電平,LOW代表輸出低電平
-
程序編寫完成后,接下來就是編譯問題,若使用c++編寫的代碼則使用第一條語句,若使用c編寫則使用第二條語句
g++ -Wall -o test test.cpp -lwiringPi
//使用C++編程 , -Wall 是為了使能所有警告,以便發現程序中的問題
gcc -Wall -o test test.c -lwiringPi
//使用C語言編程, -lwiringPi是鏈接wiringPi庫, -lpthread是鏈接softPwm
8、 編譯完之后,並將模塊相應引腳接到樹莓派上,執行命令./test,則可以實現程序中相應功能
1 #include <stdio.h> 2 #include <wiringPi.h> 3 4 #define voice_pin 1 //定義蜂鳴器引腳 5 6 int main() 7 { 8 if(wiringPiSetup() == -1) //初始化樹莓派引腳 9 { 10 printf("Error!\n"); 11 return 1; 12 } 13 pinMode(voice_pin, OUTPUT); //配置引腳為輸出模式 14 while(1) 15 { 16 digitalWrite(voice_pin, HIGH); //高電平 17 delay(100); 18 digitalWrite(voice_pin, LOW); //低電平 19 delay(100); 20 } 21 }