基于STEP Pico制作了反应测试器
基于STEP Pico制作了一个反应测试器,在随机时间后,随机一个LED灯亮起,此时摁下按钮即可测出反应时间
标签
嵌入式系统
2023寒假在家练
代码编程
反应测试
最期之诗
更新2023-03-30
北京理工大学
543

一、项目描述

总体概括:制作一个反应测试器

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

实现方式:通过软件产生随机数,程序启动以后在随机数控制的时间下随即点亮板上的一个LED灯。被测试者按下按键之后,处理器将处理从点亮灯到按下按键之间的时间差,并将时间差间隔显示在OLED屏上以及PC上。

设计思路:想要完成这个项目需要有以下几点条件:

1.懂得随机数如何生成,也就是掌握随机数函数,以此可用在随机时间后点亮LED灯以及随机点亮任意一个LED灯这两个地方。

2.懂得如何点亮LED灯,也就是掌握开关LED灯的函数

3.在灯亮之时以及按下按钮之时,让处理器进行反应,测量时间差,也就是掌握时间方面的函数,顺便说一下,我选择的按钮是k1按钮

4.让时间差反映在OLED屏以及PC屏上,也就是掌握输出函数以及OLED屏的显示函数

懂得以上这些函数,想要实现反应测试器的功能便轻而易举,由点到面即可。

框图:

IMG_256

代码框图

流程图:

IMG_257

 

二、软件介绍

本次开发使用的软件是thonny,thonny是硬禾平台官方推荐的开发软件,页面简洁、使用方便,和STEP Pico板子搭配起来非常舒服,安装完即可上手,开始对于板子指令的编写。

三、硬件介绍

本次开发使用硬件为STEP Pico。STEP Pico是一款低成本,高性能的微控制器开发板,具有灵活数字接口,同时其还搭载了Raspberry Pi官方自主研发的RP2040微控制器芯片,与ARM Cortex M0+双核处理器,具有高达133MHz的运行频率。其专为嵌入式系统学习而设计,可以通过C/C++以及MicroPython的编程来学习嵌入式系统的工作原理和应用,小巧方便,功能多样。

三、实现功能及图片展示

实现的功能为测试反应速度

图片展示:

IMG_258IMG_259IMG_260

四、主要代码及代码介绍

import ws2812b

from oled import oled

from button import button

from board import pin_cfg

from machine import Pin

import random

import time

def print_result(msg):

print(msg)

oled.text(msg,0,0)

oled.show()




timer_start = 0

def k1_callback(Pin):

global timer_start

y.off()

r.off()

g.off()

b.off()

timer_reaction = time.ticks_ms() - timer_start

print_result(str(timer_reaction) + "ms")




k1 = button(pin_cfg.k1, k1_callback, trigger=Pin.IRQ_FALLING)

while True:

oled.fill(0)

r = Pin(pin_cfg.red_led, Pin.OUT)

y = Pin(pin_cfg.yellow_led, Pin.OUT)

g = Pin(pin_cfg.green_led, Pin.OUT)

b = Pin(pin_cfg.blue_led, Pin.OUT)

time.sleep(random.uniform(1,10))

light_led = random.uniform(0,4)

if light_led > 0 and light_led < 1:

y.on()

if light_led >= 1 and light_led < 2:

r.on()

if light_led >= 2 and light_led < 3:

g.on()

if light_led >= 3 and light_led < 4:

b.on()

timer_start = time.ticks_ms()

time.sleep(15)
import ws2812b  

from oled import oled

from button import button

from board import pin_cfg

from machine import Pin

import random

import time

 

以上都是库,不做太多赘述

 

def print_result(msg):   #显示函数

    print(msg)           #在PC上显示时间差

    oled.text(msg,0,0)   #编辑OLED屏上的文本,这里是时间差

    oled.show()          #OLED屏显示

 

上面这部分都是显示函数,用来进行时间差在PC屏幕上以及OLED屏幕上的显示

timer_start = 0

 

对起始时间变量进行初定义,无太多作用

def k1_callback(Pin):  #k1按钮反馈函数

    global timer_start    #全局变量,联系起始时间变量

    y.off()               #将LED灯关闭

    r.off()

    g.off()

    b.off()

    timer_reaction = time.ticks_ms() - timer_start      #再次对时间进行测量并计算时间差

    print_result(str(timer_reaction) + "ms")      #显示函数的运用

以上函数中还运用了time.ticks_ms()函数,这个函数能对当前时间进行测量,单位是毫秒级别,也就是说只要进行初始时间的测量与按下按钮这一刻时间的测量,便能通过差值得出你的反应速度

 

k1 = button(pin_cfg.k1, k1_callback, trigger=Pin.IRQ_FALLING)

 

对k1按下按钮的定义:运行k1按钮反馈函数,触发时刻为下降沿,也就是按下按钮的这一刻,不是松开按钮的那一刻。

 

while True:

    oled.fill(0)     #使得再次显示时间差时屏幕会重置

    r = Pin(pin_cfg.red_led, Pin.OUT)         #定义LED红灯开关函数

    y = Pin(pin_cfg.yellow_led, Pin.OUT)      #定义LED黄灯开关函数

    g = Pin(pin_cfg.green_led, Pin.OUT)       #定义LED绿灯开关函数

    b = Pin(pin_cfg.blue_led, Pin.OUT)        #定义LED蓝灯开关函数

    time.sleep(random.uniform(1,10))          #随机时间后点亮LED灯,范围在1到10秒之间

    light_led = random.uniform(0,4)           #定义随机点亮LED灯变量,范围在0到4之间

    if light_led > 0 and light_led < 1:       #0到1区间黄灯亮

        y.on()

    if light_led >= 1 and light_led < 2:      #1到2区间红灯亮

        r.on()

    if light_led >= 2 and light_led < 3:       #2到3区间绿灯亮

        g.on()

    if light_led >= 3 and light_led < 4:       #3到4区间蓝灯亮

        b.on()

    timer_start = time.ticks_ms()              #对点亮LED灯时的时间进行测量并赋给起始时间变量,为后面计算时间差做准备

    time.sleep(15)               #每15秒循环一次

 

主函数区域,设定了何时亮灯,随机亮灯,为测量时间差做准备并设定了循环测试,另外用了random.uniform(i,j)的随机数函数,随机生成的数会在i与j之间,概率均匀分布

 

五、遇到的主要难题及解决办法

首先遇到的难题是如何搭建平台,如何对Pico板进行编程,这个难题在我看了硬禾平台的第一节直播课便迎刃而解,知道了thonny这个好用的编程软件,在下载安装完成后,摁住Pico板上的boot键并将USB接入PC即可完成平台搭建与对Pico板的识别,开始编程。

其次是如何了解完成项目所需的函数,获取进行项目所需思路。函数在进入到MicroPython的专用库介绍网页中即可了解,听硬禾平台的直播课与15节Micropython配套课程也可以进一步了解;思路的话在项目介绍中有所提示,直播课的老师也讲的面面俱到,我的担心很快消散。

最后就是在编程过程中的编译错误了,这个没办法,只能细心检查了,thonny软件在下面sheel中也有提示错误出在哪一行。我出现的错误有:

if结构没加:;

没把一些代码加入到if结构中,得在前面有四格空格;

库没添加。

六、未来的计划与建议

我计划在未来也多多学习硬禾平台的各种硬件练习项目,增长自己的经验,提高自己的能力与见识,多多上手一些额外技能。对于硬禾平台本身没有太多建议,各方面做得都很好,完成项目还能免除费用,鼓励学生去动手,是一个非常优秀的平台,感谢硬禾平台,让我多了一个寒假的难忘经历。

附件下载
程序代码.zip
团队介绍
北京理工大学,是一所历史悠久的双一流大学,受到众多理工科学生的喜爱
团队成员
张文远
北京理工大学学生
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号