• This is the complete app:

    var fileNumber = 0;
    var MAXLOGS = 9;
    
    function getFileName(n) {
      return "accellog."+n+".csv";
    }
    
    function showMenu() {
      var menu = {
        "" : { title : "Accel Logger" },
        "File No" : {
          value : fileNumber,
          min : 0,
          max : MAXLOGS,
          onchange : v => { fileNumber=v; }
        },
        "Start" : function() {
          E.showMenu();
          startRecord();
        },
        "View Logs" : function() {
          viewLogs();
        },
        "Exit" : function() {
          load();
        },
      };
      E.showMenu(menu);
    }
    
    function viewLog(n) {
      E.showMessage("Loading...");
      var f = require("Storage").open(getFileName(n), "r");
      var records = 0, l = "", ll="";
      while ((l=f.readLine())!==undefined) {records++;ll=l;}
      var length = 0;
      if (ll) length = (ll.split(",")[0]|0)/1000;
    
      var menu = {
        "" : { title : "Log "+n }
      };
      menu[records+" Records"] = "";
      menu[length+" Seconds"] = "";
      menu["DELETE"] = function() {
        E.showPrompt("Delete Log "+n).then(ok=>{
          if (ok) {
            E.showMessage("Erasing...");
            f.erase();
            viewLogs();
          } else viewLog(n);
        });
      };
      menu["< Back"] = function() {
        viewLogs();
      };
    
      E.showMenu(menu);
    }
    
    function viewLogs() {
      var menu = {
        "" : { title : "Logs" }
      };
    
      var hadLogs = false;
      for (var i=0;i<=MAXLOGS;i++) {
        var f = require("Storage").open(getFileName(i), "r");
        if (f.readLine()!==undefined) {
          (function(i) {
            menu["Log "+i] = () => viewLog(i);
          })(i);
          hadLogs = true;
        }
      }
      if (!hadLogs)
        menu["No Logs Found"] = function(){};
      menu["< Back"] = function() { showMenu(); };
      E.showMenu(menu);
    }
    
    function startRecord(force) {
      if (!force) {
        // check for existing file
        var f = require("Storage").open(getFileName(file­Number), "r");
        if (f.readLine()!==undefined)
          return E.showPrompt("Overwrite Log "+fileNumber+"?").then(ok=>{
            if (ok) startRecord(true); else showMenu();
          });
      }
      var start = getTime();
      var t = 0, maxValue = 0;
    
      function updateScreen() {
        g.reset();
        g.clearRect(0,h/2 - 20,w-20,h/2 + 20);    
        g.setFontVector(40).setFontAlign(0,0);
        g.drawString(maxValue.toFixed(1),w/2,h/2­)
      }
      function accelHandler(accel) {
        t = getTime()-start;
        // get the actual magnitude
        var mag = Math.sqrt(accel.x*accel.x + accel.y*accel.y + accel.z*accel.z);
        // if it's bigger, update the max value and screen
        if (mag > maxValue) {
          maxValue = mag;
          updateScreen();
        }
      }
      
      // display
      g.clear(1);
      Bangle.drawWidgets();
      g.reset();
      var w = g.getWidth();
      var h = g.getHeight();
      g.setFont("6x8").setFontAlign(0,0).drawS­tring("Max Accel:", w/2, h/2 - 25);
      g.setFont("6x8",2).setFontAlign(0,0,1).d­rawString("SAVE",w-10,h/2);
      g.setFont("6x8",2).setFontAlign(0,0,1).d­rawString("STOP",w-10,3*h/4);
      updateScreen();
    
      // now start writing
      f = require("Storage").open(getFileName(file­Number), "w");
      f.write("Time (ms),Accel\n");
    
      // start accel
      Bangle.setPollInterval(80); // 12.5 Hz
      Bangle.on('accel', accelHandler);
      // buttons
      var watch = setWatch(function() {
        // write time and max value
        f.write([
          t*1000,
          maxValue].join(",")+"\n");
        // reset the values
        maxValue = 0;
        updateScreen();
      }, BTN2, {repeat:true});
      setWatch(()=>{
        clearWatch(watch);
        Bangle.removeListener('accel', accelHandler);
        showMenu();
      }, BTN3);
    }
    
    
    Bangle.loadWidgets();
    Bangle.drawWidgets();
    showMenu();
    
About

Avatar for Gordon @Gordon started