这篇文章来源于DevicePlus.com英语网站的翻译稿。如果您对秘密信息感兴趣,那么对您来说摩尔斯电码将会是一种有趣的交流方式。然而,摩尔斯电码的特性使其非常适合于通过Arduino来编写和生成消息。在本指南中,我们将向您展示如何创建一种可以将您输入的文本自动转换为可听的摩尔斯电码信息的设备。
摩尔斯电码工作原理
摩尔斯电码发明于19世纪,使用非常简单的长短脉冲序列(通常为电和划)来远距离发送消息。通过将字母表中的字母编码为电和划的组合,信息可以只用一个单一的电子或声音信号来表达。
为了说明这是如何工作的,我们将使用一个简单的蜂鸣器将文本转换为可听的摩尔斯电码信号。通过使用Arduino IDE中的串行监视器,您在计算机上输入的信息可以被转换为摩尔斯电码音调。值得注意的是,只需要进行少量修改,同样的方法就可以用于通过LED传达信息,因为这两种设备都可以被快速打开和关闭。
所需组件
在硬件方面,您不需要太多组件来完成该项目工作。但是,如果您是编码新手,那么您可能会希望能够分块进行该项目。这不是很复杂的代码,但是您需要了解数组 和 switch cases 语句的工作原理。请记住要点,然后进行接下来的工作。
您需要的物理组件如下所示:
Arduino Uno |
|
一个面包板 |
|
Arduino IDE |
|
一个蜂鸣器 |
|
大多数入门电子套件都带有我们上面列出的所有部件,所以如果您有一个套件,请在开始这个项目前查看是否具有这些组件。
接线
这个项目的接线十分简单。本项目中所具有的功能大部分都通过代码来实现,所以我们不用将接线考虑在内。在接线部分,请将蜂鸣器的电源线连接到引脚8,然后将蜂鸣器的地线连接到GND。
这样就完成了!这很简单。现在,让我们继续进行代码部分。
代码
这个项目的代码可能比您以往看到的要长,主要是因为需要对摩尔斯电码脉冲进行编码。不过不要太担心。一旦您把它分解开来,就会发现各部分都是很基础的代码。首先,以下是您可以直接上传到Arduino的完整代码。
- int buzzer = 8; // Assign buzzer to pin 8
- int note = 1000; // Set the pitch for the buzzer tone
- int timeUnit = 100; // This variable will be used to measure dots, dashes, breaks, and pauses
- char input; // Variable to save the input to
- void setup () {
- Serial.begin(9600);//for the connect with the boared
- }
- void loop () {
- if (Serial.available()) {
- input = Serial.read();//read the input
- if (input == ‘a’ || input == ‘A’) {lA();}//if the input is a or A go to function lA
- if (input == ‘b’ || input == ‘B’) {lB();}//same but with b letter
- if (input == ‘c’ || input == ‘C’) {lC();}
- if (input == ‘d’ || input == ‘D’) {lD();}
- if (input == ‘e’ || input == ‘E’) {lE();}
- if (input == ‘f’ || input == ‘F’) {lF();}
- if (input == ‘g’ || input == ‘G’) {lG();}
- if (input == ‘h’ || input == ‘H’) {lH();}
- if (input == ‘i’ || input == ‘I’) {lI();}
- if (input == ‘j’ || input == ‘J’) {lJ();}
- if (input == ‘k’ || input == ‘K’) {lK();}
- if (input == ‘l’ || input == ‘L’) {lL();}
- if (input == ‘m’ || input == ‘M’) {lM();}
- if (input == ‘n’ || input == ‘N’) {lN();}
- if (input == ‘o’ || input == ‘O’) {lO();}
- if (input == ‘p’ || input == ‘P’) {lP();}
- if (input == ‘q’ || input == ‘Q’) {lQ();}
- if (input == ‘r’ || input == ‘R’) {lR();}
- if (input == ‘s’ || input == ‘S’) {lS();}
- if (input == ‘t’ || input == ‘T’) {lT();}
- if (input == ‘u’ || input == ‘U’) {lU();}
- if (input == ‘v’ || input == ‘V’) {lV();}
- if (input == ‘w’ || input == ‘W’) {lW();}
- if (input == ‘x’ || input == ‘X’) {lX();}
- if (input == ‘y’ || input == ‘Y’) {lY();}
- if (input == ‘z’ || input == ‘Z’) {lZ();}
- if (input == ‘ ‘) {wordPause();}
- Serial.println (input);
- }
- }
- //Letter functions
- void lA () {dot();dash();letterPause();}//letter A in morse code!
- void lB () {dash();dot();dot();dot();letterPause();}//same for B
- void lC () {dash();dot();dash();dot();letterPause();}
- void lD () {dash();dot();dot();letterPause();}
- void lE () {dot();letterPause();}
- void lF () {dot();dot();dash();dot();letterPause();}
- void lG () {dash();dash();dot();letterPause();}
- void lH () {dot();dot();dot();dot();letterPause();}
- void lI () {dot();dot();letterPause();}
- void lJ () {dot();dash();dash();dash();letterPause();}
- void lK () {dash();dot();dash();letterPause();}
- void lL () {dot();dash();dot();dot();letterPause();}
- void lM () {dash();dash();letterPause();}
- void lN () {dash();dot();letterPause();}
- void lO () {dash();dash();dash();letterPause();}
- void lP () {dot();dash();dash();dot();letterPause();}
- void lQ () {dash();dash();dot();dash();letterPause();}
- void lR () {dot();dash();dot();letterPause();}
- void lS () {dot();dot();dot();letterPause();}
- void lT () {dash();letterPause();}
- void lU () {dot();dot();dash();letterPause();}
- void lV () {dot();dot();dot();dash();letterPause();}
- void lW () {dot();dash();dash();letterPause();}
- void lX () {dash();dot();dot();dash();letterPause();}
- void lY () {dash();dot();dash();dash();letterPause();}
- void lZ () {dash();dash();dot();dot();letterPause();}
- void dot() //Emit sound for 100 milliseconds
- {
- tone(buzzer, note, timeUnit);
- delay(timeUnit * 2);
- }
- void dash() //Emit sound for 300 milliseconds
- {
- tone(buzzer, note, timeUnit * 3);
- delay(timeUnit * 4);
- }
- void letterPause() //Delay between letters for 300 milliseconds
- {
- delay(timeUnit * 3);
- }
- void wordPause()
- {
- delay (timeUnit * 7);
- }
- int buzzer = 8; // Assign buzzer to pin 8
- int note = 1000; // Set the pitch for the buzzer tone
- int timeUnit = 100; // This variable will be used to measure dots, dashes, breaks, and pauses
- char input; // Variable to save the input to
- void setup () {
- Serial.begin(9600);//for the connect with the boared
- }
在setup()部分,我们还将初始化串行监视器,这样的话您就可以输入要发送到Arduino的信息了。这要求您的项目需要通过USB保持与计算机之间的连接。
- void loop () {
- if (Serial.available()) {
- input = Serial.read();//read the input
- if (input == ‘a’ || input == ‘A’) {lA();}//if the input is a or A go to function lA
- if (input == ‘b’ || input == ‘B’) {lB();}//same but with b letter
- if (input == ‘c’ || input == ‘C’) {lC();}
- if (input == ‘d’ || input == ‘D’) {lD();}
- if (input == ‘e’ || input == ‘E’) {lE();}
- if (input == ‘f’ || input == ‘F’) {lF();}
- if (input == ‘g’ || input == ‘G’) {lG();}
- if (input == ‘h’ || input == ‘H’) {lH();}
- if (input == ‘i’ || input == ‘I’) {lI();}
- if (input == ‘j’ || input == ‘J’) {lJ();}
- if (input == ‘k’ || input == ‘K’) {lK();}
- if (input == ‘l’ || input == ‘L’) {lL();}
- if (input == ‘m’ || input == ‘M’) {lM();}
- if (input == ‘n’ || input == ‘N’) {lN();}
- if (input == ‘o’ || input == ‘O’) {lO();}
- if (input == ‘p’ || input == ‘P’) {lP();}
- if (input == ‘q’ || input == ‘Q’) {lQ();}
- if (input == ‘r’ || input == ‘R’) {lR();}
- if (input == ‘s’ || input == ‘S’) {lS();}
- if (input == ‘t’ || input == ‘T’) {lT();}
- if (input == ‘u’ || input == ‘U’) {lU();}
- if (input == ‘v’ || input == ‘V’) {lV();}
- if (input == ‘w’ || input == ‘W’) {lW();}
- if (input == ‘x’ || input == ‘X’) {lX();}
- if (input == ‘y’ || input == ‘Y’) {lY();}
- if (input == ‘z’ || input == ‘Z’) {lZ();}
- if (input == ‘ ‘) {wordPause();}//the space
- Serial.println (input);//print the latter saved in the input var
- }
- }
- //Letter functions
- void lA () {dot();dash();letterPause();}//letter A in morse code!
- void lB () {dash();dot();dot();dot();letterPause();}//same for B
- void lC () {dash();dot();dash();dot();letterPause();}
- void lD () {dash();dot();dot();letterPause();}
- void lE () {dot();letterPause();}
- void lF () {dot();dot();dash();dot();letterPause();}
- void lG () {dash();dash();dot();letterPause();}
- void lH () {dot();dot();dot();dot();letterPause();}
- void lI () {dot();dot();letterPause();}
- void lJ () {dot();dash();dash();dash();letterPause();}
- void lK () {dash();dot();dash();letterPause();}
- void lL () {dot();dash();dot();dot();letterPause();}
- void lM () {dash();dash();letterPause();}
- void lN () {dash();dot();letterPause();}
- void lO () {dash();dash();dash();letterPause();}
- void lP () {dot();dash();dash();dot();letterPause();}
- void lQ () {dash();dash();dot();dash();letterPause();}
- void lR () {dot();dash();dot();letterPause();}
- void lS () {dot();dot();dot();letterPause();}
- void lT () {dash();letterPause();}
- void lU () {dot();dot();dash();letterPause();}
- void lV () {dot();dot();dot();dash();letterPause();}
- void lW () {dot();dash();dash();letterPause();}
- void lX () {dash();dot();dot();dash();letterPause();}
- void lY () {dash();dot();dash();dash();letterPause();}
- void lZ () {dash();dash();dot();dot();letterPause();}
- void dot() //Emit sound for 100 milliseconds
- {
- tone(buzzer, note, timeUnit);
- delay(timeUnit * 2);
- }
- void dash() //Emit sound for 300 milliseconds
- {
- tone(buzzer, note, timeUnit * 3);
- delay(timeUnit * 4);
- }
- void letterPause() //Delay between letters for 300 milliseconds
- {
- delay(timeUnit * 3);
- }
- void wordPause()
- {
- delay (timeUnit * 7);
- }
我们在dash()命令中做了类似的工作,但这次我们将播放三个时间单位(300毫秒)的声音,然后暂停运行四个时间单位。三个单位让声音完成播放,第四个时间单位用于元素之间的暂停。
我们还将定义letterPause() 和wordPause()函数。前者完全由三个时间单位延迟组成,它用于在消息的每个字母之间设置300毫秒静音,让您可以将不同的字母区分开来。后者是最长的延迟时间,七个时间单位,或者700毫秒。这将在监视器读取到一个空格时运行,表明一个新单词的开始。
当您的草图上传完成并且开始运行Arduino,请在您的IDE的工具部分打开串行监视器。输入一些单词并按下回车键,您应该会听到蜂鸣器发出相应的摩尔斯电码音调。如果您想自己调整草图,可以尝试添加描述数字的函数。
来源:rohm