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(fileNumber), "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).drawString("Max Accel:", w/2, h/2 - 25); g.setFont("6x8",2).setFontAlign(0,0,1).drawString("SAVE",w-10,h/2); g.setFont("6x8",2).setFontAlign(0,0,1).drawString("STOP",w-10,3*h/4); updateScreen(); // now start writing f = require("Storage").open(getFileName(fileNumber), "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();
@Gordon started
Espruino is a JavaScript interpreter for low-power Microcontrollers. This site is both a support community for Espruino and a place to share what you are working on.
This is the complete app: