Code for Acceleration Recorder w SDCard output for M5Fire
-
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)