문제

저는 직렬을 통해 Arduino UNO와 통신하는 Google Chrome 확장 프로그램을 개발 중입니다.나는 다음 함수를 썼다. sendSerialCmd 포트(문자열), serial_cmd(ArrayBuffer) 및 직렬 연결에서 읽어온 readInfo.data(ArrayBuffer)를 전달하는 콜백 함수를 사용합니다.

var CONNECTION_ID = -1;
var sendSerialCmd = function(port, serial_cmd, callback) {
chrome.serial.open(port, null, function(openInfo){
    CONNECTION_ID = openInfo.connectionId;
    if (CONNECTION_ID == -1) {
        console.log('Could not connect to serial');
        return;
    }
    chrome.serial.write(CONNECTION_ID, serial_cmd, function(writeInfo){
        chrome.serial.read(CONNECTION_ID, 8, function(readInfo){
            callback(readInfo.data);
        });
    })
});
chrome.serial.close(CONNECTION_ID, function(result){ console.log(result) });
};

제가 겪었던 문제 중 하나는 chrome.serial.read() 기능.에서 크롬.직렬 API의 세 번째 매개변수는 bytesToRead(정수):읽을 바이트 수, 그러나 내 Arduino에서 들어오는 바이트 수는 변경될 수 있습니다.어떤 때는 8바이트를 얻을 수도 있고 어떤 때는 그 이상을 얻을 수도 있습니다.내 Arduino에서 다시 전송된 모든 바이트를 가져오는 가장 좋은 방법은 무엇입니까?

Arduino는 다음과 같은 기능을 통해 새로운 솔루션을 제공합니다. Serial.available() 읽을 수 있는 바이트 수를 반환합니다.Chrome.serial API로 비슷한 작업을 수행할 수 있나요?

도움이 되었습니까?

해결책

비슷한 기능은 없습니다 Serial.available() Chrome 직렬 API에서 사용할 수 있지만 적절한 수의 바이트를 폴링하고 원하는 속도로 데이터를 처리해야 합니다.

만약 read 1024바이트를 요청했는데 8바이트만 사용할 수 있습니다. read 단 8바이트만으로도 빠르게 성공할 수 있습니다.8바이트 메시지와 12바이트 메시지가 사용 가능한 경우 read 20바이트로 성공하며 결과 데이터를 구문 분석하는 데 필요한 모든 논리를 적용할 수 있습니다.

참고로, 직렬 API는 Canary에서 곧 변경될 예정이며 더 이상 수동으로 폴링할 책임이 없습니다. read.대신 Chrome이 사용자를 폴링하여 실행합니다. chrome.serial.onReceive 오픈 장치에서 이벤트를 데이터로 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top