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

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

#git clone git://git.drogon.net/wiringPi
#cd wiringPi
#./build

测试wiringPi是否安装成功

#gpio -v //显示版本号等信息
#gpio readall //显示树莓派gpio图

把有源蜂鸣器接入树莓派的QQ批发平台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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值