电影里常见的摩斯密码,我用Arduino给你加密了一句话
摩斯密码(Morse Code),很多人肯定都听说过它的名字,尤其在电影中更是经常见到摩斯密码的身影。
但是多数人不了解,认为这是一个神圣的领域,难以企及。
其实,摩斯密码远远没有想象中的特别讳莫如深。相反,它是我目前认识的各种编码方式中最简单的一种。
01
Morse Code
编码方式
1837年,美国画家、电报之父塞缪尔·摩斯(Samuel Morse)发明了摩斯密码。
时至今日,对于摩斯密码的发明者仍有争议。还有一种说法是,摩斯密码由美国人艾尔菲德·维尔发明,当时他正在协助塞缪尔·摩斯进行摩尔斯电报机的开发。知乎
摩斯密码是一套用于交流的系统,它依靠一系列的点(dits)和划(dahs)来表示数字和字母,从而传递编码信息。
点表示为 “ · ”,读作「 滴 」,是短促的脉冲信号;
划表示为 “ — ”,读作「 嗒 」,是持续一段时间的长信号。
数字的编码方式很容易记忆,5个 “ — ” 是0,从前面依次加 “ · ” 是1至5,从后面加 “ · ” 是9至5。
字母的编码规律不太容易发现,一眼看上去会觉得很乱。
但是如果用图形化的方式进行编码的话,还是可以发现些许规律。
知道摩斯密码的编码方式后,我们就可以用一系列的点和划来表示相应的字母和数字,从而传递信息。
所以,我们可以在电影、生活、历史中经常看到摩斯密码的身影。
《风声》中,顾晓梦在旗袍上缝的,是用摩斯密码留下的遗书。
北京邮电大学校园内,地砖上的长条和点状图案是以摩斯密码显示的校训:“厚德博学 敬业乐群”。
1912年,泰坦尼克号游轮首航遇险时,在游轮快沉没时才发送新的求救信号,用摩斯密码编写的SOS(· · · / — — — / · · ·,三短三长三短)。
后来,SOS的摩斯密码被远在纽约的一个人识别,并迅速告知全世界,最终使705人获救。
也就是在这之后,SOS被广泛使用。
所以,你可以对照摩斯密码表,用你能够想到的任何方式来传递摩斯密码中的点和划。
比如,敲击桌面的声音;比如,手电筒发出的光亮。
02
Morse Code
用 Arduino 进行编码
知道了摩斯密码的编码方式后,接下来,我要用 Arduino 控制 LED 灯,通过 LED 灯闪烁频率的变化,向你传递一段摩斯密码。
首先,我需要准备一块 Arduino UNO R3主控板,一块面包板,一个 LED 小灯,一个阻值为1K欧姆的色环电阻,以及两根跳线,并对它们进行电路接线。
电路接线图:
电路原理图:
然后,开始编写程序,告诉电路板应该做些什么:
int ledPin = 7; //告诉电路板,LED灯在7号数字口void setup(){pinMode(ledPin, OUTPUT); //设置7号数字口的模式为输出pinMode(LED_BUILTIN, OUTPUT); //设置单片机自带的板载LED为输出模式}
//定义摩斯密码中的点(dits)信号void dits(){//LED灯点亮短暂的0.5秒digitalWrite(ledPin, HIGH);delay(500);digitalWrite(ledPin, LOW);delay(200);}
//定义摩斯密码中的划(dahs)信号void dahs(){//LED灯点亮2秒digitalWrite(ledPin, HIGH);delay(2000);digitalWrite(ledPin, LOW);delay(200);}
//定义字符之间的分隔信号,便于观察void division(){//让单片机自带的板载LED灯进行闪烁for(int x = 0; x < 3; x++){digitalWrite(LED_BUILTIN, HIGH);delay(200);digitalWrite(LED_BUILTIN, LOW);delay(200);}}
void loop(){ //分隔信号闪烁,提示准备传递信号division();
//传递第一个字符dahs();dahs();dits();
//分隔信号闪烁,便于观察division();
//传递第二个字符dits();
//分隔信号闪烁,便于观察division();
//传递第三个字符dahs(); delay(1000);}
接下来,我们就可以一起来破译摩斯密码了:
(Ps:视频有背景音效,请合适调节音量)
至此,一段完整的字符就已经发送完毕。
剩下的,就是记录LED灯的闪烁频率,并对照摩斯密码表进行译码即可。
只要理解了摩斯密码的编码方式后,要解出其中蕴含的字母就显得特别的简单:
第一个字符:两长一短( — — · ),对应字母 G;
第二个字符:一短( · ),对应字母 E;
第三个字符:一长( — ),对应字母 T;
没错,我要给你传递的信息就是一个字符串:GET。
GET 一项新技能,无论你从什么时候开始学习编程,永远不会为时已晚。
因为,
再小的技能,都值得被认真对待。
好了,本次课程内容就这么多。
未完待续。
本文内容为 HOME+ 原创出品
如果对你有所帮助,欢迎在文章底部点击「好看」
另外,我们的第一季课程「玩转 Arduino」正在报名中,点击下方图片,即可报名。
对课程感兴趣的青少年读者,可以把握一下机会。点击文章底部「阅读原文」,了解报名详情。
--end--
声明:本文章由网友投稿作为教育分享用途,如有侵权原作者可通过邮件及时和我们联系删除:freemanzk@qq.com