尝试在 arduino 上使用字符串和串行端口,我的草图出于某种原因跳过了字符

trying to work with strings and serial port on arduino, my sketch skips characters for some reason

我一直在尝试实现我的基于 arduino 的项目和我的电脑之间的串行通信,我需要通过串行向 arduino 发送命令并使用 "if and else" 调用所需的函数(在 parseMessage() 函数中).

我不能使用 delay(),因为我正在使用中断进行多路复用和位角调制,所以我不得不以另一种方式进行串行通信,这是我最接近成功的方法,但我仍然我得到字符滑雪 ps 和一般的不稳定。正如您所知,编码一切都很棒,除非您不知道您的代码有什么问题,所以请帮助我,请互联网之神! ;)

我使用“#”作为字符串清除结尾的原因是我无法确定当 Serial.read() 要求时我发送到 arduino 的命令的所有字符都存在,可能会有更多的方式,因为 atmega328 比串口快 Serial.available() 实际上可能 return -1 在传输过程中。

刚刚设法修复了这段代码,似乎从串行 UART 中清除数据毕竟不是一个好主意。一切都解决了。下面是代码现在的样子:

  void setup() {
      Serial.begin(9600);
    }

    bool dataRTP = false;

    void loop() {
      readSerial();
    }

    char message[64];
    int index = 0;

    void readSerial() {
      if (Serial.available() > 0)
        while (Serial.available() > 0)
          if (Serial.peek() == '#') {
            message[index++] = Serial.read();
            message[index++] = '[=10=]';
            dataRTP = true;
            break;
          }
          else
            message[index++] = Serial.read();
      if (dataRTP)
        parseMessage();
    }

    void parseMessage() {
      Serial.println(message);
      index = 0;
      dataRTP = false;
    }