67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
|
const { exec } = require('child_process');
|
||
|
|
||
|
const pins = [
|
||
|
{ key: 'igniter', board: 13, bcm: 27, mode: 'OUT' },
|
||
|
{ key: 'exhaust', board: 15, bcm: 22, mode: 'OUT' },
|
||
|
{ key: 'auger', board: 7, bcm: 4, mode: 'OUT' },
|
||
|
{ key: 'pof', board: 16, bcm: 23, mode: 'IN' },
|
||
|
{ key: 'vacuum', board: 22, bcm: 25, mode: 'IN' }
|
||
|
];
|
||
|
|
||
|
pins.forEach(pin => {
|
||
|
console.log(`Key: ${pin.key}, Board: ${pin.board}, BCM: ${pin.bcm}, Mode: ${pin.mode}`);
|
||
|
});
|
||
|
|
||
|
|
||
|
// Function to toggle a pin on-then-off
|
||
|
function togglePin(pin, callback) {
|
||
|
exec(`python3 src/python/gpio_interface.py toggle ${pin}`, (error, stdout, stderr) => {
|
||
|
if (error) {
|
||
|
return callback(error);
|
||
|
}
|
||
|
if (stderr) {
|
||
|
return callback(new Error(stderr));
|
||
|
}
|
||
|
console.log(`Successfully toggled pin ${pin}`);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// Function to sense a pin state
|
||
|
function sensePin(pin, callback) {
|
||
|
exec(`python3 src/python/gpio_interface.py sense ${pin}`, (error, stdout, stderr) => {
|
||
|
if (error) {
|
||
|
console.error(`Error sensing pin ${pin}: ${error.message}`);
|
||
|
return callback(error);
|
||
|
}
|
||
|
if (stderr) {
|
||
|
console.error(`Stderr while sensing pin ${pin}: ${stderr}`);
|
||
|
return callback(new Error(stderr));
|
||
|
}
|
||
|
console.log(`Pin ${pin} state: ${stdout.trim()}`);
|
||
|
callback(stdout.trim(), null);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// Toggle pins sequentially and then sense pin states
|
||
|
function debugInit() {
|
||
|
pins.forEach(async (pin) => {
|
||
|
switch (pin.mode) {
|
||
|
case 'OUT':
|
||
|
togglePin(pin.board, err => {
|
||
|
if (err) throw err;
|
||
|
});
|
||
|
// Wait 1000ms before toggling again.
|
||
|
setTimeout(togglePin(pin.board, err => {
|
||
|
if (err) throw err;
|
||
|
}), 1000);
|
||
|
break;
|
||
|
case 'IN':
|
||
|
sensePin(pin.board, (state, err) => {
|
||
|
if (err) throw err;
|
||
|
console.log(`${pin.key} state: ${state}`);
|
||
|
});
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
});
|
||
|
}
|