我在我的Arduino上有以下代碼,它不斷檢查通過TCP使用Wifly庫發送的串行命令。Arduino素描 - 閱讀串行字節
什麼下面的代碼不被分裂像字符串以下時通過串行發送:
{power,tv}
它設置這些屬性相應地:
char command[32];
char value[32];
然後,它執行使用sendCommand(command, value);
某些方法基於下面循環中設置的屬性。
請記住,這工作得很好,使用Wifly庫。
void loop() {
Client client = server.available();
if (client) {
boolean start_data = false;
boolean next = false;
char command[32];
char value[32];
int index = 0;
while (client.connected()) {
if (client.available()) {
char c = client.read();
Serial.print(c);
if (c == '}') {
break;
}
if(start_data == true) {
if(c != ',') {
if(next)
value[index] = c;
else
command[index] = c;
index++;
} else {
next = true;
command[index] = '\0';
index = 0;
}
}
if (c == '{') {
start_data = true;
}
}
}
value[index] = '\0';
client.flush();
client.stop();
sendCommand(command,value);
}
}
而不是使用WiFi我已經購買了一些Xbee模塊。他們基本上允許你發送串行字節。唯一的問題是,我不太清楚如何處理循環考慮到沒有while(client.connected())
了。而不是我曾使用while(Serial.available())
認爲這將工作,但它不會因某種原因設置value
屬性。
我得到command
但我沒有得到value
。
此外,我不確定上面的循環是否是做我以後的最佳方式,我所知道的是,它的工作方式很好。 :)
這是我的新的循環,只返回command
,而不是value
出於某種原因:
void loop() {
// if there are bytes waiting on the serial port
if (Serial.available()) {
boolean start_data = false;
boolean next = false;
char command[32];
char value[32];
int index = 0;
while (Serial.available()) {
char c = Serial.read();
Serial.print(c);
if (c == '}') {
break;
}
if(start_data == true) {
if(c != ',') {
if(next)
value[index] = c;
else
command[index] = c;
index++;
} else {
next = true;
command[index] = '\0';
index = 0;
}
}
if (c == '{') {
start_data = true;
}
}
value[index] = '\0';
sendCommand(command,value);
}
}
如果新的循環以下工作,我會很高興!
void sendCommand(char *command, char *value) {
// do something wonderful with command and value!
}