🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    Code for Acceleration Recorder w SDCard output for M5Fire

    PROJECTS
    1
    1
    371
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      Alecs
      last edited by

      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)
      
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post