from microbit import *
from ssd1306 import initialize, clear_oled
from ssd1306_stamp import draw_stamp
from ssd1306_img import create_stamp
from ssd1306_text import add_text
import utime as time
window = []
threshold = 550 # limit
count = 0
sample = 0
beat = False
start = False
good = create_stamp(Image.HAPPY)
bad = create_stamp(Image.SAD)
heart = create_stamp(Image.HEART)
values = []
def mean(datalist):
sum = 0
for i in datalist:
sum += i
if len(datalist) > 0:
return sum/len(datalist)
else:
return None
while True:
if button_a.was_pressed():
while True:
signal = pin1.read_analog()
window.append(signal)
avg = round(mean(window))
values.append(avg)
if len(window) == 11:
window.pop(0)
if beat is False and avg >= threshold+10:
beat = True
count += 1
display.show(Image.HEART, wait=False)
if count == 1:
t1 = time.ticks_ms()
if count == 11:
t2 = time.ticks_ms()
T = t2 - t1
bpm = round(600*1000/(T))
display.scroll(str(bpm))
initialize()
clear_oled()
add_text(0, 0, "Heart rate :")
add_text(0, 3, str(bpm) + " bpm")
if 60 <= bpm <= 100:
draw_stamp(38, 24, good, 1)
else :
draw_stamp(38, 24, bad, 1)
count = 0
sleep(2000)
if button_b.was_pressed():
break
count = 0
elif beat is True and avg <= threshold-10:
beat = False
display.clear()
sample += 1
if sample == 250:
threshold = mean(values)
values = []
sample = 0
sleep(20)
sleep(20) 这是连接到微位的代码,它的功能是关于心率传感器,当感知心脏的10次跳动时,它将出现每分钟的平均跳动。
我正在考虑添加一个函数,如果按下按钮b,循环将暂停,然后按a按钮重新启动。我尝试在循环中添加一个中断函数,当我单击b按钮时,它工作了,它暂停了循环,但是,拍子的计数不会重置,虽然我中断了循环,但节拍之间的时间也会被记录下来。
有什么办法可以打破循环和重置计数吗?
发布于 2022-04-12 14:08:42
你应该在打开前重新设置计数器。在您当前的代码中,计数的行没有执行,因为它在到达它之前就出现了。
if button_b.was_pressed():
count = 0
breakhttps://stackoverflow.com/questions/71844134
复制相似问题