樹莓派上控制蜂鳴器模擬摩爾斯電碼(電報效果)
作者: 鄭曉 分類: 樹莓派 發(fā)布于: 2017-03-13 12:50 瀏覽:7,703 沒有評論
摩爾斯電碼是一種時通時斷的信號代碼,通過不同的排列順序來表達不同的英文字母、數(shù)字和標(biāo)點符號??箲?zhàn)片上聽到的發(fā)報聲即是這類電碼信號。以下程序中通過樹莓派控制蜂鳴器的發(fā)聲與停止來模擬這種信號音。
首先要在樹莓派上使用git下載編譯安裝wiringPi庫
#git clone git://git.drogon.net/wiringPi
#cd wiringPi
#./build
測試wiringPi是否安裝成功
#gpio -v //顯示版本號等信息
#gpio readall //顯示樹莓派gpio圖
把有源蜂鳴器接入樹莓派的gpio口,其中vcc接3.3或5v電源針腳,GND接地針腳,I/O接其中一個I/O針腳,我這里接的是wpi第8號針腳,也就是物理針腳第3針。具體可參考gpio readall中的說明。
編譯C代碼來實現(xiàn)控制針腳的電平狀態(tài),我的蜂鳴器是低電平發(fā)聲,所以這里是控制I/O針腳為LOW時為發(fā)聲,為HIGH時不發(fā)聲。摩爾斯電碼短音(滴)記作0,長音(嗒)記作1,使用空格區(qū)分間隔,電碼的時間規(guī)則:滴(1t)、嗒(3t)、間隔(1t)、字符間隔(3t)、單詞間隔(7t)。以下代碼只是模擬了摩爾斯電碼從A到H。
#include
#include
int main(void) {
//初始化
wiringPiSetup();
int pin = 8, t = 70;
//設(shè)置針腳為輸出狀態(tài)
pinMode(pin, OUTPUT);
//定義摩爾斯電碼示例 從A到H
char *morse_code = "01 1000 1010 100 0 0010 110 0000";
char *p=morse_code;
while(*p!='\0') {
switch(*p) {
//滴 響t秒 停t秒
case '0' : {
digitalWrite(pin,LOW);
delay(t);
digitalWrite(pin, HIGH);
delay(t);
};break;
//嗒 響3t秒 停t秒
case '1': {
digitalWrite(pin, LOW);
delay(t*3);
digitalWrite(pin, HIGH);
delay(t);
};break;
//字符間隔 中斷3t秒
case ' ': {
delay(t*2);
};break;
}
p++;
}
//digitalWrite(pin, HIGH);
return 0;
}
最后保存文件并編譯執(zhí)行。
#gcc -Wall test.c -lwiringPi
#./a.out
運行后蜂鳴器會發(fā)出類似電報的滴滴嗒的聲音,非常逼真,哈哈~~
本文采用知識共享署名-非商業(yè)性使用 3.0 中國大陸許可協(xié)議進行許可,轉(zhuǎn)載時請注明出處及相應(yīng)鏈接。
本文永久鏈接: http://yjfs.org.cn/raspberry-morse-code-beep.html