当前位置:博客首页>>树莓派 >> 阅读正文

树莓派上控制蜂鸣器模拟摩尔斯电码(电报效果)

作者: 郑晓 分类: 树莓派 发布于: 2017-03-13 12:50 浏览:7,437 没有评论


摩尔斯电码是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。抗战片上听到的发报声即是这类电码信号。以下程序中通过树莓派控制蜂鸣器的发声与停止来模拟这种信号音。
首先要在树莓派上使用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代码来实现控制针脚的电平状态,我的蜂鸣器是低电平发声,所以这里是控制I/O针脚为LOW时为发声,为HIGH时不发声。摩尔斯电码短音(滴)记作0,长音(嗒)记作1,使用空格区分间隔,电码的时间规则:滴(1t)、嗒(3t)、间隔(1t)、字符间隔(3t)、单词间隔(7t)。以下代码只是模拟了摩尔斯电码从A到H。

#include
#include

int main(void) {
//初始化
wiringPiSetup();
int pin = 8, t = 70;
//设置针脚为输出状态
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;
}

最后保存文件并编译执行。

#gcc -Wall test.c -lwiringPi
#./a.out

运行后蜂鸣器会发出类似电报的滴滴嗒的声音,非常逼真,哈哈~~

       

本文采用知识共享署名-非商业性使用 3.0 中国大陆许可协议进行许可,转载时请注明出处及相应链接。

本文永久链接: https://www.zh30.com/raspberry-morse-code-beep.html

发表评论

change vcode