用 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 | ----. |