用 CoCube 制作摩尔斯电码机

在电话和互联网出现以前,人们会用摩尔斯电码传递消息。它只使用两种信号:短信号“点”和长信号“划”。不同的点划组合可以表示不同的字母。

在这个案例中,我们将把 CoCube 变成一台摩尔斯电码机:短按 A 键输入点,长按 A 键输入划。完成一个字母后稍等一会儿,CoCube 就会显示对应的字母。

在线程序:在 MicroBlocks 中打开程序

程序文件:Morse_code.ubp

1. 效果演示

视频中依次输入了 C、U、B、E,组成单词 CUBE。

2. 认识摩尔斯电码

摩尔斯电码使用两种基本信号:

  • 点 .:较短的信号。
  • 划 -:较长的信号。

例如,字母 A 是 .-,字母 B 是 -...,字母 C 是 -.-.。

字母 电码 字母 电码 字母 电码
A .- J .--- S ...
B -... K -.- T -
C -.-. L .-.. U ..-
D -.. M -- V ...-
E . N -. W .--
F ..-. O --- X -..-
G --. P .--. Y -.--
H .... Q --.- Z --..
I .. R .-.

你可以通过下面的图片快速记忆各个字母和数字的摩尔斯电码。

摩尔斯电码记忆图

CoCube 通过按键时间区分点和划:

操作 含义
按键时间不超过 200 毫秒 点
按键时间超过 200 毫秒 划
松开按键并等待 1000 毫秒 一个字母输入完成

3. 编写程序

程序由三个脚本组成:准备电码表、读取按键,以及显示识别结果。

3.1 准备电码表

创建三个变量:

  • buff:保存当前输入的点和划。
  • codes:保存 A 到 Z 的摩尔斯电码。
  • letters:保存 A 到 Z 的字母。

准备摩尔斯电码表

codes 和 letters 中的内容按顺序一一对应。例如,.- 是 codes 的第 1 项,A 也是 letters 的第 1 项。

3.2 输入点和划

按下 A 键后,程序重置计时器并发出声音;松开按键后,再根据按键时间判断输入内容:

  • 不超过 200 毫秒:在 buff 后面添加点 .。
  • 超过 200 毫秒:在 buff 后面添加划 -。

输入点和划

最后再次重置计时器,用来计算松开按键后的等待时间。

3.3 查找并显示字母

松开按键超过 1000 毫秒,并且 buff 不是空的,说明一个字母已经输入完成。

程序先查找 buff 在 codes 中的位置。找到后,从 letters 中取出相同位置的字母;如果没有找到,就显示 ?。最后清空 buff,准备输入下一个字母。

识别并显示字母

例如,-.-. 在 codes 中排第 3,因此程序会显示 letters 中的第 3 个字母 C。

4. 测试程序

可以先测试几个简单的字母:

字母 输入方式
E 短按
T 长按
A 短按、长按
N 长按、短按
U 短按、短按、长按

如果短按不容易成功,可以尝试把点和划的分界时间从 200 毫秒改成 250 或 300 毫秒。

5. 编程挑战:加入数字

现在的程序只能识别 A 到 Z。你能参考下面的电码表,让 CoCube 也能识别数字 0 到 9 吗?

数字 摩尔斯电码 数字 摩尔斯电码
0 ----- 5 .....
1 .---- 6 -....
2 ..--- 7 --...
3 ...-- 8 ---..
4 ....- 9 ----.
CC-BY-SA

© 来自 CoCube 2024-2026.

This work is licensed under a CC-BY-SA 4.0 license.