1
0
Fork 0

Add reset button

master
marko 2020-09-09 10:52:47 -04:00
parent 095a06bda5
commit f83d5e03e7
2 changed files with 26 additions and 6 deletions

View File

@ -1,3 +1,15 @@
# CSCSensor # CSCSensor
TBD Simple app that can read a cycling speed and cadence (CSC) sensor and display the information on the watch.
Currently the app displays the following data:
- moving time
- current speed
- average speed
- maximum speed
- distance traveled
Button 1 resets all measurements.
I do not have acces to a cadence sensor at the moment, so only the speed part is currently implemented. Values displayed are imperial, and a wheel diameter
of 28 inches is assumed. A settings dialog to configure units and wheel sizes will (hopefully) be added later.

View File

@ -16,17 +16,23 @@ class CSCSensor {
this.maxSpeed = 0; this.maxSpeed = 0;
this.lastSpeed = 0; this.lastSpeed = 0;
this.qUpdateScreen = true; this.qUpdateScreen = true;
this.lastRevsStart = -1;
}
reset() {
this.maxSpeed = 0;
this.movingTime = 0;
this.lastRevsStart = this.lastRevs;
this.maxSpeed = 0;
} }
updateScreen() { updateScreen() {
var dist = this.lastRevs*this.wheelDia*Math.PI/63360.0; var dist = (this.lastRevs-this.lastRevsStart)*this.wheelDia*Math.PI/63360.0;
var ddist = Math.round(100*dist)/100; var ddist = Math.round(100*dist)/100;
var dspeed = Math.round(10*this.speed)/10; var dspeed = Math.round(10*this.speed)/10;
var dmins = Math.floor(this.movingTime/60).toString(); var dmins = Math.floor(this.movingTime/60).toString();
if (dmins.length<2) dmins = "0"+dmins; if (dmins.length<2) dmins = "0"+dmins;
var dsecs = (Math.floor(this.movingTime) % 60).toString(); var dsecs = (Math.floor(this.movingTime) % 60).toString();
if (dsecs.length<2) dsecs = "0"+dsecs; if (dsecs.length<2) dsecs = "0"+dsecs;
var avespeed = Math.round(10*dist/this.movingTime)/10; var avespeed = (this.movingTime>0 ? Math.round(10*dist/(this.movingTime/3600))/10 : 0);
var maxspeed = Math.round(10*this.maxSpeed)/10; var maxspeed = Math.round(10*this.maxSpeed)/10;
g.setFontAlign(1, -1, 0).setFontVector(18).setColor(1, 1, 0); g.setFontAlign(1, -1, 0).setFontVector(18).setColor(1, 1, 0);
g.drawString("Time:", 86, 60); g.drawString("Time:", 86, 60);
@ -41,7 +47,6 @@ class CSCSensor {
g.drawString(maxspeed + " mph", 92, 160); g.drawString(maxspeed + " mph", 92, 160);
g.drawString(ddist + " miles", 92, 192); g.drawString(ddist + " miles", 92, 192);
} }
updateSensor(event) { updateSensor(event) {
var qChanged = false; var qChanged = false;
if (event.target.uuid == "0x2a5b") { if (event.target.uuid == "0x2a5b") {
@ -49,6 +54,7 @@ class CSCSensor {
var dRevs = (this.lastRevs>0 ? wheelRevs-this.lastRevs : 0); var dRevs = (this.lastRevs>0 ? wheelRevs-this.lastRevs : 0);
if (dRevs>0) qChanged = true; if (dRevs>0) qChanged = true;
this.lastRevs = wheelRevs; this.lastRevs = wheelRevs;
if (this.lastRevsStart<0) this.lastRevsStart = wheelRevs;
var wheelTime = event.target.value.getUint16(5, true); var wheelTime = event.target.value.getUint16(5, true);
var dT = (wheelTime-this.lastTime)/1024; var dT = (wheelTime-this.lastTime)/1024;
var dBT = (Date.now()-this.lastBangleTime)/1000; var dBT = (Date.now()-this.lastBangleTime)/1000;
@ -103,6 +109,8 @@ NRF.setScan(parseDevice, { filters: [{services:["1816"]}], timeout: 2000});
g.clearRect(0, 60, 239, 239).setFontVector(18).setFontAlign(0, 0, 0).setColor(0, 1, 0); g.clearRect(0, 60, 239, 239).setFontVector(18).setFontAlign(0, 0, 0).setColor(0, 1, 0);
g.drawString("Scanning for CSC sensor...", 120, 120); g.drawString("Scanning for CSC sensor...", 120, 120);
setWatch(function() { mySensor.reset(); mySensor.updateScreen(); }, BTN1);
Bangle.on('kill',()=>{ if (gatt!=undefined) gatt.disconnect()}); Bangle.on('kill',()=>{ if (gatt!=undefined) gatt.disconnect()});
Bangle.loadWidgets(); Bangle.loadWidgets();