![](/img/trans.png)
[英]Serial.println(Serial.available()); changing behavior of Arduino code
[英]How to exit a 'for' loop while serial.available in Arduino
背景:我正在使用的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();
}
String recievedData; //readString
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
recievedData = Serial.readString();//read full recieved data
Serial.println(recievedData);
for (int i = 0; i < 20 && Serial.available() <= 0; i++) {
//Send the temperature, or send a simple message
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.