如何在Arduino中的serial.available中退出'for'循环

dig*_*ack 1 c for-loop arduino xbee

背景:我正在使用的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");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Han*_*ant 5

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();
}
Run Code Online (Sandbox Code Playgroud)