使用Arduino开发板制作摩尔斯电码生成器
摩尔斯电码是一种通信系统,用于在两个不同持续时间的信号中编码任何字符,称为点和虚线。摩尔斯电码由Samuel F.B开发。并进一步用于电报传输秘密信息。它在第二次世界大战时最常用。摩尔斯电码可以通过点击、闪烁灯或写入来执行。摩尔斯电码有两种版本,原始和国际摩尔斯电码。在国际摩尔斯电码中,通过删除空格并设计特定长度的短划线来修改原始版本。摩尔斯电码可用于编码字母和数字。它主要用于无线电和海洋通信,也是士兵训练的一部分。
语言一直是摩尔斯电码的障碍,因为很难用其他语言执行变音字符的代码。有一些著名的词被认为是摩尔斯电码的重要特征,如'SOS'。SOS完整形式是Save Our Souls,创建的通用遇险信号代表危险。
下图显示了从A到Z的字母表的摩尔斯电码。
今天在本篇文章中,我们将使用Arduino开发板制作一个摩尔斯电码生成器,它将从串行监视器输入任何字符,并通过蜂鸣器将其转换为摩尔斯电码等效的蜂鸣声。
需要的组件
● Arduino Uno开发板
● 蜂鸣器
● 面包板
● 跳线
电路原理图
将蜂鸣器的正极引脚连接到Arudino UNO的第8个引脚,将负极引脚连接到Arduino开发板的地。使用Arduino IDE上传代码并在串行监视器上键入字符以创建声音。还可以使用Arduino添加LCD以显示短划线和圆点。
编程说明
文章末尾给出了Arduino摩尔斯电码生成器的完整代码,这里我们解释了解项目工作的程序。
下面的代码用于接收字符串,然后将其转换为莫尔斯代码。
char stringToMorseCode[] = "";然后定义连接到Arduino的蜂鸣器的引脚和蜂鸣器产生的声音的音高。然后我们定义点和破折号的长度。
int audio8 = 8; // output audio on pin 8int note = 1200; // music note/pitchint dotLen = 100; // length of the morse code 'dot'int dashLen = dotLen * 3; // length of the morse code 'dash'
在void loop()函数中,如果串行数据可用,它将保存到变量indata中。然后它使用命令inData [index1]逐个读取字符。命令variable.toUppercase()用于将小写字符更改为大写。然后它根据每个角色创造声音。
void loop(){ char inChar = 0; char inData[100] = ""; // data length of 6 characters String variable = ""; String variable1 = ""; int index1 = 0;if ( Serial.available() > 0 ) { while (Serial.available() > 0 && index1 < 100) { delay(100); inChar = Serial.read(); inData[index1] = inChar; index1++; inData[index1] = ''; } variable.toUpperCase(); for (byte i = 0 ; i < 100 ; i++) { variable.concat(String(inData[i])); } delay(20);
下面的函数MorseDot和MorseDash分别用于创建点和破折号的声音。
void MorseDot(){ tone(audio8, note, dotLen); // start playing a tone delay(dotLen); // hold in this position}void MorseDash(){ tone(audio8, note, dashLen); // start playing a tone delay(dashLen); // hold in this position}
GetChar函数获取所有字母表的代码。因此,每当我们键入任何字母表时,都会从此函数中获取相应的莫尔斯电码以创建特定的声音。
void GetChar(char tmpChar){ switch (tmpChar) { case 'a': MorseDot(); delay(100); MorseDash(); delay(100); break;……… default: break; }}现在使用Arduino IDE将代码上传到Arduino,然后在串口监视器中输入任何字符,然后按Enter按钮将字符发送到Arduino。
在这里,我们输入了'SOS'这是一个通用的遇险信号,为它创造声音。
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com