“`
ATOMS3 USB Connector
Baud Rate: 115200
接続方式: Web Serial API
“`
let port = null; let reader = null; let keepReading = false;
const connectButton = document.getElementById("connectButton");
const disconnectButton = document.getElementById("disconnectButton");
const statusText = document.getElementById("statusText");
const statusDot = document.getElementById("statusDot");
const logElement = document.getElementById("log");
function log(message) {
const time = new Date().toLocaleTimeString();
logElement.textContent += `[${time}] ${message}\n`;
logElement.scrollTop = logElement.scrollHeight; }
function setConnected(connected) {
if (connected) {
statusText.textContent = "ATOMS3 接続中";
statusDot.classList.add( "connected" );
connectButton.disabled = true; disconnectButton.disabled = false;
} else {
statusText.textContent = "未接続";
statusDot.classList.remove( "connected" );
connectButton.disabled = false; disconnectButton.disabled = true; } }
async function connect() {
if (!("serial" in navigator)) {
alert( "このブラウザはWeb Serial APIに対応していません。\n" + "Google Chrome または Microsoft Edge を使用してください。" );
return; }
try {
log("USBデバイスを選択してください...");
port = await navigator.serial.requestPort();
log("USBポートを取得しました。");
await port.open({ baudRate: 115200 });
log("シリアルポートを115200bpsで開きました。");
setConnected(true);
keepReading = true;
readLoop();
} catch (error) {
log("接続エラー: " + error.message);
if (port) {
try { await port.close(); } catch (_) {}
}
port = null;
setConnected(false); } }
async function readLoop() {
while ( port && port.readable && keepReading ) {
try {
reader = port.readable.getReader();
const decoder = new TextDecoder();
while (keepReading) {
const { value, done } = await reader.read();
if (done) { break; }
if (value) {
const text = decoder.decode(value);
log(text); } }
} catch (error) {
if (keepReading) { log( "受信エラー: " + error.message ); }
} finally {
if (reader) {
try { reader.releaseLock(); } catch (_) {}
reader = null; } } } }
async function disconnect() {
keepReading = false;
try {
if (reader) {
await reader.cancel(); reader = null; }
if (port) {
await port.close(); }
} catch (error) {
log( "切断時エラー: " + error.message );
} finally {
port = null;
setConnected(false);
log("USBから切断しました。"); } }
connectButton.addEventListener( "click", connect );
disconnectButton.addEventListener( "click", disconnect );
if ("serial" in navigator) {
navigator.serial.addEventListener( "disconnect", event => {
if (port === event.target) {
keepReading = false; port = null;
setConnected(false);
log( "ATOMS3がUSBから切断されました。" ); } } ); }
log("ATOMS3 USB Connector 起動"); log("USB接続ボタンを押してください。");
