我可以使用两个单独的按钮(onclick)分别读取和写入串行端口。现在我尝试写入串行端口,当单击按钮从同一端口读取值('请发送文件')时。下面是我的代码,它显示错误
TypeError:无法在“UnderlyingSinkBase”上执行“write”:提供的值不是“(ArrayBuffer 或 ArrayBufferView)”类型。
未捕获(承诺中)类型错误:无法在“ReadableStream”上执行“pipeTo”:无法通过管道传输锁定的流。
navigator.serial.requestPort().then(async (port) => {
await port.open({ baudRate: 115200 });
// Reading port //
while (port.readable) {
const textDecoder = new TextDecoderStream();
const readableStreamClosed = port.readable.pipeTo(textDecoder.writable);
const reader = textDecoder.readable.getReader();
try {
while (true) {
const { value, done } = await reader.read();
if (done) {
break;
}
if (value) {
document.getElementById('log').innerHTML += value + "<br/>";
if(value.includes('Please send the file')){
var arr=[];
// Getting file to be sent //
var oReq = new XMLHttpRequest();
oReq.open("GET", "uart_rx_test2.bin", true);
oReq.responseType = "arraybuffer";
oReq.onload = function (oEvent) {
var arrayBuffer = oReq.response; // Note: not oReq.responseText
if (arrayBuffer) {
var byteArray = new Uint8Array(arrayBuffer);
arr = byteArray;
}
};
oReq.send(null);
// 写入端口 //
const writer = port.writable.getWriter();
await writer.write(arr);
}
}
}
} catch (error) {
console.log(error)
}
}
}).catch((e) => {
console.log(e)
});