风筝
发表于: 2019-8-6 09:36:42 | 显示全部楼层

摩尔斯电码是一种通信系统,用于在两个不同持续时间的信号中编码任何字符,称为点和虚线。摩尔斯电码由Samuel F.B开发。并进一步用于电报传输秘密信息。它在第二次世界大战时最常用。摩尔斯电码可以通过点击、闪烁灯或写入来执行。摩尔斯电码有两种版本,原始和国际摩尔斯电码。在国际摩尔斯电码中,通过删除空格并设计特定长度的短划线来修改原始版本。摩尔斯电码可用于编码字母和数字。它主要用于无线电和海洋通信,也是士兵训练的一部分。


语言一直是摩尔斯电码的障碍,因为很难用其他语言执行变音字符的代码。有一些着名的词被认为是摩尔斯电码的重要特征,如'SOS'。 SOS完整形式是Save Our Souls,创建的通用遇险信号代表危险。


下图显示了从A到Z的字母表的摩尔斯电码。

International-Morse-Code.png


今天在本篇文章中,我们将使用Arduino开发板制作一个摩尔斯电码生成器,它将从串行监视器输入任何字符,并通过蜂鸣器将其转换为摩尔斯电码等效的蜂鸣声。


需要的组件

●    Arduino Uno开发板

●    蜂鸣器

●    面包板

●    跳线


电路原理图

Circuit-Diagram-for-Arduino-based-Morse-code-Generator.png

将蜂鸣器的正极引脚连接到Arudino UNO的第8个引脚,将负极引脚连接到Arduino的地。使用Arduino IDE上传代码并在串行监视器上键入字符以创建声音。还可以使用Arduino添加LCD以显示短划线和圆点。


编程说明

文章末尾给出了Arduino摩尔斯电码生成器的完整代码,这里我们解释了解项目工作的程序。


下面的代码用于接收字符串,然后将其转换为莫尔斯代码。

  1. char stringToMorseCode[] = "";
复制代码

然后定义连接到Arduino的蜂鸣器的引脚和蜂鸣器产生的声音的音高。 然后我们定义点和破折号的长度。

  1. int audio8 = 8;      // output audio on pin 8
  2. int note = 1200;      // music note/pitch

  3. int dotLen = 100;     // length of the morse code 'dot'
  4. int dashLen = dotLen * 3;    // length of the morse code 'dash'
复制代码

void loop()函数中,如果串行数据可用,它将保存到变量indata中。 然后它使用命令inData [index1]逐个读取字符。 命令variable.toUppercase()用于将小写字符更改为大写。 然后它根据每个角色创造声音。

  1. void loop()
  2. {
  3.   char inChar = 0;         
  4.   char inData[100] = "";        // data length of 6 characters
  5.   String variable = "";
  6.   String variable1 = "";
  7.   int index1 = 0;

  8.   if ( Serial.available() > 0 ) {                     
  9.    while (Serial.available() > 0 && index1 < 100)
  10.     {
  11.       delay(100);
  12.       inChar = Serial.read();
  13.       inData[index1] = inChar;
  14.       index1++;
  15.       inData[index1] = '\0';
  16.     }
  17.     variable.toUpperCase();
  18.     for (byte  i = 0 ; i < 100 ; i++) {
  19.       variable.concat(String(inData[i]));  
  20.     }
  21.     delay(20);
复制代码

下面的函数MorseDotMorseDash分别用于创建点和破折号的声音。

  1. void MorseDot()
  2. {
  3.   tone(audio8, note, dotLen); // start playing a tone
  4.   delay(dotLen);              // hold in this position
  5. }

  6. void MorseDash()
  7. {
  8.   tone(audio8, note, dashLen);  // start playing a tone
  9.   delay(dashLen);               // hold in this position
  10. }
复制代码

GetChar函数获取所有字母表的代码。 因此,每当我们键入任何字母表时,都会从此函数中获取相应的莫尔斯电码以创建特定的声音。

  1. void GetChar(char tmpChar)
  2. {
  3.   switch (tmpChar) {
  4.     case 'a':
  5.     MorseDot();
  6.     delay(100);
  7.     MorseDash();
  8.     delay(100);
  9.     break;



  10.     default:
  11.        break;
  12.   }
  13. }
复制代码

现在使用Arduino IDE将代码上传到Arduino,然后在串行监视器中输入任何字符,然后按Enter按钮将字符发送到Arduino。

在这里,我们输入了'SOS'这是一个通用的遇险信号,为它创造声音。

Sending-SOS-to-Arduino-Morse-Code-Generator.png


代码

以下是本篇文章使用的完整代码: main.rar (976 Bytes, 下载次数: 144)

跳转到指定楼层
红楼遗梦
发表于: 2020-1-25 15:41:47 | 显示全部楼层

最长能报送几个单词呀?
回复

使用道具 举报

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

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-7 23:57 , Processed in 0.043971 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

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