gpt4 book ai didi

c - 如何在 Arduino 中串行可用时退出 'for' 循环

转载 作者:太空宇宙 更新时间:2023-11-04 01:05:40 25 4
gpt4 key购买 nike

背景:我正在使用 XBee与 PC 和 XBee + Arduino(也是传感器)相连。我想从 PC 向 Arduino 端发送命令。 Arduino 端将获取命令并发送传感器数据。

现在的问题是:我希望 Arduino 继续发送数据(当前传感器数据 - 因此它的值可能会改变),如果没有来自 PC 端的命令,假设发送 20 次。我的意思是,如果在发送了 5 个传感器数据后,Arduino 发现有来自 PC 的另一个命令,它必须停止发送传感器数据;它将从 PC 获取新命令,读取它,然后再次开始发送。

我的要求是Arduino收到PC端的命令后,会发送传感器数据,并会持续发送20次,但在此期间,如果有新的命令到来,它会停止发送传感器数据,将读取命令然后再次开始发送传感器数据 20 次。如何编写代码,使其在每个循环中检查是否有来自 PC 的任何命令?

我知道下面的代码离我要找的还远:

void loop()
{
while (Serial.available()) {
delay(2);
char c = Serial.read();
readString += c;
}
if (readString.length() >0) {
Serial.println(readString);
for (int i=0; i<20; i++) {
//Send the temperature, or send a simple message
Serial.println("The command has been received");
}
}
}

最佳答案

while 循环和 delay() 调用没有帮助。假设 PC 发送 START 命令以启用温度采样,并发送 STOP 命令停止更新它们。您需要一个 bool 变量来指示状态。像这样:

bool sendTemperatures;
String readString;

void executeCommand(String cmd)
{
if (cmd == "START") sendTemperatures = true;
else if (cmd == "STOP") sendTemperatures = false;
// etc...
else Serial.println("Bad command");
}

void checkSerial()
{
if (!Serial.available()) return;
char c = Serial.read();
if (c == '\n') {
executeCommand(readString);
readString = "";
}
else readString += c;
}

void sendSensorData()
{
// etc..
}


void loop()
{
checkSerial();
if (sendTemperatures) sendSensorData();
}

关于c - 如何在 Arduino 中串行可用时退出 'for' 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23874911/

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