基于树莓派Pico嵌入式系统学习平台制作一个反应测试器
2023年寒假在家一起练的平台之一,购买板卡即可参加活动,并附赠15节MicroPython编程课程的学习。 开发项目随机点亮板上的一个LED,按下板上的一个按键,在显示屏上显示出从灯亮到按键之间的时间。
标签
嵌入式系统
2023寒假在家练
mini城
更新2023-03-29
794

1. 项目描述

随机点亮板上的一个LED,按下板上的一个按键,在显示屏上显示出从灯亮到按键之间的时间。

 

2. 项目介绍

制作一个反应测试器利用树莓派Pico开发板上的led、olde、按钮来实现监测人的反应时长。通过软件产生随机数,程序启动以后在随机数控制的时间下点亮板上的LED,被测试者按下按键以后,处理器计算从点亮灯到接收到按键之间的时间差,并将时间差在OLED上显示。

 

3. 设计思路

需要用到的库machine、random、time、ws2812b。
首先用ws2812b库实现led点亮,之后用random库求导<1 ≤ x ≤ 12>的随机正整数,利用得到的随机数点亮对应led灯,使用time库中的sleep函数控制led亮灯时间,亮灯之后用time库的ticks_ms函数求得开始时间,当按下按钮时再求得结束时间并灭灯,求出结束时间和开始时间的差,就是实际的反应时间了。

 

4. 框图和软件流程图

Fl5_GgZAWwNGsDHb-p9PGmPLG4xX


 

5. 简单的硬件介绍

  • 1个128*64像素 OLED显示屏
  • 12个WS2812B RGB三色灯
  • 4个单色LED(Y、R、G、B)
  • 2个按键输入
  • 1个姿态传感器
  • 1个蜂鸣器
  • 1个可调电位计
  • 1路音频信号输入(mic)
  • 8位R-2R电阻网络构成的DAC

 

6. 实现的功能及图片展示

开机后随机点亮板上一个LED,在灯灭后开始计时,当按下板上的<k1>按键后,在oled上会显示出从灯灭到按键之间所用的时间。在休眠5秒后循环测试。当按下<k2>按键,循环False,再次按键将True

FoEJKVTW8a7x814mIC8f1RER4QAU


 

7. 主要代码片段及说明

def time_start():               
    global start
    start = time.ticks_ms() #计时


def button_k1(pin):         #按钮k1
    global start                 #全局变量
    led_off()                      #按k1,led灭灯
    top_state()                  #顶部状态栏
    oled.fill_rect(0, 10, 128, 64, 0)#清理除顶部状态栏以外的区域
    oled.text('Reaction Time',0,12)
    oled.text('was:%d ms'%(time.ticks_ms()-start),0,24)#结束计时,同时计算时间差写入缓存
    print('reaction time was:%d ms'%(time.ticks_ms()-start))#时间差打印在pc终端
    oled.show()                 #将缓存内容显示在oled屏


def led_on():                  #led开合函数
    global number
    wb.on(number)
def led_off():                  #led闭合函数
    global number
    wb.off(number)

k1 = button(pin_cfg.k1,button_k1,trigger=Pin.IRQ_FALLING)
k2 = button(pin_cfg.k2,button_k2,trigger=Pin.IRQ_FALLING)
start = 0
system = True                                     #控制开关
number = random.randint(1,13)         #随机<1-12>整数


def main():                                                 #主函数
    while True:                                             #循环主程序
        while system:                                     #变量控制循环
            screen()                                          #oled显示
            time.sleep(random.uniform(1,3))   #取随机浮点数控制睡眠时间
            led_on()                                          #led亮灯
            time_start()                                     #led亮灯后开始计时
            time.sleep(5)                                   #睡眠时间

 

8. 遇到的主要难题及解决方法  

  1. 题目被我曲解为亮灯到按按钮中间的时间差,观看老师视频后发现问题解决问题。
  2. top状态栏一直留给实时时间显示,但是没有实现实时更新,解决的办法就是使用多线程<_thread> or <threading>处理同步问题。
  3. 对类的继承运用很差,无法用更简洁的代码实现目的,非常头疼。只能多看多练。

 


9. 未来的计划或建议

  • 对于python中类、函数的应用还不是很熟悉,需要更多积累和训练,希望可以掌握更便捷的方式编写代码。
  • 关于反应测试应用,可以添加一个排行榜,增加趣味性
  • 可以添加一个loding,好看的图片或者动图
  • 开机可以添加一个启动声音,增强互动性
  • led灯可以根据音乐声音设计闪烁状态增强互动性

 

 

软硬件
元器件
电路图
附件下载
project.7z
团队介绍
没有团队,个人对嵌入式开发感兴趣
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号