前言
milkv duo自带的LED灯不止可以做呼吸状态灯,还可以用来玩摩尔斯电码
摩尔斯电码
首先写一下摩尔斯电码表,参考 摩尔斯电码表 (morsetranslate.com)
MORSE_CODE = {
'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.',
'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---',
'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---',
'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-',
'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--',
'Z': '--..', '0': '-----', '1': '.----', '2': '..---', '3': '...--',
'4': '....-', '5': '.....', '6': '-....', '7': '--...', '8': '---..',
'9': '----.', '.': '.-.-.-', ',': '--..--', '?': '..--..',
"'": '.----.', '!': '-.-.--', '/': '-..-.', '(': '-.--.',
')': '-.--.-', '&': '.-...', ':': '---...', ';': '-.-.-.',
'=': '-...-', '+': '.-.-.', '-': '-....-', '_': '..--.-',
'"': '.-..-.', '$': '...-..-', '@': '.--.-.', ' ': '/'
}
接下来使用pinpong库控制LED灯
pinpong库(目前还不支持256M版本,可以使用脚本方法控制)的安装参考这个文章:
Milkv Duo 安装 pinpong 库,Python 点亮蓝色 LED 灯,适合自己编译 包含Python 3.9的镜像 - Duo - MilkV Community
初始化pinpong和LED灯
from pinpong.board import Board, Pin
Board("MILKV-DUO").begin()
led = Pin(Pin.D25, Pin.OUT)
led.value(0)
输出
[root@milkv-duo]~# python cvn.py
milkv-duo
__________________________________________
| ____ _ ____ |
| / __ \(_)___ / __ \____ ____ ____ _ |
| / /_/ / / __ \/ /_/ / __ \/ __ \/ __ `/ |
| / ____/ / / / / ____/ /_/ / / / / /_/ / |
|/_/ /_/_/ /_/_/ \____/_/ /_/\__, / |
| v0.5.2 Designed by DFRobot /____/ |
|__________________________________________|
完整代码
import time
from pinpong.board import Board, Pin
# 摩尔斯电码字典
MORSE_CODE = {
'A': '.-', 'B': '-...', 'C': '-.-.', 'D': '-..', 'E': '.',
'F': '..-.', 'G': '--.', 'H': '....', 'I': '..', 'J': '.---',
'K': '-.-', 'L': '.-..', 'M': '--', 'N': '-.', 'O': '---',
'P': '.--.', 'Q': '--.-', 'R': '.-.', 'S': '...', 'T': '-',
'U': '..-', 'V': '...-', 'W': '.--', 'X': '-..-', 'Y': '-.--',
'Z': '--..', '0': '-----', '1': '.----', '2': '..---', '3': '...--',
'4': '....-', '5': '.....', '6': '-....', '7': '--...', '8': '---..',
'9': '----.', '.': '.-.-.-', ',': '--..--', '?': '..--..',
"'": '.----.', '!': '-.-.--', '/': '-..-.', '(': '-.--.',
')': '-.--.-', '&': '.-...', ':': '---...', ';': '-.-.-.',
'=': '-...-', '+': '.-.-.', '-': '-....-', '_': '..--.-',
'"': '.-..-.', '$': '...-..-', '@': '.--.-.', ' ': '/'
}
# LED控制函数
def blink_morse(code):
for char in code:
if char == '/': # 延时标记
time.sleep(1)
else:
if char == '.':
led.value(1)
time.sleep(0.5)
led.value(0)
elif char == '-':
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(0.25) # 字符间短暂延时
Board("MILKV-DUO").begin()
led = Pin(Pin.D25, Pin.OUT)
led.value(0)
try:
while True:
text = input("请输入文本: ")
# 转换摩尔斯电码
morse_text = ' '.join(''.join(MORSE_CODE.get(char, char) for char in text.upper()).split())
print("摩尔斯电码:", morse_text)
blink_morse(morse_text)
input("按下回车键继续...")
except KeyboardInterrupt:
print("\n程序已退出。")
finally:
led.value(0)