[英]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.