Arduino Serial.available() 不断增加

Arduino Serial.available() keeps increasing

本文关键字:不断增加 available Serial Arduino      更新时间:2023-10-16

我正在使用Arduino Uno R3,当我通过Serial向GSM盾牌发送AT命令时,我从Serial.available()获得越来越多的数字。

这是我用来调试的示例:

void loop()
{
    Serial.println("AT+CADC?");
    delay(3000);
}
void serialEvent()
{
  char * sensorValue;
  int serial = Serial.available();
  Serial.print("-");
  Serial.print(serial);
  Serial.println("-");
  if(serial >0)
  {
    sensorValue = (char*) malloc(sizeof(char) * (serial +1));
    int i;
    for(i = 0; i < serial; i++)
    {
      sensorValue[i] = Serial.read();
      //Serial.print(sensorValue[i]);
    }
    sensorValue[serial+1] = '';
    Serial.print(sensorValue);
  }
  delay(2000);
}

我从串行监视器得到的结果是:

-

30-

-

63-

-

63-

-

63-

为什么可用的字节数从 30 开始,然后最大为 63?即使我使用 Serial.read() 也会发生这种情况,它应该消耗缓冲区中的数据。

sensorValue[serial+1] = '';
Serial.print(sensorValue);      // <== here

您将收到的任何内容直接发送回调制解调器。 这立即回应了它。 因此,一旦您使用 AT 命令运行它,您将永远循环来回发送相同的字节。 删除 Serial.print() 调用。

我建议您使用软件串行库(SoftwareSerial)并使用它来访问GSM调制解调器,除非GSM调制解调器需要UART或RS-232电平信号。

另一种选择,如果您的大多数工作涉及与调制解调器交谈,则可能是合适的,那就是Arduino Mega 2560。 它有四个硬件串行接口,尽管它没有RS-232输出信号。 为此,您应该能够使用FTDI分线板之一。