1
0
Fork 0

fix file saving

master
Elfreda Kwawu 2024-04-16 16:48:04 -04:00
parent 6841bb2d00
commit 0627d757b3
3 changed files with 44 additions and 22 deletions

View File

@ -4,6 +4,7 @@ let lcdTimeout;
let logData = []; let logData = [];
let bpmValues = []; let bpmValues = [];
let lastLogTime = 0; let lastLogTime = 0;
const MAX_LOGS = 9;
function startMeasure() { function startMeasure() {
isMeasuring = true; isMeasuring = true;
@ -58,7 +59,6 @@ function handleHeartRate(hrm) {
} }
} }
function calcSDNN() { function calcSDNN() {
if (bpmValues.length < 5) return 0; // No calculation if insufficient data if (bpmValues.length < 5) return 0; // No calculation if insufficient data
@ -111,7 +111,6 @@ function drawScreen(message) {
g.drawString(currentHR.toString(), g.getWidth() / 2, g.getHeight() / 2 + 20); g.drawString(currentHR.toString(), g.getWidth() / 2, g.getHeight() / 2 + 20);
g.setFont('6x8', 1.6); g.setFont('6x8', 1.6);
g.drawString(' BPM', g.getWidth() / 2 + 42, g.getHeight() / 2 + 20); g.drawString(' BPM', g.getWidth() / 2 + 42, g.getHeight() / 2 + 20);
} }
// Draw instructions // Draw instructions
@ -126,7 +125,6 @@ function drawScreen(message) {
g.drawString(currentHR.toString(), g.getWidth() / 2, g.getHeight() / 2 + 10); g.drawString(currentHR.toString(), g.getWidth() / 2, g.getHeight() / 2 + 10);
g.setFont('6x8', 1.6); g.setFont('6x8', 1.6);
g.drawString(' BPM', g.getWidth() / 2 + 42, g.getHeight() / 2 + 12); g.drawString(' BPM', g.getWidth() / 2 + 42, g.getHeight() / 2 + 12);
} else { } else {
g.setFont('6x8', 2); g.setFont('6x8', 2);
g.drawString('No data', g.getWidth() / 2, g.getHeight() / 2 + 10); g.drawString('No data', g.getWidth() / 2, g.getHeight() / 2 + 10);
@ -144,7 +142,15 @@ function saveDataToCSV() {
logData.forEach(entry => { logData.forEach(entry => {
csvContent += `${entry.timestamp},${entry.heartRate},${entry.hrv}\n`; csvContent += `${entry.timestamp},${entry.heartRate},${entry.hrv}\n`;
}); });
require("Storage").write("heart_rate_data.csv", csvContent);
// Find an available file number
let fileNum = 0;
while (require("Storage").read(`heart_rate_data_${fileNum}.csv`) !== undefined && fileNum <= MAX_LOGS) {
fileNum++;
}
// Write data to a CSV file
require("Storage").write(`heart_rate_data_${fileNum}.csv`, csvContent);
} }
setWatch(function() { setWatch(function() {

View File

@ -9,36 +9,54 @@
<script> <script>
var dataElement = document.getElementById("data"); var dataElement = document.getElementById("data");
function getHeartRateData() { function getData() {
// show loading window
Util.showModal("Loading..."); Util.showModal("Loading...");
// get the data
dataElement.innerHTML = ""; dataElement.innerHTML = "";
var promise = Promise.resolve();
Puck.eval('require("Storage").list(/heart_rate_data\\.csv\\x01/)', files => { Puck.eval('require("Storage").list(/heart_rate_data\\.csv\\x01/)', files => {
if (files.length == 0) { if (files.length == 0) {
dataElement.innerHTML = "<p>No heart rate data found</p>"; dataElement.innerHTML = "<p>No heart rate data found</p>";
} else { } else {
files.forEach(fn => { files.forEach(fn => {
fn = fn.slice(0, -1); fn = fn.slice(0, -1);
var link = document.createElement("a"); dataElement.innerHTML += `
link.setAttribute("href", "#"); <div class="card">
link.textContent = fn; <div class="card-header">
link.addEventListener("click", function() { <div class="card-title h5">${fn}</div>
</div>
<div class="card-footer">
<button class="btn btn-primary" fn="${fn}" act="save">Save</button>
<button class="btn" fn="${fn}" act="delete">Delete</button>
</div>
</div>`;
promise = promise.then(function() {
document.querySelector(`.btn[fn='${fn}'][act='save']`).addEventListener("click", function() {
Util.showModal("Downloading..."); Util.showModal("Downloading...");
Util.readStorageFile(fn, function(data) { Util.readStorageFile(fn, function(data) {
Util.saveCSV(fn.slice(0, -4), data); Util.saveCSV(fn.slice(0, -4), data);
Util.hideModal(); Util.hideModal();
}); });
}); });
dataElement.appendChild(link); document.querySelector(`.btn[fn='${fn}'][act='delete']`).addEventListener("click", function() {
dataElement.appendChild(document.createElement("br")); Util.showModal("Deleting...");
Util.eraseStorageFile(fn, function() {
Util.hideModal();
getData();
});
});
});
}); });
} }
// remove window
Util.hideModal(); Util.hideModal();
}); });
} }
// Called when app starts // Called when app starts
function onInit() { function onInit() {
getHeartRateData(); getData();
} }
</script> </script>
</body> </body>

View File

@ -8,11 +8,9 @@
"interface": "interface.html", "interface": "interface.html",
"readme": "README.md", "readme": "README.md",
"supports": ["BANGLEJS2"], "supports": ["BANGLEJS2"],
"permissions": {
"read": ["file"]
},
"storage": [ "storage": [
{"name":"phystrax.app.js","url":"app.js"}, {"name":"phystrax.app.js","url":"app.js"},
{"name":"phystrax.img","url":"app-icon.js","evaluate":true} {"name":"phystrax.img","url":"app-icon.js","evaluate":true}
] ],
"data": [{"wildcard":"heart_rate_data.?.csv"}]
} }