0

私のarduinoは、このプログラムに従って出力を提供しています-その一部は

Serial.print("A");
Serial.print(sensorValue);
Serial.print("B");
Serial.println();
Serial.print("C");
Serial.print(sensorValue1);
Serial.print("D");
Serial.println();

arduinoのシリアルモニターでの出力は、C491D A192B C49D A192B C484D A196B C482D A193B C483D A199B C485D A196B C486D A198Bとして表示されます

今私の Node.js は次のコードを実行しています

var cleanData = ""; // this stores the clean data
var cleanData1 = "";
var readData = "";  // this stores the buffer
sp.on("data", function (data) { // call back when data is received
readData += data.toString(); // append data to buffer
// console.log(readData);
// if the letters "A" and "B" are found on the buffer then isolate what"s in the middle
// as clean data. Then clear the buffer.

if (readData.indexOf("D") >= 0 && readData.indexOf("C") >= 0) {
    cleanData1 = readData.substring(readData.indexOf("C") + 1, readData.indexOf("D"));
    readData = "";
    console.log(cleanData1);
   io.sockets.emit("message", cleanData1);
}
else if(readData.indexOf("B") >= 0 && readData.indexOf("A") >= 0)
{
    cleanData = readData.substring(readData.indexOf("A") + 1, readData.indexOf("B"));
    readData = "";
    console.log(cleanData);
    io.sockets.emit("message", cleanData);
}

});

同じことをコンソールで読み取っても、望ましい結果が得られません

コンソールの読み取り値から、読み取り値が希望どおりでないことは明らかです。読み取り値は、4 で始まるものと 1 で始まるものである必要があります。実際には、次のようなコンソールの読み取り値があります。

D A181B C D A181B C D A181B C D A181B C D A181B C

1 つの If ステートメント ブロックをブロックすると、いずれか 1 つのブロックによって示される読み取り値が完全になります。

どこが間違っていますか?

4

1 に答える 1

0

新しいデータを連結しているイベントに表示されますdataが、文字列全体をチェックしています(readData)。したがって、チェックする (cleanData を設定する) たびに、最初から開始し、最初の結果を何度もヒットします。

チャンニングしてみる

readData += data.toString();

readData = data.toString();

このようにして、indexOf と部分文字列の一致は、新しい着信データを調べます。

于 2013-07-27T04:58:32.577 に答える