mirror of https://github.com/espruino/BangleApps
hrmaccevents - Allow storing log on bangle
parent
3bddcd402d
commit
7b6cbdfdb6
|
@ -4,130 +4,141 @@
|
|||
</head>
|
||||
<body>
|
||||
<script src="https://www.puck-js.com/puck.js"></script>
|
||||
<button id="btnConnect">Connect</button>
|
||||
<button id="btnStop">Stop</button>
|
||||
<button id="btnReset">Reset</button>
|
||||
<button id="btnSave">Save CSV</button>
|
||||
<p></div><input type="checkbox" id="chkLocal">Store on Bangle (file named log.csv, download with IDE)</input></p>
|
||||
<p>
|
||||
<button id="btnConnect">Start</button>
|
||||
<button id="btnStop">Stop</button>
|
||||
<button id="btnReset">Reset</button>
|
||||
<button id="btnSave">Save CSV</button>
|
||||
</p>
|
||||
<p id="result"></p>
|
||||
<script>
|
||||
var BANGLE_CODE = String.raw`
|
||||
var accData=[];
|
||||
var maxSize=0;
|
||||
var filename="log.csv";
|
||||
//0 print, 1 BT, 2 File
|
||||
var method=1;
|
||||
function createCode(){
|
||||
//modes: 0 print, 1 BT, 2 File
|
||||
return "var method=" + (document.getElementById("chkLocal").checked ? 2 : 1) + ";\n" + String.raw`
|
||||
var accData=[];
|
||||
var maxSize=0;
|
||||
var filename="log.csv";
|
||||
|
||||
var running = true;
|
||||
var gotHRMraw = false;
|
||||
var gotBTHRM = false;
|
||||
var gotHRM = false;
|
||||
var gotAcc = false;
|
||||
var running = true;
|
||||
var gotHRMraw = false;
|
||||
var gotBTHRM = false;
|
||||
var gotHRM = false;
|
||||
var gotAcc = false;
|
||||
|
||||
function gotAll(){
|
||||
return running && gotBTHRM && gotHRM && gotHRMraw && gotAcc;
|
||||
}
|
||||
|
||||
Bangle.setHRMPower(1);
|
||||
if (Bangle.setBTHRMPower){
|
||||
print("Use BTHRM");
|
||||
Bangle.setBTHRMPower(1);
|
||||
Bangle.setBTHRMPower(1);
|
||||
} else {
|
||||
gotBTHRM = true;
|
||||
}
|
||||
|
||||
var write=null;
|
||||
|
||||
if (method == 2){
|
||||
var f = require('Storage').open(filename,"w");
|
||||
f.erase();
|
||||
f = require('Storage').open(filename,"a");
|
||||
write = function(str){f.write(str);};
|
||||
} else if (method == 1){
|
||||
write = function(str){Bluetooth.print("DATA: " + str);};
|
||||
} else {
|
||||
write=print;
|
||||
}
|
||||
|
||||
write("Time,Acc_x,Acc_y,Acc_z,HRM_b,HRM_c,HRM_r,HRM_f,PPG_r,PPG_o,BTHRM\n");
|
||||
|
||||
|
||||
function writeAcc(e){
|
||||
gotAcc = true;
|
||||
e.date=Date.now();
|
||||
accData.push(e);
|
||||
accData.splice(0, accData.length - maxSize);
|
||||
}
|
||||
|
||||
function writeAccDirect(e){
|
||||
gotAcc = true;
|
||||
if (!gotAll()) return;
|
||||
write(Date.now()+","+e.x+","+e.y+","+e.z+",,,,,,,,\n");
|
||||
}
|
||||
|
||||
function writeBTHRM(e){
|
||||
gotBTHRM = true;
|
||||
if (!gotAll()) return;
|
||||
write(Date.now()+",,,,,,,,,,"+e.bpm+"\n");
|
||||
}
|
||||
|
||||
function writeHRM(e){
|
||||
gotHRM = true;
|
||||
if (!gotAll()) return;
|
||||
while(accData.length > 0){
|
||||
var c = accData.shift();
|
||||
if (c) write(c.date+","+c.x+","+c.y+","+c.z+",,,,,,,,\n");
|
||||
function gotAll(){
|
||||
return running && gotBTHRM && gotHRM && gotHRMraw && gotAcc;
|
||||
}
|
||||
write(Date.now()+",,,,"+e.bpm+","+e.confidence+",,,,\n");
|
||||
}
|
||||
|
||||
function writeHRMraw(e){
|
||||
gotHRMraw = true;
|
||||
if (!gotAll()) return;
|
||||
write(Date.now()+",,,,,,"+e.raw+","+e.filt+","+e.vcPPG+","+e.vcPPGoffs+",\n");
|
||||
}
|
||||
|
||||
if(maxSize){
|
||||
Bangle.on("accel", writeAcc);
|
||||
} else {
|
||||
Bangle.on("accel", writeAccDirect);
|
||||
}
|
||||
Bangle.on("HRM-raw", writeHRMraw);
|
||||
Bangle.on("HRM", writeHRM);
|
||||
Bangle.on("BTHRM", writeBTHRM);
|
||||
|
||||
g.clear();
|
||||
g.setColor(1,0,0);
|
||||
g.fillRect(0,0,g.getWidth(),g.getHeight());
|
||||
|
||||
|
||||
var intervalId = -1;
|
||||
intervalId = setInterval(()=>{
|
||||
print("Checking... Acc:" + gotAcc + " BTHRM:" + gotBTHRM + " HRM:" + gotHRM + " HRM raw:" + gotHRMraw);
|
||||
if (gotAll()){
|
||||
g.setColor(0,1,0);
|
||||
g.fillRect(0,0,g.getWidth(),g.getHeight());
|
||||
clearInterval(intervalId);
|
||||
Bangle.setHRMPower(1);
|
||||
if (Bangle.setBTHRMPower){
|
||||
print("Use BTHRM");
|
||||
Bangle.setBTHRMPower(1);
|
||||
} else {
|
||||
gotBTHRM = true;
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
if (Bangle.setBTHRMPower){
|
||||
var write=null;
|
||||
|
||||
if (method == 2){
|
||||
var f = require('Storage').open(filename,"w");
|
||||
f.erase();
|
||||
f = require('Storage').open(filename,"a");
|
||||
write = function(str){f.write(str);};
|
||||
} else if (method == 1){
|
||||
write = function(str){Bluetooth.print("DATA: " + str);};
|
||||
} else {
|
||||
write=print;
|
||||
}
|
||||
|
||||
write("Time,Acc_x,Acc_y,Acc_z,HRM_b,HRM_c,HRM_r,HRM_f,PPG_r,PPG_o,BTHRM\n");
|
||||
|
||||
|
||||
function writeAcc(e){
|
||||
gotAcc = true;
|
||||
e.date=Date.now();
|
||||
accData.push(e);
|
||||
accData.splice(0, accData.length - maxSize);
|
||||
}
|
||||
|
||||
function writeAccDirect(e){
|
||||
gotAcc = true;
|
||||
if (!gotAll()) return;
|
||||
write(Date.now()+","+e.x+","+e.y+","+e.z+",,,,,,,,\n");
|
||||
}
|
||||
|
||||
function writeBTHRM(e){
|
||||
gotBTHRM = true;
|
||||
if (!gotAll()) return;
|
||||
write(Date.now()+",,,,,,,,,,"+e.bpm+"\n");
|
||||
}
|
||||
|
||||
function writeHRM(e){
|
||||
gotHRM = true;
|
||||
if (!gotAll()) return;
|
||||
while(accData.length > 0){
|
||||
var c = accData.shift();
|
||||
if (c) write(c.date+","+c.x+","+c.y+","+c.z+",,,,,,,,\n");
|
||||
}
|
||||
write(Date.now()+",,,,"+e.bpm+","+e.confidence+",,,,\n");
|
||||
}
|
||||
|
||||
function writeHRMraw(e){
|
||||
gotHRMraw = true;
|
||||
if (!gotAll()) return;
|
||||
write(Date.now()+",,,,,,"+e.raw+","+e.filt+","+e.vcPPG+","+e.vcPPGoffs+",\n");
|
||||
}
|
||||
|
||||
if(maxSize){
|
||||
Bangle.on("accel", writeAcc);
|
||||
} else {
|
||||
Bangle.on("accel", writeAccDirect);
|
||||
}
|
||||
Bangle.on("HRM-raw", writeHRMraw);
|
||||
Bangle.on("HRM", writeHRM);
|
||||
Bangle.on("BTHRM", writeBTHRM);
|
||||
|
||||
g.clear();
|
||||
g.setColor(1,0,0);
|
||||
g.fillRect(0,0,g.getWidth(),g.getHeight());
|
||||
|
||||
|
||||
var intervalId = -1;
|
||||
intervalId = setInterval(()=>{
|
||||
if (!Bangle.isBTHRMOn()) Bangle.setBTHRMPower(1);
|
||||
}, 5000);
|
||||
print("Checking... Acc:" + gotAcc + " BTHRM:" + gotBTHRM + " HRM:" + gotHRM + " HRM raw:" + gotHRMraw);
|
||||
if (gotAll()){
|
||||
g.setColor(0,1,0);
|
||||
g.fillRect(0,0,g.getWidth(),g.getHeight());
|
||||
clearInterval(intervalId);
|
||||
}
|
||||
}, 1000);
|
||||
|
||||
if (Bangle.setBTHRMPower){
|
||||
intervalId = setInterval(()=>{
|
||||
if (!Bangle.isBTHRMOn()) Bangle.setBTHRMPower(1);
|
||||
}, 5000);
|
||||
}
|
||||
`;
|
||||
}
|
||||
`;
|
||||
|
||||
var connection;
|
||||
var lineCount=-1;
|
||||
|
||||
|
||||
function stop (){
|
||||
connection.write("running = false; \n");
|
||||
connection.close();
|
||||
connection.reconnect((c)=>{
|
||||
c.write("load();\n");
|
||||
c.close();
|
||||
connection = undefined;
|
||||
});
|
||||
}
|
||||
|
||||
document.getElementById("chkLocal").addEventListener("click", function() {
|
||||
document.getElementById("btnSave").disabled = document.getElementById("chkLocal").checked;
|
||||
document.getElementById("btnReset").disabled = document.getElementById("chkLocal").checked;
|
||||
document.getElementById("btnStop").disabled = document.getElementById("chkLocal").checked;
|
||||
});
|
||||
|
||||
document.getElementById("btnSave").addEventListener("click", function() {
|
||||
var h = document.createElement('a');
|
||||
h.href = 'data:text/csv;charset=utf-8,' + encodeURI(localStorage.getItem("data"));
|
||||
|
@ -170,7 +181,7 @@ document.getElementById("btnConnect").addEventListener("click", function() {
|
|||
});
|
||||
connection.write("reset();\n", function() {
|
||||
setTimeout(function() {
|
||||
connection.write("\x03\x10if(1){"+BANGLE_CODE+"}\n",
|
||||
connection.write("\x03\x10if(1){"+createCode()+"}\n",
|
||||
function() { console.log("Ready..."); });
|
||||
}, 1500);
|
||||
});
|
||||
|
|
|
@ -9,6 +9,6 @@
|
|||
"tags": "debug",
|
||||
"supports": ["BANGLEJS","BANGLEJS2"],
|
||||
"custom": "custom.html",
|
||||
"customConnect": true,
|
||||
"customConnect": false,
|
||||
"storage": [ ]
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue