panda 发表于 2011-12-18 20:53:20

[胖熊笔记]小白程序3,串口输入字符转换摩斯码输出

本帖最后由 panda 于 2011-12-18 22:41 编辑

      今天看书,有个例子是从电脑输入字符,转换为摩斯码,再从led输出的。但书上的例子只有a~z,A~Z,0~9,其他符号没有,所以在网上查了一下摩斯码的电码,然后改了一下程序。
/*
Arduino Exp 04

Read input characters from Serial port, and Output Morse code by LED.
*/

#define ledPin 12
#define dotDelay 100
#define dashDelay 300

char* asc2morse[] ={
        "S","-*-*--","*-**-*","0","***-**-","0","*-***","*----*","-*--*","-*--*-","0","*-*-*","--**--","-****-","*-*-*-","-**-*",
"-----","*----","**---","***--","****-","*****","-****","--***","---**","----*","---***","-*-*-*","0","-***-","0",
"**--**","*--*-*","*-","-***","-*-*","-**","*","**-*","--*","****","**","*---","-*-","*-**","--","-*","---","*--*",
"--*-","*-*","***","-","**-","***-","*--","-**-","-*--","--**","0","0","0","0","0","0","*-","-***","-*-*","-**","*",
"**-*","--*","****","**","*---","-*-","*-**","--","-*","---","*--*","--*-","*-*","***","-","**-","***-","*--","-**-","-*--","--**",
};   // ASCII code mapping to Morse code, Start 32,End 122

void setup() {
pinMode(ledPin,OUTPUT);// setting LED to
Serial.begin(9600);
}

void flashMorseCode(char c) {
        if(c == 'S') {
                delay(dotDelay*5);
        }else if(c=='*'||c=='-'){
                        digitalWrite(ledPin,HIGH);
                        switch (c) {
                                case '*':delay(dotDelay);    // dot
                                        break;
                                case '-':delay(dashDelay);   // dash
                                        break;
                        }
                        digitalWrite(ledPin,LOW);
                        delay(dotDelay);
        }
}

void flashSequence(char* seq) {
        int i = 0;
        while ( seq!=NULL) {
                flashMorseCode(seq);
                Serial.write(seq);
                i++;
        }
        delay(dashDelay);
      Serial.write(' ');
}

void loop() {
        char ch;
        if(Serial.available()) {    // if Usb Serial is available
                ch = Serial.read();   // read char from Serial
                if(ch>31 && ch<123) {
                        flashSequence(asc2morse);
                }
        }
}
在原例子上增加了向串口回传摩斯码的语句。



http://player.youku.com/player.php/sid/XMzMzNzg3ODEy/v.swf

弘毅 发表于 2011-12-18 21:01:59

{:soso_e129:}刚试的玩了玩。。。。很好玩。。。。@@忽然想着,莫尔斯做光通信协议还是不错的嘛

panda 发表于 2011-12-18 22:44:34

摩斯码做数据通讯好像不是很有优势吧,不能完全映射ASCII。

panda 发表于 2011-12-18 22:46:03

我想除非对数据重新编码为摩斯码字符,得有个调制解调的过程。{:soso_e132:}

Ansifa 发表于 2011-12-18 23:23:37

panda 发表于 2011-12-18 22:44 static/image/common/back.gif
摩斯码做数据通讯好像不是很有优势吧,不能完全映射ASCII。

用8个音去表示就行。。

ardyPro 发表于 2011-12-19 08:59:40

panda 发表于 2011-12-18 22:44 static/image/common/back.gif
摩斯码做数据通讯好像不是很有优势吧,不能完全映射ASCII。

应该可以的,否则现实生活中拍电报的时候岂不漏字了? :lol

自己用的话,定一套转换协议就行。

太行摄狼 发表于 2012-9-19 23:22:48

CW就是莫尔斯;P

test01 发表于 2012-10-4 23:27:05

http://www.oschina.net/code/snippet_124817_3496
这是我编的莫尔斯编码和解码的网页程序
支持Unicode

太行摄狼 发表于 2014-5-27 06:56:05

只看 了解码,能转过来吗,发可以,但每个人的发报速度不一样,长短也不一致,解码比较麻烦
页: [1]
查看完整版本: [胖熊笔记]小白程序3,串口输入字符转换摩斯码输出