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 :)

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

Serial.read()返回单个字节(作为int)。您正在尝试将其分配给 char 数组。

你不能那样做。您可以将某些内容分配给数组 的特定元素:line1[0] = 'c'; 例如,但您不能分配给数组本身。

好像你在找Serial.readBytes()

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

看起来像:

Serial.readBytes(line1, 5);

在您的情况下,5缓冲区(数组)的长度在哪里。这会将(最多)5 个字节读入您的line1缓冲区。

编辑补充:话虽如此,看来 arduino 的“C-Like”语言与 C 非常相似,因为它期望“字符串”(char数组)null在将它们传递给Serial.print(). 上面的建议并没有做到这一点,实际上会导致问题。

您需要做的是读取比数组长度少一个字节,然后null使用实际读取的字节数终止“字符串”,这就是bytesRead()返回给您的字节数(数组索引为零):

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

选项 B 就像我最初提到的那样做,但line1使用索引从数组中循环并一次打印一个字节:

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 回答