0

このプログラムは、シリアルポートからArduinoのLCDに、そしてシリアルモニターにテキストを書き込むことを目的としています。ただし、代わりに乱数の長い文字列を出力します。文字を配列に格納する必要があるため、シリアルポートを再度読み取ることなくテキストをLCD内で移動できます(これは後で配置する予定です)。私は何が間違っているのですか?

コードは次のとおりです。

// These are the pins our LCD uses.
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup()
{
    Serial.begin(9600); //Set the serial monitor.
    lcd.begin(16, 2); //Set the LCD
}

char ch;
int index = 0;
char line1[17]; //17 is the max length of characters the LCD can display
char line2[17];
void loop() {
   lcd.setCursor(0,0); //Set the cursor to the first line.
   if( Serial.available() ) { //If the serial port is receiving something it will begin
        index=0;               //The index starts at 0
        do {
            char ch = Serial.read(); //ch is set to the input from the serial port.
            if( ch == '.' ) {        //There will be a period at the end of the input, to end the loop.
                line1[index]= '\0';   //Null character ends loop.
                index = 17;           //index = 17 to end the do while.
            }
            else
            {
                line1[index] = ch;    //print the character
                lcd.print('line1[index]');  //write out the character.
                Serial.print('line1[index]');
                index ++;            //1 is added to the index, and it loops again
            }
        } while (index != '17');  //Do while index does not = 17
    }
}
4

1 に答える 1

2

多くのものを一重引用符で囲んでいますが、次のようにすべきではありません。

  lcd.print('line1[index]');  //write out the character.
  Serial.print('line1[index]');

line1[index]その式の結果が必要なため、これらは両方とも(引用符なしで)する必要があります。

} while (index != '17');  //Do while index does not = 17

これは17、ではなく、である必要があり'17'ます。

--については、ÿ文字255(文字としても表示されます-1)でありSerial.read()、データが不足していて、を返していることを示します-1。シリアルリンクのもう一方の端にあるデバイスは、常にデータの全行を一度に書き込むとは限らないことに注意してください。ほとんどの場合、一度に1文字ずつ細流になります。

于 2012-12-07T20:43:39.787 に答える