1

使用我当前的代码一次读取一个字符,因此将两个单独行的串行读取作为一个大输入读取。这会导致两条线都写在我的 Arduino 上的 LCD 显示屏的同一行上。有没有办法让空字符或换行符让这些输入写在不同的行上?

编辑:对不起,我应该指定输入文本的长度是可变的。

这是我的 Arduino 代码:

     #include <LiquidCrystal.h>
     #include <string.h>

    // These are the pins our LCD uses.
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    // initalize the lcd, and button input at zero.
    int lcd_key     = 0;
    int adc_key_in  = 0;

    void setup()
    {
     Serial.begin(9600); //Set the serial monitor.
     lcd.begin(16, 2); //Set the LCD
    }
    char line1;
    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);

  }
}
4

2 回答 2

1

当 LCD 初始化时,我猜它的默认位置是 0,0(即第一行和第一列)。然后对于从串行输入读取的每个字符,将其打印到 LCD 上,并增加列。如果输入中有换行符,则将 LCD 位置重置为 1,0(即第二行和第一列)。继续阅读和打印。


示例伪代码:

int current_line = 0;
int current_col = 0;

void loop(void)
{
    char ch = read_char_from_serial();

    if (ch == '\n')
    {
        current_line++;
        current_col = 0;
    }
    else
    {
        lcd_goto(current_line, current_col++);
        lcd_put_char(ch);
    }
}
于 2012-12-06T12:55:24.657 回答
0

LCD 在连续地址处为第一行和第二行提供缓冲区,具体取决于 LCD 型号(通常每行 40 或 64 个字符)您可以为第一行发送固定数量的字符,用空格右填充,然后是第二行. 例子:第一行<30个空格>第二行

您可能还需要设置 LCD (lcd.begin) 不滚动显示)

于 2012-12-06T12:58:59.650 回答