Files
PiAlive/node_modules/onoff/test/debounce.js
2018-05-16 10:10:23 +02:00

57 lines
1.2 KiB
JavaScript

"use strict";
const assert = require('assert');
const Gpio = require('../onoff').Gpio;
const output = new Gpio(8, 'out');
const button = new Gpio(7, 'in', 'both', {debounceTimeout: 10});
let buttonPressedCount = 0;
let buttonReleasedCount = 0;
function simulateToggleButtonStateWithBounce(cb) {
let toggleCount = 0;
const iv = setInterval(() => {
if (toggleCount === 19) {
clearInterval(iv);
return cb();
}
output.writeSync(output.readSync() ^ 1);
toggleCount += 1;
}, 2);
}
function simulatePressAndReleaseButtonWithBounce() {
simulateToggleButtonStateWithBounce(() => {
setTimeout(() => {
simulateToggleButtonStateWithBounce(() => {
setTimeout(() => {
assert(buttonPressedCount === 1);
assert(buttonReleasedCount === 1);
button.unexport();
output.unexport();
console.log('ok - ' + __filename);
}, 20);
});
}, 50);
});
}
button.watch((err, value) => {
if (err) {
throw err;
}
if (value === 1) {
buttonPressedCount += 1;
} else if (value === 0) {
buttonReleasedCount += 1;
}
});
simulatePressAndReleaseButtonWithBounce();