gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:11:36 56 4
gpt4 key购买 nike

目的是在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, "");
}
}
}


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

关于c - 从Serial.readstring()arduino UNO读取时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45788470/

56 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com