Funpack第十期Kitronik ARCADE摩斯密码练习器
Funpack第十期Kitronik ARCADE摩斯密码练习器
标签
嵌入式系统
DayDay
更新2021-09-01
790

内容介绍

介绍

本次使用Kitronik ARCADE做了一个摩斯电码练习器。

启动后,屏幕上会产生一个随机字符串,包含四个字母。玩家需要敲击左右键输入摩斯电码,左键代表'.',右键代表'-'。输入的信息会显示在屏幕上,若输入的电码正确,ARCADE会响起声音,否则会震动马达。同时显示正确结果。

 

实现

代码由Python实现。

首先定义了两个数组,分别表示字母表和其对应电码。然后生成随机字符串,显示在屏幕上。最后在循环中检测左右两个按键是否按下,记录按键结果,显示在屏幕上,并判断是否与字符串匹配或者按键错误。

press = ""
str_arr = ""
mySprite = sprites.create(img("""
        . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . . 
            . . . . . . . . . . . . . . . .
    """),
    0)
answerSprite = sprites.create(img("""
            . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
                . . . . . . . . . . . . . . . .
        """),
        0)
inSprite = sprites.create(img("""
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
    . . . . . . . . . . . . . . . .
"""),
                0)
answerSprite.set_position(0, 50)
inSprite.set_position(0, 100)
morse_code_key = ["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"]
morse_code_val = [".-",
    "-...",
    "-.-.",
    "-..",
    ".",
    "..-.",
    "--.",
    "....",
    "..",
    ".---",
    "-.-",
    ".-..",
    "--",
    "-.",
    "---",
    ".--.",
    "--.-",
    ".-.",
    "...",
    "-",
    "..-",
    "...-",
    ".--",
    "-..-",
    "-.--",
    "--.."]
key = [randint(0, 25),
    randint(0, 25),
    randint(0, 25),
    randint(0, 25)]
str_arr = "" + str_arr + morse_code_key[key[0]]
str_arr = "" + str_arr + morse_code_key[key[1]]
str_arr = "" + str_arr + morse_code_key[key[2]]
str_arr = "" + str_arr + morse_code_key[key[3]]
mySprite.say(str_arr)
while True:
    if controller.player1.is_pressed(ControllerButton.LEFT):
        press = "" + press + "."
    elif controller.player1.is_pressed(ControllerButton.RIGHT):
        press = "" + press + "-"
    val = "" + morse_code_val[key[0]] + morse_code_val[key[1]] + morse_code_val[key[2]] + morse_code_val[key[3]]
    inSprite.say(press)
    if press == val:
        music.play_tone(262, BeatFraction.HALF)
        answerSprite.say(val)
    elif len(press) >= len(str(val)):
        pins.pin_by_cfg(101).digital_write(True)
        answerSprite.say(val)
    pause(100)

 

展示

FhE2TPcdQ7a7nk4T8397TKSiS6gb

上图为启动后的界面。

FntqW8PL4-aQrHI5G6CJryZq9rI0

上图为一次输入错误,可看到下方的输入和上方的正确结果。

FsT7JC7PuA1oX-Ae_Y74kRJNXuUL

上图为一次输入正确。

 

心得体会:

这个平台非常适合小朋友入门编程,寓学于乐。

附件下载

source.py

团队介绍

评论

0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号