Skip to content

Instantly share code, notes, and snippets.

@kevtainer
Created September 5, 2020 23:24
Show Gist options
  • Save kevtainer/a1bd51ddf8b632e9896bea049ddd053b to your computer and use it in GitHub Desktop.
Save kevtainer/a1bd51ddf8b632e9896bea049ddd053b to your computer and use it in GitHub Desktop.
const SerialPort = require('serialport')
const Delimiter = require('@serialport/parser-delimiter')
const port = new SerialPort('/dev/ttyUSB0', {
baudRate: 19200
})
var peletonData = {
cadence: 0,
power: 0
}
var peletonDelimiter = new Buffer('f6', 'hex');
const parser = port.pipe(new Delimiter({ delimiter: peletonDelimiter }))
parser.on('data', function (data) {
switch (data[1]) {
case 65:
peletonData.cadence = decodePeloton(data, data[2], false)
return
case 68:
peletonData.power = decodePeloton(data, data[2], true)
return
}
})
setInterval(function() {
console.log(peletonData)
}, 250)
function decodePeloton(bufferArray, byteLength, isPower) {
wholeValue = 1
precision = 0.0
accumulator = 0
iteratorOffset = 3
for (iteratorTemp = iteratorOffset; iteratorTemp < iteratorOffset + byteLength; iteratorTemp++) {
offsetVal = bufferArray[iteratorTemp] - 48
if (offsetVal < 0 || offsetVal > 9) {
console.log("invalid value detected: ", offsetVal)
exit()
}
if (!isPower || iteratorTemp != iteratorOffset) {
accumulator += (offsetVal * wholeValue)
wholeValue *= 10;
} else {
precision = wholeValue * offsetVal / 10.0
}
}
return accumulator + precision
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment