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

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

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


摩尔斯电码是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。抗战片上听到的发报声即是这类电码信号。以下程序中通过树莓派控制蜂鸣器的发声与停止来模拟这种信号音。
首先要在树莓派上使用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>

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

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

本文出自 郑晓个人博客,转载时请注明出处及相应链接。

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

发表评论

由于某些原因,您暂时可能接收不到我回复后的邮件通知,抱歉。-- 2017-05-24

如需我主动联系您,可以留言注明。

change vcode