1
0
Fork 0

Merge pull request #2151 from asmaps/master

Improve accellog
master
Gordon Williams 2022-10-10 11:31:30 +01:00 committed by GitHub
commit 4b35edaaf4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 89 additions and 19 deletions

View File

@ -2,3 +2,4 @@
0.02: Use the new multiplatform 'Layout' library 0.02: Use the new multiplatform 'Layout' library
0.03: Exit as first menu option, dont show decimal places for seconds 0.03: Exit as first menu option, dont show decimal places for seconds
0.04: Localisation, change Exit->Back to allow back-arrow to appear on 2v13 firmware 0.04: Localisation, change Exit->Back to allow back-arrow to appear on 2v13 firmware
0.05: Add max G values during recording, record actual G values and magnitude to CSV

View File

@ -1,5 +1,6 @@
var fileNumber = 0; var fileNumber = 0;
var MAXLOGS = 9; var MAXLOGS = 9;
var logRawData = false;
function getFileName(n) { function getFileName(n) {
return "accellog."+n+".csv"; return "accellog."+n+".csv";
@ -24,6 +25,11 @@ function showMenu() {
/*LANG*/"View Logs" : function() { /*LANG*/"View Logs" : function() {
viewLogs(); viewLogs();
}, },
/*LANG*/"Log raw data" : {
value : logRawData,
format : v => v?/*LANG*/"Yes":/*LANG*/"No",
onchange : v => { logRawData=v; }
},
}; };
E.showMenu(menu); E.showMenu(menu);
} }
@ -78,6 +84,7 @@ function viewLogs() {
} }
function startRecord(force) { function startRecord(force) {
var stopped = false;
if (!force) { if (!force) {
// check for existing file // check for existing file
var f = require("Storage").open(getFileName(fileNumber), "r"); var f = require("Storage").open(getFileName(fileNumber), "r");
@ -92,39 +99,101 @@ function startRecord(force) {
var Layout = require("Layout"); var Layout = require("Layout");
var layout = new Layout({ type: "v", c: [ var layout = new Layout({ type: "v", c: [
{ type: "h", c: [
{ type: "v", c: [
{type:"txt", font:"6x8", label:/*LANG*/"Samples", pad:2}, {type:"txt", font:"6x8", label:/*LANG*/"Samples", pad:2},
{type:"txt", id:"samples", font:"6x8:2", label:" - ", pad:5, bgCol:g.theme.bg}, {type:"txt", id:"samples", font:"6x8:2", label:" - ", pad:5, bgCol:g.theme.bg},
]},
{ type: "v", c: [
{type:"txt", font:"6x8", label:/*LANG*/"Time", pad:2}, {type:"txt", font:"6x8", label:/*LANG*/"Time", pad:2},
{type:"txt", id:"time", font:"6x8:2", label:" - ", pad:5, bgCol:g.theme.bg}, {type:"txt", id:"time", font:"6x8:2", label:" - ", pad:5, bgCol:g.theme.bg},
{type:"txt", font:"6x8:2", label:/*LANG*/"RECORDING", bgCol:"#f00", pad:5, fillx:1}, ]},
] ]},
},{btns:[ // Buttons... { type: "h", c: [
{label:/*LANG*/"STOP", cb:()=>{ { type: "v", c: [
Bangle.removeListener('accel', accelHandler); {type:"txt", font:"6x8", label:/*LANG*/"Max X", pad:2},
{type:"txt", id:"maxX", font:"6x8", label:" - ", pad:5, bgCol:g.theme.bg},
]},
{ type: "v", c: [
{type:"txt", font:"6x8", label:/*LANG*/"Max Y", pad:2},
{type:"txt", id:"maxY", font:"6x8", label:" - ", pad:5, bgCol:g.theme.bg},
]},
{ type: "v", c: [
{type:"txt", font:"6x8", label:/*LANG*/"Max Z", pad:2},
{type:"txt", id:"maxZ", font:"6x8", label:" - ", pad:5, bgCol:g.theme.bg},
]},
]},
{type:"txt", font:"6x8", label:/*LANG*/"Max G", pad:2},
{type:"txt", id:"maxMag", font:"6x8:4", label:" - ", pad:5, bgCol:g.theme.bg},
{type:"txt", id:"state", font:"6x8:2", label:/*LANG*/"RECORDING", bgCol:"#f00", pad:5, fillx:1},
]},
{
btns:[ // Buttons...
{id: "btnStop", label:/*LANG*/"STOP", cb:()=>{
if (stopped) {
showMenu(); showMenu();
}
else {
Bangle.removeListener('accel', accelHandler);
layout.state.label = /*LANG*/"STOPPED";
layout.state.bgCol = /*LANG*/"#0f0";
stopped = true;
layout.render();
}
}} }}
]}); ]});
layout.render(); layout.render();
// now start writing // now start writing
var f = require("Storage").open(getFileName(fileNumber), "w"); var f = require("Storage").open(getFileName(fileNumber), "w");
f.write("Time (ms),X,Y,Z\n"); f.write("Time (ms),X,Y,Z,Total\n");
var start = getTime(); var start = getTime();
var sampleCount = 0; var sampleCount = 0;
var maxMag = 0;
var maxX = 0;
var maxY = 0;
var maxZ = 0;
function accelHandler(accel) { function accelHandler(accel) {
var t = getTime()-start; var t = getTime()-start;
if (logRawData) {
f.write([ f.write([
t*1000, t*1000,
accel.x*8192, accel.x*8192,
accel.y*8192, accel.y*8192,
accel.z*8192].map(n=>Math.round(n)).join(",")+"\n"); accel.z*8192,
accel.mag*8192,
].map(n=>Math.round(n)).join(",")+"\n");
} else {
f.write([
Math.round(t*1000),
accel.x,
accel.y,
accel.z,
accel.mag,
].join(",")+"\n");
}
if (accel.mag > maxMag) {
maxMag = accel.mag.toFixed(2);
}
if (accel.x > maxX) {
maxX = accel.x.toFixed(2);
}
if (accel.y > maxY) {
maxY = accel.y.toFixed(2);
}
if (accel.z > maxZ) {
maxZ = accel.z.toFixed(2);
}
sampleCount++; sampleCount++;
layout.samples.label = sampleCount; layout.samples.label = sampleCount;
layout.time.label = Math.round(t)+"s"; layout.time.label = Math.round(t)+"s";
layout.render(layout.samples); layout.maxX.label = maxX;
layout.render(layout.time); layout.maxY.label = maxY;
layout.maxZ.label = maxZ;
layout.maxMag.label = maxMag;
layout.render();
} }
Bangle.setPollInterval(80); // 12.5 Hz - the default Bangle.setPollInterval(80); // 12.5 Hz - the default

View File

@ -2,7 +2,7 @@
"id": "accellog", "id": "accellog",
"name": "Acceleration Logger", "name": "Acceleration Logger",
"shortName": "Accel Log", "shortName": "Accel Log",
"version": "0.04", "version": "0.05",
"description": "Logs XYZ acceleration data to a CSV file that can be downloaded to your PC", "description": "Logs XYZ acceleration data to a CSV file that can be downloaded to your PC",
"icon": "app.png", "icon": "app.png",
"tags": "outdoor", "tags": "outdoor",