Hi
I did this little program. An M5 Fire can measure with it the acceleration for 60 seconds and report it. Additional Features: Long press of key B shows battery level. Normal press of key B writes recorded data to console. Normal press of key A writes prior recorded data on SD Card.
After the first recording the number of data points are displayed together with the average time intervall between recording the data points. The total length of the recording is also visible on the screen
from m5stack import *
from m5ui import *
from uiflow import *
import time
import machine
import imu
setScreenColor(0x222222)
recordflag = None
datax = None
az = None
datay = None
count = None
dataz = None
ticktime = None
ax = None
ticktemp = None
ay = None
imu0 = imu.IMU()
label3 = M5TextBox(124, 209, "out:seriel", lcd.FONT_Ubuntu, 0xec9595, rotate=0)
label4 = M5TextBox(23, 209, "out:sdcard", lcd.FONT_Ubuntu, 0xec9595, rotate=0)
label5 = M5TextBox(226, 209, "rec", lcd.FONT_Ubuntu, 0xec9595, rotate=0)
label0 = M5TextBox(54, 112, "label0", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label1 = M5TextBox(36, 67, "label1", lcd.FONT_DejaVu24, 0xFFFFFF, rotate=0)
label2 = M5TextBox(226, 180, "ready", lcd.FONT_Ubuntu, 0xec9595, rotate=0)
label7 = M5TextBox(87, 147, "0", lcd.FONT_Comic, 0xFFFFFF, rotate=0)
label8 = M5TextBox(36, 147, "ms:", lcd.FONT_Comic, 0xFFFFFF, rotate=0)
label9 = M5TextBox(43, 187, "status", lcd.FONT_Default, 0xf23cb4, rotate=0)
label10 = M5TextBox(36, 112, "#", lcd.FONT_Default, 0xFFFFFF, rotate=0)
label11 = M5TextBox(214, 74, "a (z)", lcd.FONT_DefaultSmall, 0xdbd9d9, rotate=0)
title0 = M5Title(title="Hello Forces", x=3, fgcolor=0xFFFFFF, bgcolor=0x0000FF)
label6 = M5TextBox(215, 153, "time of interval", lcd.FONT_DefaultSmall, 0xFFFFFF, rotate=0)
label12 = M5TextBox(216, 114, "(max 10'000 !)", lcd.FONT_DefaultSmall, 0xFFFFFF, rotate=0)
from numbers import Number
# Describe this function...
def dosomething2():
global recordflag, datax, az, datay, count, dataz, ticktime, ax, ticktemp, ay
if recordflag:
return 'ON'
return 'OFF'
def buttonC_wasPressed():
global recordflag, datax, az, datay, count, dataz, ticktime, ax, ticktemp, ay
if recordflag == 1:
recordflag = 0
timerSch.stop('tim_end')
ticktime = (time.ticks_ms()) - ticktime
label9.setText(str((str('length in s:') + str((ticktime / 1000)))))
if ticktemp == 0:
ticktemp = 1
label7.setText(str(ticktime / count))
else:
timerSch.run('tim_end', 71000, 0x01)
recordflag = 1
ticktime = time.ticks_ms()
label2.setText(str(dosomething2()))
pass
btnC.wasPressed(buttonC_wasPressed)
def buttonB_wasPressed():
global recordflag, datax, az, datay, count, dataz, ticktime, ax, ticktemp, ay
print(datax[ : int(count)])
print(datay[ : int(count)])
print(dataz[ : int(count)])
pass
btnB.wasPressed(buttonB_wasPressed)
def buttonA_wasPressed():
global recordflag, datax, az, datay, count, dataz, ticktime, ax, ticktemp, ay
with open('/sd/acclexyz.txt', 'w+') as fs:
fs.write(str(datax))
fs.write(str(datay))
fs.write(str(dataz))
label9.setText('file accelxyz.txt written')
pass
btnA.wasPressed(buttonA_wasPressed)
def buttonB_pressFor():
global recordflag, datax, az, datay, count, dataz, ticktime, ax, ticktemp, ay
label6.hide()
label11.hide()
label12.hide()
label10.hide()
label9.hide()
label7.hide()
label2.hide()
label1.setText(str(power.getBatteryLevel()))
label0.setText('Battery LEVEL')
label8.setText('... reboot in 5s')
wait(6)
machine.reset()
pass
btnB.pressFor(0.8, buttonB_pressFor)
@timerSch.event('tim0')
def ttim0():
global recordflag, datax, az, datay, count, dataz, ticktime, ax, ticktemp, ay
label1.setText(str(az))
label0.setText(str(count))
pass
@timerSch.event('tim_end')
def ttim_end():
global recordflag, datax, az, datay, count, dataz, ticktime, ax, ticktemp, ay
recordflag = 0
label9.setText('automatic stop')
pass
datax = [0] * 10000
datay = [0] * 10000
dataz = [0] * 10000
count = 0
recordflag = 0
ax = 0
ticktime = 0
ticktemp = 0
lcd.ellipse(250, 20, 50, 25, color=0xff0000)
timerSch.run('tim0', 200, 0x00)
while True:
ax = imu0.acceleration[0]
ay = imu0.acceleration[1]
az = imu0.acceleration[2]
if recordflag == 1:
count = (count if isinstance(count, Number) else 0) + 1
datax[int(count - 1)] = ax
wait_ms(2)