使用Arduino制作摩尔斯电码收发器

摩尔斯电码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。在今天,国际摩尔斯电码依然被使用着。比如,摩尔斯电码最广为人知的用法发送求救信号SOS,SOS信号的组合方式为:

。再比如,假设我们通过摩尔斯电码发送“Arduino”,组合方式为:“.- .-. -.. ..- .. -. —”。
如何使用Arduino制作摩尔斯电码收发器
电路部分
Arduino到面包板的引脚说明:


- 引脚D2连接到按钮1的一端,再通过电阻接地,按钮1另一端接5V。
- 引脚D7连接到按钮2的一端,再通过电阻接地,按钮2另一端接5V。
- 引脚D8通过电阻连接到LED正极,负极接地。
- 引脚D12通过电阻与蜂鸣器正极连接,负极接地。
代码部分
文末是完整的代码,将其保存为MorseCode.ino,然后打开Arduino IDE “File->Open->MorseCode.ino”,上传到Arduino。上传完成后,打开串口监视器,你将看到如下的显示内容:

摩尔斯码译码器的操作顺序:首先通过点击按钮1和按钮2来写摩尔斯码;字母之间的空格,可在上面的输入框中填2,然后按回车键。单词之间的空格,在上面的输入框中填3,然后按回车键。所有输入完成后,在上面的输入框中填1,然后按回车键,将会翻译摩尔斯码的内容。翻译后的莫尔斯电码将显示在串口监视器的下面。例如:我们来写“.- .-. -.. ..- .. -. —”,翻译后将显示为“ARDUINO”。

这样,使用Arduino制作的摩尔斯码收发器就算完成了。
完整Arduino代码如下:
/*
This Program is for demonstration of MORSE CODE Communication
which was use to send information secretly using codes of combinations dots . and dashes -
Thanks to open source community */ #define SIZE 26
const int ledPin = 8;
const int speakerPin = 12;
const int dotButton = 2;
const int dashButton = 7; String morseCode = "";
String text = "";
int characterAscii = 0;
int startPos = 0, endPos = 0;
int startPos1 = 0, endPos1 = 0;
String characterCode = "";
int dashButtonState = 0;
int dotButtonState = 0; //Array of MorseCode for letters of English Language A to Z
String letters[SIZE] = { // A to I
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..",
// J to R
".---", "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.",
// S to Z
"...", "-", "..-", "...-", ".--", "-..-", "-.--", "--.."
}; void setup() {
// put your setup code here, to run once:
//Getting things Ready
pinMode(ledPin, OUTPUT);
pinMode(dotButton, INPUT);
pinMode(dashButton, INPUT);
Serial.begin(9600); Serial.println("*************************************************************");
Serial.println(" Demonstration of Morse Code ");
Serial.println("************************************************************* ");
Serial.println("\nInstructions");
Serial.println("1. First Write Your Morse code");
Serial.println("2. When you are done Write 1 on above input box and Press Enter or click Send Button ");
Serial.println("3. For Space between letters write 2 and Press Enter ");
Serial.println("4. For Space between words write 3 and Press Enter "); Serial.println("5. Thats all Translation of Morse Code will then be Shown "); Serial.println("\n\nEnter Your Morse Code Here ");
} void loop() {
// put your main code here, to run repeatedly: while (Serial.available() > 0) {
int ascii = Serial.read(); switch (ascii) {
case 49: // 49 is Ascii value of 1 Serial.print("\n");
morseCode.concat('#'); // Placeing # at the end of morseCode to simplify further processing Serial.print("\nYour Morse code Translation : "); endPos1 = morseCode.indexOf('#'); while (endPos1 < morseCode.length()) {
extractLetters(morseCode.substring(startPos1, endPos1)); // This function would extract Letter as name suggest and would convert code to text SIMPLE!
startPos1 = endPos1 + 1;
if (startPos1 == morseCode.length()) {
break;
}
endPos1 = morseCode.indexOf('#', startPos1);
}
startPos1 = 0;
endPos1 = 0; text = ""; // For New Translation
morseCode = "";
Serial.println("\n\nEnter Your Morse Code Here "); break; case 50: // 50 is Ascii value of 2 morseCode.concat("@");
Serial.print("@");
delay(200); break; case 51: // 51 is Ascii value of 3 morseCode.concat("#");
Serial.print("#");
delay(200); break;
}
} process();
} void turnONLedSpeaker(int du) {
//Turn ON LED
digitalWrite(ledPin, HIGH);
tone(speakerPin, 4699, du); // tone(speakerPin, frequency, duration in milliSec)
} void process() { dotButtonState = digitalRead(dotButton);
dashButtonState = digitalRead(dashButton); if (dashButtonState == HIGH) {
turnONLedSpeaker(400); morseCode.concat("-"); // Storing code in variable morseCode with the help of concatenation function
Serial.print("-"); //Prints User entered Code
delay(200);
} else if (dotButtonState == HIGH) {
turnONLedSpeaker(300); morseCode.concat(".");
Serial.print(".");
delay(200); } else {
//Turn OFF LED
digitalWrite(ledPin, LOW);
}
} char convertIntoText(String characterCode) {
characterAscii = 65; for (int index = 0; index < SIZE; index++) {
if (characterCode == letters[index]) {
return characterAscii;
}
characterAscii++;
}
} void extractLetters(String words) {
words.concat('@'); // Placeing @ at the end of word to simplify further processing endPos = words.indexOf('@'); //Loop to extracting single character morse Code from string of word
while (endPos < words.length()) {
characterCode = words.substring(startPos, endPos); //Now CharacterCode will now convert in text text.concat(convertIntoText(characterCode)); startPos = endPos + 1;
characterCode = ""; // if condition is just to terminate loop when our extracting single character code is complete thats all
if (startPos == words.length()) {
break;
} endPos = words.indexOf('@', startPos);
} Serial.print(text);
Serial.print(" ");
startPos = 0;
endPos = 0;
text = "";
}
使用Arduino制作摩尔斯电码收发器的更多相关文章
- 摩尔斯电码(Morse Code)Csharp实现
摩尔斯电码,在早期的"生产斗争"生活中,扮演了很重要的角色,作为一种信息编码标准,摩尔斯电码拥有其他编码方案无法超越的长久生命.摩尔斯电码在海事通讯中被作为国际标准一直使用到199 ...
- 算法提高 9-3摩尔斯电码 map
算法提高 9-3摩尔斯电码 时间限制:1.0s 内存限制:256.0MB 问题描述 摩尔斯电码破译.类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文.请不要使用"z ...
- 算法笔记_085:蓝桥杯练习 9-3摩尔斯电码(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 摩尔斯电码破译.类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文.请不要使用"zylib.h",只能使用 ...
- Java实现 蓝桥杯 算法提高 摩尔斯电码
算法提高 9-3摩尔斯电码 时间限制:1.0s 内存限制:256.0MB 提交此题 问题描述 摩尔斯电码破译.类似于乔林教材第213页的例6.5,要求输入摩尔斯码,返回英文.请不要使用"zy ...
- 蓝桥杯 算法提高 9-3摩尔斯电码 _c++ Map容器用法
//****|*|*-**|*-**|--- #include <iostream> #include <map> #include <vector> #inclu ...
- [CTF]摩斯电码
摩尔斯电码 -----------转载 https://morse.supfree.net/ 摩尔斯电码定义了包括:英文字母A-Z(无大小写区分)十进制数字0-9,以及"?"&qu ...
- [Swift]LeetCode804. 唯一摩尔斯密码词 | Unique Morse Code Words
International Morse Code defines a standard encoding where each letter is mapped to a series of dots ...
- 力扣(LeetCode)804. 唯一摩尔斯密码词
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-", "b" 对应 &q ...
- python实现的摩斯电码解码\编码器
代码地址如下:http://www.demodashi.com/demo/14743.html 详细说明: 现在这年头谍战片.警匪片动不动就用摩斯密码来传递信息,一方面可以用来耍帅,另外一方面好像不插 ...
- Leetcode804.Unique Morse Code Words唯一摩尔斯密码词
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-", "b" 对应 &q ...
随机推荐
- RDD练习:词频统计
一.词频统计: 1.读文本文件生成RDD lines lines=sc.textFile("file:///home/hadoop/word.txt") #读取本地文件 lines ...
- Flutter状态管理新的实践
1 背景介绍 1.1 声明式ui 声明式UI其实并不是近几年的新技术,但是近几年声明式UI框架非常的火热.单说移动端,跨平台方案有:RN.Flutter.iOS原生有:SwiftUI.android原 ...
- 如何优化数据warehouse的搜索和查询
目录 1. 引言 2. 技术原理及概念 2.1 基本概念解释 2.2 技术原理介绍 2.2.1 查询优化 2.2.2 索引优化 2.2.3 数据访问优化 2.3 相关技术比较 2.3.1 SQL 2. ...
- 聊聊 RocketMQ 主从复制
提到主从复制,我们可能立马会联想到 MySQL 的主从复制. MySQL 主从复制是 MySQL 高可用机制之一,数据可以从数据库服务器主节点复制到一个或多个从节点. 这篇文章,我们聊聊 Rocket ...
- C++面试八股文:什么是空指针/野指针/悬垂指针?
某日二师兄参加XXX科技公司的C++工程师开发岗位第30面: 面试官:什么是空指针? 二师兄:一般我们将等于0/NULL/nullptr的指针称为空指针.空指针不能被解引用,但是可以对空指针取地址. ...
- 变分自编码器(VAE)公式推导
论文原文:Auto-Encoding Variational Bayes [OpenReview (ICLR 2014) | arXiv] 本文记录了我在学习 VAE 过程中的一些公式推导和思考.如果 ...
- PostgreSQL 12 文档: 部分 VII. 内部
部分 VII. 内部 这一部分包含PostgreSQL开发者可能用到的各类信息. 目录 50. PostgreSQL内部概述 50.1. 一个查询的路径 50.2. 连接如何建立 50.3. 分析器阶 ...
- SQL ERVER 表转化为C#实体(SQL 代码)
本文推出SqlServer表转化为实体的sql代码 在VS中有可以自带生成实体类的快捷操作,但是生成的代码比较杂乱,很多东西都是不需要的,一个一个去敲又很浪费时间,关键太无聊了 在闲暇之余写一份代码供 ...
- 2022蓝桥杯B组(java)版
2022蓝桥杯b组 A题 import java.math.BigInteger; public class A { public static void main(String[] args) { ...
- 基于GPT搭建私有知识库聊天机器人(六)仿chatGPT打字机效果
文章链接: 基于GPT搭建私有知识库聊天机器人(一)实现原理 基于GPT搭建私有知识库聊天机器人(二)环境安装 基于GPT搭建私有知识库聊天机器人(三)向量数据训练 基于GPT搭建私有知识库聊天机器人 ...