0

我可以使用两个单独的按钮(onclick)分别读取和写入串行端口。现在我尝试写入串行端口,当单击按钮从同一端口读取值('请发送文件')时。下面是我的代码,它显示错误

  1. TypeError:无法在“UnderlyingSinkBase”上执行“write”:提供的值不是“(ArrayBuffer 或 ArrayBufferView)”类型。

  2. 未捕获(承诺中)类型错误:无法在“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)

});

 
4

0 回答 0