2

文字配列を初期化しようとしていますが、整数と文字を混在させることができないため、できないというエラーが表示されますが、整数は初期化されていません。

前もって感謝します

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

 char line1 [5] = {0};
 char line2 [] = {0};

 void loop()
 {
     if (Serial.available() > 0) { //If the serial monitor is open it will read a value.
         line1 = Serial.read();
         delay(10);
         Serial.print(line1);
         lcd.print(line1);
     }
 }
4

1 に答える 1

5

私はarduinoの男ではありませんが、昨夜GoogleにアクセスできるHoliday Innに泊まりました:)

http://arduino.cc/en/Serial/Read

Serial.read()1 バイトを ( としてint) 返します。それをchar配列に割り当てようとしています。

そんなことはできません。 たとえば、配列 の特定の要素に何かを割り当てることはできますが、配列自体に割り当てることはできません。line1[0] = 'c';

探しているようですSerial.readBytes()

http://arduino.cc/en/Serial/ReadBytes

次のようになります。

Serial.readBytes(line1, 5);

あなたの場合5、バッファ(配列)の長さはどこですか。line1これにより、(最大で) 5 バイトがバッファー に読み込まれます。

追加する編集:そうは言っても、arduinoの「Cライク」言語は、「文字列」(char配列)をnullに渡すときに終了することを期待しているという点で、Cに非常に似ているようSerial.print()です。上記のアドバイスはそれを行わず、実際には問題を引き起こします。

あなたがする必要があるのは、あなたの配列の長さより1バイト少ないものnullを読んでから、あなたに返されるものである実際に読み取られたバイト数を使って「文字列」を終わらせることbytesRead()です(配列はゼロインデックスです):

int numBytesRead = 0;
...
numBytesRead = Serial.readBytes(line1, 4);
line1[numBytesRead] = '\0';  
Serial.print(line1);

オプション B は、最初に述べたように実行することですがline1、インデックスを使用して配列から一度に 1 バイトずつループして出力します。

int numBytesRead = 0;
numBytesRead = Serial.readBytes(line1, 5);
int i;
for (i = 0; i < numBytesRead; i++) {
    Serial.print(line1[i]);
}

ドキュメントによるとSerial.print()、単一のバイト/文字が渡されたときに送信することを自動的に認識します。

于 2012-12-05T21:10:41.730 に答える