在Milkv Duo的LED灯整活——摩尔斯电码

前言

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)  

NEAT-O!
(still not a python fan tho, I needed more chars to post)