Funpack10 用Kitronik ARCADE可编程游戏手柄制作摩斯电码练习器——识别字符并输出id
通过图形化编程和python编程,实现用可编程游戏手柄制作一个摩斯密码练习器,选择上下两个按键为点与横,左右两个按键分别为删除点横与删除字符,B键为结束电码输入,长按A键为显示所有字符并复位。 通过敲击按键,识别出按键组合对应的字符。
标签
Python
手柄
摩斯电码
eetree_study
更新2021-08-26
869

      这是我第三次参加fanpack系列活动,本次活动使用Kitronik的ARCADE可编程游戏手柄。活动要求使用该手柄,制作一个摩斯电码练习器。通过敲击按键,识别出按键组合对应的字符,在屏幕上打出自己的id

      我选择上下两个按键依次为点与横,另外安排左右两个按键分别为删除点横与删除字符,将B键为识别电码输入的单个字符,通过长按A键为显示所有字符并复位。 通过敲击按键,识别出按键组合对应的字符。

摩斯电码及硬件介绍

      摩尔斯电码(又译为摩斯电码,Morse code)是一种时通时断的信号代码,这种信号代码通过不同的排列顺序来表达不同的英文字母、数字和标点符号等。它由美国人艾尔菲德·维尔发明,当时他正在协助Samuel Morse进行摩尔斯电报机的发明(1835年)。在今天,国际摩尔斯电码依然被使用着。此在线工具可以在线进行摩斯电码的转换,无需下载和安装,网页版的转换器在网页上直接进行。

     考虑到实际需要和时间关系,在程序中只写入了26个英文字母和下划线"_"对应的摩斯电码。

     

      Kitronik ARCADE是一个功能齐全的可编程游戏手柄,搭配MakeCode Arcade方块编辑器一起使用,培养你的编程技能。

      Kitronik ARCADE是一款专门设计用于运行复古街机游戏的平台 - 来自英国的Kitronik公司专为创客教育市场推出的Kitronik Arcade,搭配微软MakeCode Arcade编辑器一起使用。Kitronik Arcade功能齐全,符合人体工程学设计,舒适易用。具有全彩色 LCD 宽视角屏幕、用于音频反馈的压电发声器、用于触觉反馈的振动电机、6 个游戏玩家输入按钮、一个菜单按钮、一个重置按钮和一个开/关开关。完美游戏体验所需的一切。还具有软件音量控制、一个 USB 编程端口和 2 个为专家级用户提供的扩展端口。

      ARCADE 可以由 3xAA 电池或通过微型 USB 连接器供电,电池座位于 PCB 的背面。三个电池座的位置还可以用作手柄,在游戏时提供最大的舒适度和控制力。

代码片段说明及功能展示

Kitronik ARCADE使用MakeCode Arcade 图形化编辑器进行编辑,同时也可以切换到Javascript或者python编程模式(但仍然需要使用提供的功能块)。

代码在逻辑上主要分为三个部分。

1.开机初始化:

 开机初始化包括设置背景,播放音乐,显示提示,初始化输入,输出。其中,设置背景在场景  块中,播放音乐在音乐块中,显示提示在游戏块中。初始化输入输出则在变量块中,在文本块中选择空白文本(字符串),作为变量的的初始值

FhKMrvEZrnbp6V-cCRuvdux6rzpr

2.摩斯电码输入及处理:

      设置↑代表".",↓代表"-"。在每次按下后,将字符串".""-"与原字符串合并作为新的字符串等待识别或其他处理。设置←为删除最后输入的一个摩斯电码,→为删除最后一个识别出的字母(数字、符号)。这些都通过对字符串的操作来实现。

      在实现了输入电码的基础上,增加了显示已输入电码,和不同输入音效的功能,在每个按键块中拖入音乐块,分别设置合适的音乐,即可完成音效设置;由于普通的提示或显示信息功能每次弹出信息后都需要按A键确认,如果在输入电码上应用则太过繁琐,因此使用了拓展块:text sprite进行显示,这个扩展允许创建“文本精灵”,它只是用文本的视觉外观创建的精灵。通过设置精灵,暂停一段时间,以及销毁,实现提示的自动关闭。需要注意的是,在测试中发现,如果按键输入电码速度过快,可能造成文本精灵反应不过来从而无法销毁,进而出现显示叠加的状态,在使用时需要注意:尽量在电码或字符消失后进行下一个电码,字符的输入。下面是相关的块设计

FgSJhAXoQEZ3oz7Gp6h_4kTxnePFFpL1TztA1voDivsXECPRaMbsDd03FnTE-_QZo-8puSbu-nicTu130v5IFi4lECYM_yKC6vMnMOVSl-qvqAu0

由于相片体积过大无法上传,下面是截图的模拟器效果演示

FvuTSf_05jq1UqDjCIUmG_vRrGMJFqDHc-hfJVhCgRzXgqFCCCUxMLNG

3.识别以及复位 

     在开始的设计中,短按B键显示当前识别字符,长按显示所有字符,但在操作中发现,长按某个键时往往会先识别为单次按下,然后才是长按。为了避免产生误输入或显示,在最终安排按键时,将显示全部字符的功能拆分给了A键,另B键只有识别电码输入的单个字符功能,长按A键时显示所有字符并复位。

     识别摩斯电码的过程由比较字符串构成:将输入的摩斯电码依次同每个字符对应的摩斯电码进行对比,从而确认输入电码对应的字符。在识别完成后,通过拼接字符串的模块,将字符与原输出字符拼接,保存为新的输出字符串, 并从新的字符串中通过裁剪,得到最后识别出的单个字符,并通过textsprite拓展模块自动输出显示1000ms。

     显示字符以及复位的过程相对简单:在A按键块中设置好触发状态,将text sprite块拖入,将显示设置为保存有所有被识别出的字符的字符串,设置好显示时间后销毁,即可完成显示字符功能,在随后拖入复位块,就可以完成复位

 

FktmQM9tGOZ0RvNswuxx5Uzn1YvCFvCdTBsV-2uPkzPj_EKkK3JqFQD0FieBuCxpblBOz2i5cEpH4Ztcesrg

下面是模拟器效果演示

FnmztDh_wTnHIuLzuDIjwCFZEuNfFs0y715Wml9pk1T3k1AiQASqoAAi

下面是实际演示时的照片:

信息提示:

Fh746H398gbPN9XdvWw-sL6x6J1h

打出自己的ID:

FtMqMkB0G1-9mZ-vBdgEt-2vT8IQ由于拍摄原因,可能不是很清晰,这是放大后的ID显示效果

Fh3ZgExIrDZvbYEQ-3CtEkxDqs9g

 

代码详细见:https://makecode.com/_5Rra6J3b1110

心得体会

这是第二次体验图形化编程,上一次是在近一个月前的Funpack9活动中,两次活动使用了不同的功能块方案:Funpack9活动中,sensortile.box主要着眼于对数据的处理传递,因此i功能块通过不同颜色的箭头表征数据流相互连接,而在Funpack10中,Kitronik ARCADE主要需要处理不同触发下的显示,功能块通过相互嵌套表征不同的数据处理方法,数据传递的过程不直接显现。在这次活动进一步体会到图形化编程的优缺点:图形化编程,通过将不同图形代表的功能块相互组合,简单清晰,但随之而来的也有其缺点:编程被限定到有限的范围,同时一些编程逻辑受到限制,例如在本次活动开始,我本打算使用数组存储单个摩斯电码,通过比较数组的方式的进行识别,但编辑器一直报错,在群内同学的建议下,找到了使用字符串的方法,这才得以解决问题。再有就是官方对编辑器的默认设置:我本打算在开机时设置开机动画,但载入后报错903,无奈去除了动画,程序得以正常运行;再有就是官方设置了提示信息必须要按A键确认后才消失,这对设计造成了一定影响,以及前文提到的长按时会先识别为按下,再识别为长按的问题,还有就是震动模块,在预想中,震动模块用于作为提示音出现,但操作中发现,在按键块中嵌套震动模块,无震动论设置多长的震动时间,程序运行时都会持续震动不停,只有在碰撞块中嵌套震动模块, 震动才会正常工作。再有就是相关的官方文档太少

     总的来说,本次活动还是一次可参与性很高,很有意思的活动

附件下载
funpack10 MorseCode.zip
Funpack10 morse code lasted version.py是python版的源代码; arcade-MORSE_CODE.png是在线平台可识别的代码文件,将其拖到平台输入处即可识别 arcade-MORSE_CODE.uf2是手柄使用的运行文件,在连接电脑后存入手柄对应的存储空间即可运行游戏,也可以登录https://makecode.com/_5Rra6J3b1110查看
团队介绍
个人
团队成员
eetree_study
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号