Funpack10:Kitronik ARCADE实现一个摩斯密码练习器
Funpack10:Kitronik ARCADE,任务二实现
标签
嵌入式系统
Kitronik ARCADE
摩斯密码
wakojosin
更新2021-08-26
606
  • 介绍用本板卡最终实现了什么功能
      用板卡实现了题目2中的功能:
      1.两种输入方式:a.左键为嘀,右键为嗒;b.下键为嘀嗒二合一,小于180ms为嘀否则为嗒。上键为确认键,B键为清除键,菜单键为功能切换。
      2.摩斯密码输入显示功能;
      3.摩斯密码练习功能,此功能屏幕会出现3~5个随机字符,输入正确蜂鸣器会播放正确音,输入错误蜂鸣器会播放错误音并电机振动;
      以上两个功能通过菜单键进行切换,屏幕有随机字符的时候为练习模式,屏幕没有随机字符的时候为输入显示模式。
  • 各功能对应的主要代码片段及说明
      依赖的扩展arcade-text、timer、controller。
      1.输入部分:
     下键的处理代码,用于实现二合一功能:
def on_down_pressed():
    global key_pressed_time
    key_pressed_time = game.runtime()
def on_down_released():
    global key_timeout, key_value_list, key_pressed_time
    key_timeout = game.runtime() - key_pressed_time
    if key_timeout >= 180:
        key_value_list = "" + key_value_list + "-"
    else:
        key_value_list = "" + key_value_list + "."
    if len(key_value_list) > 10:
        key_value_list = key_value_list.substr(-10, 10)
        # key_value_list = key_value_list.slice(-10)
    key_pressed_time = 0

      左右键的功能实现

def on_left_pressed():
    global key_value_list
    key_value_list = "" + key_value_list + "."
    if len(key_value_list) > 10:
        key_value_list = key_value_list.substr(-10, 10)
        # key_value_list = key_value_list.slice(-10)
def on_right_pressed():
    global key_value_list
    key_value_list = "" + key_value_list + "-"
    if len(key_value_list) > 10:
        key_value_list = key_value_list.substr(-10, 10)
        # key_value_list = key_value_list.slice(-10)

      上键,通过查找表实现转码:

def on_up_pressed():
    global string, key_value_list
    # transform charactor from morse code.
    for k in morse_key_table:
        if k == key_value_list:
            string = "" + string + morse_value_table[morse_key_table.index(k)]
            if len(string) > 10:
                string = string.substr(-10, 10)
                # string = string.slice(-10)
            break
    if game_mode != 0:
        do_compare()
    key_value_list = ""

      练习模式匹配代码:

def do_compare():
    global string, target_string
    if len(string) >= len(target_string):
        if string == target_string:
            music.ba_ding.play()
            string = ""
            target_string = ""
            for index in range(randint(3, 5)):
                target_string = "" + target_string + morse_value_table[randint(0, len(morse_value_table))]
        else:
            pins.A1.digital_write(True)
            music.sonar.play()
            # controller.vibrate(500)
            # error input
            string = ""
    elif target_string.substr(0, len(string)) != string:
        pins.A1.digital_write(True)
        music.sonar.play()
        # controller.vibrate(500)
        # error input
        string = ""
    
    def on_after():
        pins.A1.digital_write(False)
    timer.after(100, on_after)
  • 功能展示

        显示功能:

     如下图,输入 ".-",然后按上键,就能得到字符"A"

FjdfenJ0cDaBmz8RFgHMXuS8n-VNFmT4gJxSltxuay2Hg5sSHOtS9yet

      练习模式:

      按菜单键后屏幕会出现随机字符,如下图:

FtRg_gxe8AjLEJl2znvuJ7058QYo

      当输入不正确的字符时,字符会被清空,然后播放错误音及电机振动,当输入正确时会播放正确音,随机字符串会被更新:

FvaQCmNLekuIDVFPRw5TIcigmVDf

FpZ46dF7hIU01mZGUq7zbCWvDGOm

      打出自己的ID:

FuYzLBpYe-GsJYt7i4jmt_RMtMfp

  • 对本活动的心得体会(包括意见或建议)
      本次活动主要使用了python及图形化编程,python的语法支持应该是精简过的,有些语法不支持,扩展里的东西不能随便引用,可能造成未知的问题(暂时不知道什么原因)。关于硬件方面,我手里的设备用电池供电无法点亮屏幕,具体原因没有去排查,群里的朋友也遇到过各种硬件相关的问题,还是希望提高一下品控。最后感谢举办方提供的这次活动。
附件下载
funpack10.py
实现的代码,依赖arcade-text、timer、controller
团队介绍
个人团队
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号