Files
signalmen/script.js
2025-03-06 18:52:49 +01:00

77 lines
1.9 KiB
JavaScript

// Connect to serial port with 9600 baudrate
// everything in the browser
lightState = {
red: 0,
yellow: 0,
green: 0,
buzzer: 0,
};
let light1Inp = document.getElementById("light1");
let light2Inp = document.getElementById("light2");
let light3Inp = document.getElementById("light3");
light1Inp.addEventListener("change", (event) => {
lightState.red = event.target.value;
sendLightData();
});
light2Inp.addEventListener("change", (event) => {
lightState.yellow = event.target.value;
sendLightData();
});
light3Inp.addEventListener("change", (event) => {
lightState.green = event.target.value;
sendLightData();
});
async function connectToLight() {
// usbVendorId: 0x0403, usbProductId: 0x6015
const usbVendorId = 0x0403;
port = await navigator.serial.requestPort({ filters: [{ usbVendorId }] })
await port.open({ baudRate: 9600 /* pick your baud rate */ });
}
function setBuzz(value) {
lightState.buzzer = value;
sendLightData();
}
async function sendLightData() {
// WR12345<CR> 1: green, 2: yellow, 3: red, 4: buzzer, 5: empty (alsways 0)
let data = `WR${lightState.green}${lightState.yellow}${lightState.red}${lightState.buzzer}0\r`;
console.log("Sending data: ", data);
const encoder = new TextEncoder();
const writer = port.writable.getWriter();
await writer.write(encoder.encode(data));
writer.releaseLock();
readData();
}
async function readData() {
console.log("Reading data");
while (port.readable) {
const reader = port.readable.getReader();
try {
while (true) {
const { value, done } = await reader.read();
if (done) {
// |reader| has been canceled.
break;
}
// Do something with |value|…
// Convert value to string
const decoder = new TextDecoder();
console.log(decoder.decode(value));
}
} catch (error) {
// Handle |error|…
} finally {
reader.releaseLock();
}
}
console.log("Done reading");
}