Question

Je travaille sur une extension Google Chrome qui communique avec un Arduino UNO via série.J'ai écrit la fonction suivante sendSerialCmd qui prend un port (chaîne), un serial_cmd (ArrayBuffer) et une fonction de rappel qui est transmise à readInfo.data (un ArrayBuffer) qui est lu à partir de la connexion série.

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

L'un des problèmes que j'ai rencontré est le troisième paramètre transmis au chrome.serial.read() fonction.Dans le chrome.série API, le troisième paramètre est le octetsToRead ( entier ):Le nombre d'octets à lire, cependant, le nombre d'octets provenant de mon Arduino est susceptible de changer.Parfois, je peux obtenir 8 octets, d'autres fois plus.Quelle est la meilleure façon de renvoyer tous les octets de mon Arduino ?

Arduino propose une nouvelle solution grâce à une fonction appelée Série.disponible() qui renvoie le nombre d'octets disponibles en lecture.Puis-je faire quelque chose de similaire avec l'API Chrome.serial ?

Était-ce utile?

La solution

Il n'existe pas de fonctionnalité similaire à Serial.available() dans l'API série Chrome, mais vous devez simplement interroger un nombre raisonnable d'octets et traiter les données à votre rythme.

Si un read est demandé pour (disons) 1024 octets et seulement 8 octets sont disponibles, le read devrait quand même réussir rapidement avec seulement 8 octets.Si un message de 8 octets et un message de 12 octets sont disponibles, le read réussira avec 20 octets et vous pourrez appliquer toute la logique nécessaire pour analyser les données résultantes.

Pour information, l'API série va bientôt changer dans Canary et vous ne serez plus responsable de l'interrogation manuelle avec read.Au lieu de cela, Chrome interrogera pour vous et déclenchera chrome.serial.onReceive événements car les données sont disponibles à partir d’un appareil ouvert.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top