Domanda

Sto lavorando su un'estensione di Google Chrome che comunica con un Arduino Uno sopra seriale. Ho scritto la seguente funzione sendSerialCmd che prende una porta (stringa), un serial_cmd (arraybuffer) e una funzione di callback che viene superata readinfo.data (un arraybuffer) che viene letto dalla connessione seriale.

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) });
};
.

Uno dei problemi che ho incontrato è il terzo parametro passato alla funzione chrome.serial.read(). In Chrome.Seriale API, il terzo parametro è il Bytestoread (Integer): il numero di byte da leggere , tuttavia, il numero di byte che entrano dal mio Arduino sono soggetti a modifiche. A volte posso ottenere 8 byte, altre volte di più. Qual è il modo migliore per rimandare tutti i byte dal mio Arduino?

Arduino ha una nuova soluzione attraverso una funzione chiamata seriale.available () che restituisce il numero di byte disponibili da leggere. C'è qualcosa di simile che posso fare con l'API cromato.Seriale?

È stato utile?

Soluzione

Non vi è alcuna funzionalità simile a Serial.available() nell'API seriale cromata, ma dovresti semplicemente sondaggio per un numero ragionevole di byte ed elaborare i dati al proprio ritmo.

Se viene richiesto un read (per esempio) 1024 byte e sono disponibili solo 8 byte, il read dovrebbe ancora avere successo rapidamente con solo 8 byte.Se c'è un messaggio a 8 byte e un messaggio a 12 byte disponibile, il read avverrà con 20 byte e puoi applicare qualsiasi logica è necessaria per analizzare i dati risultanti.

FYI, l'API seriale sta cambiando presto in canarino e non sarà più responsabile del polling manuale con read.Invece Chrome sonda per te e il fuoco chrome.serial.onReceive Events poiché i dati sono disponibili da un dispositivo aperto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top