1

このプログラムは、入力を読み取り、Arduinoのシリアルモニターに書き出すことを目的としています。シリアルモニターに1文字しか書き込まないという問題。

void setup()
{
Serial.begin(9600); //Set the serial monitor.
lcd.begin(16, 2); //Set the LCD
}
// Alignment variables
boolean left = true; //Set boolean left to true to begin to display text in middle of screen.
boolean right = false; //Other possible align booleans set to false
boolean select = false;
//Text show/hide variables
boolean show1 = true;  //Both values set to true to display on start up.
boolean show2 = true;
//Serial input
char serialinput [4] = {0}; //For 3 value input, and null character to end.
char line1;
void loop()
 {

 if (Serial.available() > 0) { //If the serial monitor is open it will read a value.
    line1 = Serial.read();
    Serial.print(line1);
    memmove (serialinput, &serialinput[1], 3); //copy the value to memory
    serialinput [2] = Serial.read(); //value is read.
    //if statements for each possible input.

}
4

2 に答える 2

0

line1まで1バイトを読み取り、そのバイトを出力します。行はループなどで印刷する必要があります。また、このコメント:

if (Serial.available() > 0) { 
//If the serial monitor is open it will read a value.

本当に真実ではありません。Serial.available()現在バッファにあるバイト数を返します。したがって、この行は、読み取るものがあることを確認せずにserialinput[2] = Serial.read();呼び出しています。read()どうやら//if statements for each possible input.、の終わりにありloop()ます、これらは何をしますか?serialinput[]特定のバイトのどこに到達するかを表明するロジックはないと思います。ここに投稿されているコードに2バイトより長いメッセージを送信すると、値が上書きされます。

于 2012-12-03T18:30:52.990 に答える
0

Serial.readは、文字列の終わりを待ちません。数文字を読み取ろうとしている場合([4]で示されている)、バッファが文字列を完全にダンプするのに十分な時間を確保するために、serial.readの後に短いdelay()を含めるだけで済みます。

if (Serial.available() > 0) { //If the serial monitor is open it will read a value.
 line1 = Serial.read();
 delay(100);
 Serial.print(line1);
于 2012-12-04T10:45:47.107 に答える