forked from FOSS/BangleApps
commit
4b35edaaf4
|
@ -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
|
||||||
|
|
|
@ -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:"txt", font:"6x8", label:/*LANG*/"Samples", pad:2},
|
{ type: "h", c: [
|
||||||
{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*/"Samples", pad:2},
|
||||||
{type:"txt", id:"time", 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:"txt", font:"6x8:2", label:/*LANG*/"RECORDING", bgCol:"#f00", pad:5, fillx:1},
|
]},
|
||||||
]
|
{ type: "v", c: [
|
||||||
},{btns:[ // Buttons...
|
{type:"txt", font:"6x8", label:/*LANG*/"Time", pad:2},
|
||||||
{label:/*LANG*/"STOP", cb:()=>{
|
{type:"txt", id:"time", font:"6x8:2", label:" - ", pad:5, bgCol:g.theme.bg},
|
||||||
Bangle.removeListener('accel', accelHandler);
|
]},
|
||||||
showMenu();
|
]},
|
||||||
|
{ type: "h", c: [
|
||||||
|
{ type: "v", c: [
|
||||||
|
{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();
|
||||||
|
}
|
||||||
|
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;
|
||||||
f.write([
|
if (logRawData) {
|
||||||
t*1000,
|
f.write([
|
||||||
accel.x*8192,
|
t*1000,
|
||||||
accel.y*8192,
|
accel.x*8192,
|
||||||
accel.z*8192].map(n=>Math.round(n)).join(",")+"\n");
|
accel.y*8192,
|
||||||
|
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
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Reference in New Issue