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

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

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


摩尔斯电码是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。抗战片上听到的发报声即是这类电码信号。以下程序中通过树莓派控制蜂鸣器的发声与停止来模拟这种信号音。 首先要在树莓派上使用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 <stdio.h> #include <wiringPi.h></p> <p>int main(void) { //初始化 wiringPiSetup(); int pin = 8, t = 70; //设置针脚为输出状态 pinMode(pin, OUTPUT); //定义摩尔斯电码示例 从A到H char <em>morse_code = "01 1000 1010 100 0 0010 110 0000"; char </em>p=morse_code; while(<em>p!='\0') { switch(</em>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<em>3); digitalWrite(pin, HIGH); delay(t); };break; //字符间隔 中断3t秒 case ' ': { delay(t</em>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