hestia/src/custom_modules/VoidGPIO.js

67 lines
2.1 KiB
JavaScript
Raw Normal View History

2024-08-18 16:31:29 +00:00
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
2024-08-18 17:10:10 +00:00
export function togglePin(pin, callback) {
2024-08-18 16:31:29 +00:00
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
2024-08-18 17:10:10 +00:00
export function sensePin(pin, callback) {
2024-08-18 16:31:29 +00:00
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
2024-08-18 17:10:10 +00:00
export function debugInit() {
2024-08-18 16:31:29 +00:00
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;
}
});
}