[胖熊笔记]小白程序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 {:soso_e129:}刚试的玩了玩。。。。很好玩。。。。@@忽然想着,莫尔斯做光通信协议还是不错的嘛 摩斯码做数据通讯好像不是很有优势吧,不能完全映射ASCII。 我想除非对数据重新编码为摩斯码字符,得有个调制解调的过程。{:soso_e132:} panda 发表于 2011-12-18 22:44 static/image/common/back.gif
摩斯码做数据通讯好像不是很有优势吧,不能完全映射ASCII。
用8个音去表示就行。。 panda 发表于 2011-12-18 22:44 static/image/common/back.gif
摩斯码做数据通讯好像不是很有优势吧,不能完全映射ASCII。
应该可以的,否则现实生活中拍电报的时候岂不漏字了? :lol
自己用的话,定一套转换协议就行。 CW就是莫尔斯;P http://www.oschina.net/code/snippet_124817_3496
这是我编的莫尔斯编码和解码的网页程序
支持Unicode 只看 了解码,能转过来吗,发可以,但每个人的发报速度不一样,长短也不一致,解码比较麻烦
页:
[1]