|
以编码的方式进行通信,除了迷人之外,在各个领域中具有许多应用。最常见的编码通信方法之一是摩尔斯电码。在本篇文章中,您将学习如何使用Arduino开发板制作一台翻译器来发送和接收摩尔斯电码。
什么是摩尔斯电码? 在过去,通信并不像今天那么简单,最常见的通信方式之一是塞缪尔莫尔斯(Samuel Morse)方法,称为“摩尔斯电码”。在此方法中,每个字母或数字通过使用短(点)和长(破折号)元素表示。
与其他语言一样,摩尔斯电码有自己的字母表,目前有美国和国际两种类型,最常用的是国际类型。
摩尔斯电码可以以不同的方式传输:最初是沿电报线的电脉冲,也可以是音频音、无线电信号、灯光、肢体语言、频率等。想象一下点作为时间单位,然后短划线是三个时间单位,一个字母的部分之间的距离是一个时间单位,两个连续字母之间的距离是三个单位的时间,以及单词之间的距离是七个单位的时间。
例如,SOS这个词,请求帮助的全球标准是...... - 摩尔斯电码。
莫尔斯电码仍然实用吗? 虽然莫尔斯代码不再像过去那样使用,但它仍然有自己的应用程序。摩尔斯电码仍然受到业余无线电领域爱好者的欢迎。摩尔斯电码也用于航空导航系统。许多船只使用莫尔斯电码发送灯光进行通信或帮助。此外,那些因任何原因无法说话的人也可以使用莫尔斯电码来表达其含义。
除此之外,学习和使用莫尔斯电码进行交流可以带来乐趣。
所需的材料 ● Arduino UNO R3开发板 ● 有源蜂鸣器 ● LED指示灯 ● 跳线 ● Arduino IDE
使用Arduino制作摩尔斯电码编码器 记住莫尔斯代码并将文本转换为此代码可能有点困难,所以让我们让编码器将文本转换为莫尔斯代码!
在这里,我们使用Arduino UNO将文本翻译为摩尔斯电码。在Arduino开发板上上传此代码并打开串口监视器窗口。键入您想要的单词或文本,并使用莫尔斯电码的方式接收,然后您可以将其以光和声音的形式发送。
电路
代码 - /*
- Morse code - Transmitter
- modified on 14 Apr 2019
- by Saeed Hosseini @ Electropeak
- https://electropeak.com/learn
- */
- const int led = 13;
- const int buz = 8;
- String code = "";
- int len = 0;
- char ch;
- char new_char;
- int unit_delay = 250;
- void dot()
- {
- Serial.print(".");
- digitalWrite(led, HIGH);
- digitalWrite(buz, HIGH);
- delay(unit_delay);
- digitalWrite(led, LOW);
- digitalWrite(buz, LOW);
- delay(unit_delay);
- }
- void dash()
- {
- Serial.print("-");
- digitalWrite(led, HIGH);
- digitalWrite(buz, HIGH);
- delay(unit_delay * 3);
- digitalWrite(led, LOW);
- digitalWrite(buz, LOW);
- delay(unit_delay);
- }
- void A()
- {
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void B()
- {
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void C()
- {
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void D()
- {
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void E()
- {
- dot();
- delay(unit_delay);
- }
- void f()
- {
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void G()
- {
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void H()
- {
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void I()
- {
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void J()
- {
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void K()
- {
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void L()
- {
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void M()
- {
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void N()
- {
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void O()
- {
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void P()
- {
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dot();
- }
- void Q()
- {
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void R()
- {
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void S()
- {
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void T()
- {
- dash();
- delay(unit_delay);
- }
- void U()
- {
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void V()
- {
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void W()
- {
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void X()
- {
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void Y()
- {
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void Z()
- {
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void one()
- {
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void two()
- {
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void three()
- {
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void four()
- {
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void five()
- {
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void six()
- {
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void seven()
- {
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void eight()
- {
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void nine()
- {
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dot();
- delay(unit_delay);
- }
- void zero()
- {
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- dash();
- delay(unit_delay);
- }
- void morse()
- {
- if (ch == 'A' || ch == 'a')
- {
- A();
- Serial.print(" ");
- }
- else if (ch == 'B' || ch == 'b')
- {
- B();
- Serial.print(" ");
- }
- else if (ch == 'C' || ch == 'c')
- {
- C();
- Serial.print(" ");
- }
- else if (ch == 'D' || ch == 'd')
- {
- D();
- Serial.print(" ");
- }
- else if (ch == 'E' || ch == 'e')
- {
- E();
- Serial.print(" ");
- }
- else if (ch == 'f' || ch == 'f')
- {
- f();
- Serial.print(" ");
- }
- else if (ch == 'G' || ch == 'g')
- {
- G();
- Serial.print(" ");
- }
- else if (ch == 'H' || ch == 'h')
- {
- H();
- Serial.print(" ");
- }
- else if (ch == 'I' || ch == 'i')
- {
- I();
- Serial.print(" ");
- }
- else if (ch == 'J' || ch == 'j')
- {
- J();
- Serial.print(" ");
- }
- else if (ch == 'K' || ch == 'k')
- {
- K();
- Serial.print(" ");
- }
- else if (ch == 'L' || ch == 'l')
- {
- L();
- Serial.print(" ");
- }
- else if (ch == 'M' || ch == 'm')
- {
- M();
- Serial.print(" ");
- }
- else if (ch == 'N' || ch == 'n')
- {
- N();
- Serial.print(" ");
- }
- else if (ch == 'O' || ch == 'o')
- {
- O();
- Serial.print(" ");
- }
- else if (ch == 'P' || ch == 'p')
- {
- P();
- Serial.print(" ");
- }
- else if (ch == 'Q' || ch == 'q')
- {
- Q();
- Serial.print(" ");
- }
- else if (ch == 'R' || ch == 'r')
- {
- R();
- Serial.print(" ");
- }
- else if (ch == 'S' || ch == 's')
- {
- S();
- Serial.print(" ");
- }
- else if (ch == 'T' || ch == 't')
- {
- T();
- Serial.print(" ");
- }
- else if (ch == 'U' || ch == 'u')
- {
- U();
- Serial.print(" ");
- }
- else if (ch == 'V' || ch == 'v')
- {
- V();
- Serial.print(" ");
- }
- else if (ch == 'W' || ch == 'w')
- {
- W();
- Serial.print(" ");
- }
- else if (ch == 'X' || ch == 'x')
- {
- X();
- Serial.print(" ");
- }
- else if (ch == 'Y' || ch == 'y')
- {
- Y();
- Serial.print(" ");
- }
- else if (ch == 'Z' || ch == 'z')
- {
- Z();
- Serial.print(" ");
- }
- else if (ch == '0')
- {
- zero();
- Serial.print(" ");
- }
- else if (ch == '1')
- {
- one();
- Serial.print(" ");
- }
- else if (ch == '2')
- {
- two();
- Serial.print(" ");
- }
- else if (ch == '3')
- {
- three();
- Serial.print(" ");
- }
- else if (ch == '4')
- {
- four();
- Serial.print(" ");
- }
- else if (ch == '5')
- {
- five();
- Serial.print(" ");
- }
- else if (ch == '6')
- {
- six();
- Serial.print(" ");
- }
- else if (ch == '7')
- {
- seven();
- Serial.print(" ");
- }
- else if (ch == '8')
- {
- eight();
- Serial.print(" ");
- }
- else if (ch == '9')
- {
- nine();
- Serial.print(" ");
- }
- else if(ch == ' ')
- {
- delay(unit_delay*7);
- Serial.print("/ ");
- }
- else
- Serial.println("Unknown symbol!");
- }
- void String2Morse()
- {
- len = code.length();
- for (int i = 0; i < len; i++)
- {
- ch = code.charAt(i);
- morse();
- }
- }
- void setup() {
- Serial.begin(9600);
- pinMode(led, OUTPUT);
- pinMode(buz, OUTPUT);
- Serial.println("I am ready...");
- }
- void loop() {
- while (Serial.available())
- {
- code = Serial.readString();
- Serial.print(code);
- Serial.print(" = ");
- String2Morse();
- Serial.println("");
- }
- delay(1000);
- }
复制代码
使用Arduino制作摩尔斯电码解码器 在另一种情况下,您是莫尔斯电码的收件人,您必须将收到的代码转换为文本。 要模拟这一点,请使用密钥将摩尔斯电码发送到Arduino,并在串口监视器中将看到文本形式的结果。 电路
代码 - /*
- Morse code - Receiver
- modified on 14 Apr 2019
- by Saeed Hosseini @ Electropeak
- https://electropeak.com/learn
- */
- String code = "";
- int len = 0;
- char ch;
- char new_char;
- const int but = 2;
- const int led = 13;
- unsigned long pres_len = 0, rel_time, pres_time = 0, old_time_len = 0, old_pres = 0, space = 0;
- int state = 0;
- int unit_delay = 250;
- int min_delay = 10;
- char MakeString()
- {
- if (pres_len < (unit_delay*3) && pres_len > 50)
- {
- return '.'; //if button press less than 0.6sec, it is a dot
- }
- else if (pres_len > (unit_delay*3))
- {
- return '-'; //if button press more than 0.6sec, it is a dash
- }
- }
- void Morse_decod()
- {
- static String morse[] = {".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....",
- "..", ".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-",
- ".-.", "...", "-", "..-", "...-", ".--", "-..-", "-.--", "--..", "!"
- };
- int i = 0;
- while (morse[i] != "!")
- {
- if (morse[i] == code)
- {
- Serial.print(char('A' + i));
- Serial.print(" ");
- break;
- }
- i++;
- }
- if (morse[i] == "!")
- {
- Serial.println("");
- Serial.println("This code is not exist!");
- }
- code = "";
- }
- void setup() {
- Serial.begin(9600);
- pinMode(but, INPUT_PULLUP);
- pinMode(led, OUTPUT);
- }
- void loop() {
- label:
- while (digitalRead(but) == HIGH) {}
- old_pres = rel_time;
- pres_time = millis();
- digitalWrite(led, HIGH);
- while (digitalRead(but) == LOW) {}
- rel_time = millis();
- digitalWrite(led, LOW);
- pres_len = rel_time - pres_time;
- space = pres_time - old_pres;
- if (pres_len > min_delay)
- {
- code += MakeString();
- }
- while ((millis() - rel_time) < (unit_delay * 3))
- {
- if (digitalRead(but) == LOW)
- {
- goto label;
- }
- }
- Morse_decod();
- }
复制代码
以上就是本篇文章的全部内容。如有问题,请随时在本帖下面进行回复。 |