1

Arduino コードで Serial.read() コマンドに問題があります。LEDに接続された2つの74HC595のシフトレジスタに接続しています。

Serial データがあるかどうかを確認し、2 バイトを読み取ります。次に、これらのバイトを両方をシフトアウトするメソッドに渡します。Serial.printでバイトをチェックしてシリアルモニターに出力すると、たとえば取得できます

49
255
50
255

arduino.cc のドキュメントを読んだところ、2 つの 255 を取得したのはなぜですか。1 バイトしか読み取れないと書かれています。何か案は?

最終的な目標は、シリアル ラインで 2 バイトを読み取り、シフト レジスタの IE にシフト アウトすることです。10 進数の 5 と 6 のバイト値が渡されます。最初の 3 番目の LED が 1 つのシフト レジスタで点灯し、次に 2 番目と 3 番目がシフト レジスタで点灯します。その他のシフトレジスタ

const int dataPin = 8;
const int latchPin = 9;
const int clockPin = 10;

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    byte low = Serial.read();
    byte high = Serial.read();
    Serial.println(low);
    Serial.println(high);
    sendBytes(low,high);
  }
}

void sendBytes(byte l, byte h) {
  digitalWrite(latchPin,LOW);
  shiftOut(dataPin,clockPin,MSBFIRST,l);
  shiftOut(dataPin,clockPin,MSBFIRST,h);
  digitalWrite(latchPin,HIGH);
}
4

2 に答える 2

7
    if (Serial.available() > 0) {
            byte low = Serial.read();
            byte high = Serial.read();
            //...

これはコードのバグです。トリップする可能性が非常に高く、シリアルポートはそれほど高速ではありません。Serial.available() が 1 しか返さない可能性が非常に高いです。下位バイトは問題なく読み取れますが、読み取るデータがない場合、Serial.read() は -1 を返します。これにより、Highは 0xff に等しくなります。簡単な修正は次のとおりです。

    if (Serial.available() >= 2)
于 2013-07-09T12:32:00.890 に答える