最近有一段时间了解了一下摩尔斯电码,感觉十分的好玩,可是想要发电报还得考无线电证书,然后还要买各种设备,想了一想还是算了,为这玩意花太多心思不太实际。
可是我却找到了一个好网站,它可以通过摩尔斯电码在那上面交流,网址是:http://morsecode.me/?room=5。不过我的技术太菜了,发个电报太费劲,看着各位大佬在那里发着电报,那速度简直了,我心中便有了一个想法:实力不行,那就自己写个程序帮我实现吧。结果没多久就搞好了,不愧是PYTHON。先放一个效果图
本身制作并不算难,很简单。你们可以先尝试制作,我先分析
要想制作自动摩尔斯电码,首先得要了解莫尔斯电码发报的规则
这是摩尔斯电码对照表
每一个字符都有一个与之对应的摩尔斯电码。在摩尔斯电码中,有三种状态,一种是点,一种是横,还有一种是停顿。一般点读作“滴”;横读作“答”。‘答’其实就是时间持续更长的‘滴’罢了。
从上面这段内容可以看出,**“答“的长度是随着”滴"的长度变化的,”答“的长度为3个”滴“的长度;而‘答’和‘滴’之间,也有一个‘滴’的长度的间隙;而字母和字母之间也有3个‘滴’的间隙,字词之间有5个‘滴’的长度的间隙。**如果还不是很清除的话,可以去百度
有了摩尔斯电码的基础之后,制作就清晰了,无非就是控制鼠标左键点击按钮的时间长短
我采用的是pynput
这个库,可以通过pip install pynput
来进行安装。这个库是用来控制鼠标点击和移动的
详细使用教程看这个链接:https://blog.csdn.net/weixin_34107955/article/details/93658661?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-3&spm=1001.2101.3001.4242
清楚了pynput和摩尔斯电码的使用之后,我们就可以开始制作了
制作流程:
- 设置一个滴持续的时间 (base_speed)
- 设置摩尔斯码对照的字典,我是这样设置的
这里的1代表的是“滴”,这里的2代表的是“答”,建立对应关系。而如果碰到了空格,说明是字词与字词之间,应该单独提出来,单独处理 - 读取想要发送的信息
- 将鼠标移动到按钮所在的位置 mouse.position = (x, y),不清楚可以把鼠标放到按钮的位置,然后再通过mouse.position来读取位置,就知道了
- 遍历想要发送的信息,读取每一个字符
- 把拿到的每个字符放到字典里匹配,拿到对应的莫尔斯码
- 再遍历拿到的莫尔斯码,判断是否不为F(如果是F说明是空格,需要单独处理)
- 如果不为F,则按下鼠标
mouse.press(Button.left)
,再判断拿到的是1还是2。如果是1,那么就是‘滴’,持续一个 base_speed 的时间;如果是2,那么就是‘答’,持续三个 base_speed 的时间。最后松开鼠标mouse.release(Button.left)
- 如果为F,那么就是空格,是词与词之间,空七个base_speed的时间(不知道为什么,本人设置五个base_speed的时间不行,不识别, 无奈设置成了7个)
- 如果不为F,则按下鼠标
- 每得到一个莫尔斯码,最后就得要空一个base_speed的时间;每得到一个字母,就得空三个base_speed的时间,如果你还不知道为什么要这样做,就再去看看莫尔斯电码的规则
思路就是如此,大家可以先自己尝试着做一下我就先放出源码
from pynput.mouse import Button, Controller
import time
mouse = Controller()
words = {
" ": "F", "A": "12", "B": "2111", "C": "2121", "D": "211", "E": "1", "F": "1121", "G": "221", "H": "1111", "I": "11", "J": "1222", "K": "212", "L": "1211",