极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16306|回复: 8

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

[复制链接]
发表于 2011-12-18 20:53:20 | 显示全部楼层 |阅读模式
本帖最后由 panda 于 2011-12-18 22:41 编辑

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

  1.   /*
  2.   Arduino Exp 04
  3.   
  4.   Read input characters from Serial port, and Output Morse code by LED.
  5. */

  6. #define ledPin 12
  7. #define dotDelay 100
  8. #define dashDelay 300

  9. char* asc2morse[] ={
  10.         "S","-*-*--","*-**-*","0","***-**-","0","*-***","*----*","-*--*","-*--*-","0","*-*-*","--**--","-****-","*-*-*-","-**-*",
  11.   "-----","*----","**---","***--","****-","*****","-****","--***","---**","----*","---***","-*-*-*","0","-***-","0",
  12.   "**--**","*--*-*","*-","-***","-*-*","-**","*","**-*","--*","****","**","*---","-*-","*-**","--","-*","---","*--*",
  13.   "--*-","*-*","***","-","**-","***-","*--","-**-","-*--","--**","0","0","0","0","0","0","*-","-***","-*-*","-**","*",
  14.   "**-*","--*","****","**","*---","-*-","*-**","--","-*","---","*--*","--*-","*-*","***","-","**-","***-","*--","-**-","-*--","--**",
  15. };   // ASCII code mapping to Morse code, Start 32,End 122

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

  20. void flashMorseCode(char c) {
  21.         if(c == 'S') {
  22.                 delay(dotDelay*5);
  23.         }else if(c=='*'||c=='-'){
  24.                         digitalWrite(ledPin,HIGH);
  25.                         switch (c) {
  26.                                 case '*':  delay(dotDelay);    // dot
  27.                                         break;
  28.                                 case '-':  delay(dashDelay);   // dash
  29.                                         break;
  30.                         }
  31.                         digitalWrite(ledPin,LOW);
  32.                         delay(dotDelay);
  33.         }
  34. }

  35. void flashSequence(char* seq) {
  36.         int i = 0;
  37.         while ( seq[i]!=NULL) {
  38.                 flashMorseCode(seq[i]);
  39.                 Serial.write(seq[i]);
  40.                 i++;
  41.         }
  42.         delay(dashDelay);
  43.         Serial.write(' ');
  44. }

  45. void loop() {
  46.         char ch;
  47.         if(Serial.available()) {    // if Usb Serial is available
  48.                 ch = Serial.read();   // read char from Serial
  49.                 if(ch>31 && ch<123) {
  50.                         flashSequence(asc2morse[ch-32]);  
  51.                 }
  52.         }
  53. }
复制代码
在原例子上增加了向串口回传摩斯码的语句。



回复

使用道具 举报

发表于 2011-12-18 21:01:59 | 显示全部楼层
{:soso_e129:}刚试的玩了玩。。。。很好玩。。。。@@忽然想着,莫尔斯做光通信协议还是不错的嘛
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-18 22:44:34 | 显示全部楼层
摩斯码做数据通讯好像不是很有优势吧,不能完全映射ASCII。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-18 22:46:03 | 显示全部楼层
我想除非对数据重新编码为摩斯码字符,得有个调制解调的过程。{:soso_e132:}
回复 支持 反对

使用道具 举报

发表于 2011-12-18 23:23:37 | 显示全部楼层
panda 发表于 2011-12-18 22:44
摩斯码做数据通讯好像不是很有优势吧,不能完全映射ASCII。

用8个音去表示就行。。
回复 支持 反对

使用道具 举报

发表于 2011-12-19 08:59:40 | 显示全部楼层
panda 发表于 2011-12-18 22:44
摩斯码做数据通讯好像不是很有优势吧,不能完全映射ASCII。

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

自己用的话,定一套转换协议就行。
回复 支持 反对

使用道具 举报

发表于 2012-9-19 23:22:48 | 显示全部楼层
CW就是莫尔斯
回复 支持 反对

使用道具 举报

发表于 2012-10-4 23:27:05 | 显示全部楼层
http://www.oschina.net/code/snippet_124817_3496
这是我编的莫尔斯编码和解码的网页程序
支持Unicode
回复 支持 反对

使用道具 举报

发表于 2014-5-27 06:56:05 | 显示全部楼层
只看 了解码,能转过来吗,发可以,但每个人的发报速度不一样,长短也不一致,解码比较麻烦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-14 05:35 , Processed in 0.056914 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表