質問

arduino UNOを介して通信するGoogle Chrome拡張機能に取り組んでいます。次の関数sendSerialCmdを、シリアル接続から読み込まれたReadInfo.Data(ArrayBuffer)が渡されるポート(文字列)、serial_cmd(ArrayBuffer)、およびCallback関数を作成します。

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

私が稼働した問題の1つは、chrome.serial.read()関数に渡された3番目のパラメータです。 chrome.Serial API、3番目のパラメータはです。 ByTestOread(整数):を読み込むバイト数は、私のArduinoから来るバイト数は変更されることがあります。時々私は8バイト、他の時間もっと得るかもしれません。私のArduinoから返送されたすべてのバイトを取得する最善の方法は何ですか?

Arduinoは、 syrial.available()と呼ばれる関数を介して新しいソリューションを持っています読み取り可能なバイト数。 Chrome.Serial APIでできることが似たものはありますか?

役に立ちましたか?

解決

Chrome Serial APIのSerial.available()と同様の機能はありませんが、妥当なバイト数を調整して自分のペースのデータを処理するだけです。

readが(言う)1024バイト、8バイトしか使用できない場合、readは依然として8バイトですぐに成功する必要があります。8バイトのメッセージと12バイトのメッセージがある場合は、readが20バイトで成功し、結果のデータを解析するために必要なロジックを適用できます。

FYI、シリアルAPIはカナリアですぐに変化しており、readで手動でポーリングする責任がなくなります。代わりに、Chromeはあなたのためにポーリングし、データがオープンデバイスから入手可能であるため、chrome.serial.onReceiveイベントを発表します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top