2017-08-21 133 views
0

目標是在COM端口輸入「on」和「off」,並切換引腳13.無論我做什麼。它不會打開或關閉。需要幫忙。我試圖看看我輸入的字符串是否「打開」。它打印「開」,但當我檢查結果時,它顯示出不同的結果。哪裏不對?從串口讀取問題()arduino UNO

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=""; 
} 
+0

https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in- java – clabe45

+1

@ clabe45除了Arduino沒有使用Java編程,而是C++的一個簡化變體。 –

+0

哦,我的壞檢查Arduino論壇https://arduino.stackexchange.com/ – clabe45

回答

-1

不要使用字符串,而應使用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, ""); 
    } 
    } 
} 

可能是你以後可以使用這些oncomming消息爲進一步解析命令,使用