繁体   English   中英

从Serial.readstring()arduino UNO读取时出现问题

[英]Trouble Reading from Serial.readstring() arduino UNO

目的是在COM端口中输入“ on”和“ off”并切换引脚13。无论我做什么。 它不会打开或关闭。 需要帮忙。 我试图查看我输入的字符串是否为“ on”。 它打印“开”,但是当我检查结果时,它显示出不同的结果。 怎么了?

String SData;
String SData1;
 void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(13,OUTPUT);
digitalWrite(13,HIGH);
delay(5000);
digitalWrite(13,LOW);
delay(1000); 
 }

 void loop() {
// put your main code here, to run repeatedly:
while(Serial.available()==0)
{

}
SData=Serial.readString();
SData1="on";
if(SData==SData1)
Serial.print("Same");
else
{
Serial.print("Different");
// Serial.print(SerialData-SerialData1);
Serial.print(".");
}
if(SData=="on")
  {
  digitalWrite(13,HIGH);

  Serial.println("LED ON");
  delay(2000);
  }
Serial.println(SData);
if(SData=="off")
 {
  digitalWrite(13,LOW);
  Serial.println("LED OFF");
  delay(2000);
 }
SData="";
}

不要使用字符串,而是使用char数组。 我可以建议一个函数,您可以在其中设置分隔符以在提供终止符时终止字符串或超时。

bool read_string_until (char *data, 
                        const unsigned int length, 
                        const unsigned long timeout_period, 
                        const char terminator) {

  unsigned int index = 0;
  unsigned long start_time = millis();

  while (index < length) {
    /* check if time is up */
    if (millis() - start_time >= timeout_period) {
       return false;  // no data in timeout period
    }

    /* if data, add to buffer */     
    if (Serial.available() > 0) {
      char r = Serial.read();
      if (r == terminator) {
        data [index] = 0;  // terminating null byte
        DBG_MSG("Command complete");
        return true;
      }
        data [index++] = r;
    }  
  }  
  return false;  // filled up without terminator
}


void loop() { 

  if(Serial.available()) {
    char msg[64] = {0};

    /* Capture the incoming message */
    if (read_string_until(msg, sizeof(msg), 500, '!')) 
    {
      DBG_MSG_VAL("Rx: ", msg, "");
    }
  }
}

也许您以后可以使用这些即将来临的消息作为命令进行进一步解析,方法是使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM