【问题标题】:I can not send consecutive data from the serial port我无法从串口发送连续数据
【发布时间】:2019-12-21 22:31:30
【问题描述】:

我想从串口发送连续的数据。但是串口在发送第一个数据后不接收第二个数据。如果我停止并重新启动它,它工作正常。这是我的代码:

String inputString="";
boolean stringComplete=false;

void serialEvent() {
  while(Serial.available()) {
    char inChar=(char) Serial.read();
    inputString+=inChar;
    if(inChar=='\n') {
      stringComplete=true;
    }
  }
}

void setup() {
  Serial.begin(9600);
  inputString.reserve(200);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
}

void loop() {
  serialEvent();
  if(stringComplete) {
    Serial.println(inputString);
    inputString="";
    stringComplete=false;
  }
  if(inputString=="HELLO") {
    digitalWrite(12, HIGH);
    serialEvent();
  } else if(inputString=="WORD") {
    digitalWrite(13, HIGH);
    serialEvent();
  }
}

对于电路和仿真: https://tinkercad.com/things/6fTYYBc3w0e

【问题讨论】:

  • 对不起,你是对的。我想,一定是C++。
  • 实际上它看起来更像 Java。 c/c++ 中没有“布尔”,也没有字符串。尽管它们存在于 java 中,
  • 我认为这是 Java。请正确指定语言。
  • 它不再包含任何语言信息。
  • @Serge 这不是 Java,而是 Arduino 的 C++。

标签: c++ arduino serial-port


【解决方案1】:

您正在比较字符串,而 inputString 在可以使用之前设置为空字符串。 将字符串比较放在 if(stringInput) 块中。此外,您需要在比较中包含换行符。

void loop() 
{
   serialEvent();

   if(stringComplete)
   {
        Serial.println(inputString);
        if(inputString=="HELLO\n")
        {
           digitalWrite(12,HIGH);
           serialEvent();
        }
        else if(inputString=="WORD\n")
        {
           digitalWrite(13,HIGH);
           serialEvent();
        }

        inputString="";
        stringComplete=false;
   }
}

【讨论】:

  • 我试试这个。我开了两盏灯。我明白:'/n' 不起作用。如果我写 if(inChar=="O") {stringComplete=true} 程序正在运行。
  • 它是 '\n' 而不是 '/n'.. 还要检查实际的行尾字符是什么。可能是 \r、\r\n 或 \n,具体取决于系统、设置、终端程序等。
  • 我打错了。我的意思是说'\n'已经不起作用了。 \r、\r\n 也是如此。谢谢。
  • 我会尝试调试并将所有接收到的字符作为数字值发送回串行端口。然后使用 ascii 图表找出您检查的实际最后一个字符是什么,然后检查该值而不是字符。
  • 非常感谢。这行得通。我有点晚了,但谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 2020-05-18
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多