莫尔斯电码是一种通信系统,可以在两个不同的信号持续时间(称为“ 点” 和“ 虚线”)中 对任何字符进行编码。莫尔斯电码由塞缪尔FB开发,并进一步用于电报中以传输秘密信息。在第二次世界大战时使用最多。莫尔斯电码可以通过点击,闪烁或书写来执行。摩尔斯电码有两个版本,原始和国际摩尔斯电码。在国际莫尔斯电码中,通过删除空格并设计特定长度的破折号来修改原始版本。摩尔斯电码可用于编码字母和数字。它主要用于无线电和海洋通信,也是士兵训练的一部分。
该语言一直是摩尔斯电码的障碍,因为很难用其他语言来执行变音符号的代码。一些著名的单词被认为是摩尔斯电码的重要特征,例如'SOS'。SOS的完整格式是“拯救我们的灵魂”,它是一种通用的求救信号,代表危险。
下图显示了从A到Z的字母的摩尔斯电码。
今天,在本教程中,我们将使用Arduino构建一个摩尔斯电码转换器,它将任何字符作为来自串行监视器的输入,并通过蜂鸣器将其转换为摩尔斯电码等效的蜂鸣声。
所需组件
- Arduino Uno
- 蜂鸣器
- 面包板
- 跳线
电路原理图
将蜂鸣器的正极引脚连接到Arudino UNO的第8引脚,并将负极引脚连接到Arduino的地。使用Arduino IDE上载代码,并在串行监视器上键入字符以创建声音。也可以在Arduino上添加LCD以显示破折号和点。
编程说明
最后给出了Arduino Morse代码生成器的完整代码,这里我们在解释该程序以了解项目的工作。
以下代码用于接收字符串,然后将其转换为莫尔斯电码。
char stringToMorseCode =“”;
然后定义连接到Arduino的蜂鸣器的引脚以及蜂鸣器产生的声音的音高。然后我们定义点和破折号的长度。
int audio8 = 8; //在引脚8上输出音频 int note = 1200; //音乐注释/音高 int dotLen = 100; //莫尔斯电码的长度' dot'int dashLen = dotLen * 3; //摩尔斯电码“破折号”的长度
在 void loop() 函数中,如果有串行数据可用,它将保存到变量 indata中 。然后,它使用 inData 命令一一读取字符。命令 variable.toUppercase() 用于将小写字母更改为大写字母。然后根据每个角色创建声音。
void loop() { char inChar = 0; char inData =“”; //数据长度为6个字符 String变量=“”; 字符串变量1 =“”; int index1 = 0; if(Serial.available()> 0){ while(Serial.available()> 0 && index1 <100) { delay(100); inChar = Serial.read(); inData = inChar; index1 ++; inData ='\ 0'; } variable.toUpperCase(); for(字节i = 0; i <100; i ++){ variable.concat(String(inData)); } delay(20);
下面的函数 MorseDot 和 MorseDash 用于分别为点和破折号创建声音。
void MorseDot() { tone(audio8,note,dotLen); //开始播放音调 延迟(dotLen); //保持在这个位置 } void MorseDash() { tone(audio8,note,dashLen); //开始播放音调 延迟(dashLen); //保持在该位置 }
该 getchar函数 功能对所有的字母代码。因此,无论何时键入任何字母,都会从该功能中获取各自的摩尔斯电码以创建特定的声音。
无效GetChar(字符tmpChar) { 开关(tmpChar){ 情况'a': MorseDot(); 延迟(100); MorseDash(); 延迟(100); 打破; …... …... …... 默认: 打破; } }
现在,使用Arduino IDE将代码上传到Arduino,并在串行监视器中键入任何字符,然后按Enter键将字符发送到Arduino。
在这里,我们键入了“ SOS”,这是一个通用的求救信号,以产生相同的声音。
下面的视频中给出了相同的演示。