2014-07-25 109 views
4

我有下面這段代碼,我從this forum那裏得到了我遵循的代碼。它沒有爲我工作,但他們聲稱代碼是好的。我已經嘗試了幾種字符串比較方法,如string.equals(string)和標準==運算符,但仍沒有運氣。如何比較Serial.read()中的字符串?

int ledPin = 13; 
String readString; 

void setup() { 
    Serial.begin(9600); 
    pinMode(ledPin, OUTPUT); 
    Serial.println("serial on/off test 0021"); // so I can keep track 
} 

void loop() { 
    while (Serial.available()) { 
    delay(3); 
    char c = Serial.read(); 
    readString += c; 
    } 
    if (readString.length() >0) { 
    if (readString == "on") { 
     Serial.println("switching on"); 
     digitalWrite(ledPin, HIGH); 
    } 
    if (readString == "off") { 
     digitalWrite(ledPin, LOW); 
    } 
    readString=""; 
    } 
} 
+1

你首先必須確保字符串的長度相等,然後才能對它們進行比較。使用delay()非常不可靠,且浪費,請使用特定字符來標記字符串的末尾。像'\ n'一樣。 –

回答

9

我能夠通過在字符串比較之前簡單地添加readString.trim();來解決昨晚的問題。這是因爲會有換行符,其中id不會在arduino控制檯中顯示任何內容。

我把功能如下我的代碼:

int ledPin = 13; 
String readString; 

void setup() { 
    Serial.begin(9600); 
    pinMode(ledPin, OUTPUT); 
    Serial.println("serial on/off test 0021"); // so I can keep track 
} 

void loop() { 

    while (Serial.available()) { 
    delay(3); 
    char c = Serial.read(); 
    readString += c; 
    } 
    readString.trim(); 
    if (readString.length() >0) { 
    if (readString == "on"){ 
     Serial.println("switching on"); 
     digitalWrite(ledPin, HIGH); 
    } 
    if (readString == "off") 
    { 
     Serial.println("switching off"); 
     digitalWrite(ledPin, LOW); 
    } 

    readString=""; 
    } 
} 
+0

+1從串行收集c上的字符,然後將其存儲爲像StringBuilder上的readString。我有一個問題,如果我使用strcmp()或strncmp()來比較字符,它一直告訴我鑄造const char *。 – evanhutomo

4

我只是用' '(單),而不是" "(雙)

char c = Serial.read(); 

if (c == '1'){ //do something} 
-1

解決你的代碼是正確的,你只需要設置Arduino的終端在「無行結束」的時候,你也忘記了寫這個Serial.println(「關掉」);

並感謝您分享您的代碼我也使用您的代碼,謝謝!

1

爲什麼不使用Serial.readString(); ??

試試這個..

 void setup() { 
     pinMode(13, OUTPUT); 
     Serial.begin(9600); 
    } 

    void loop(){ 
     if(Serial.available()){ 
     String ch; 
     ch = Serial.readString(); 
     ch.trim(); 
     if(ch=="on"||ch=="ON"){ 
      digitalWrite(13, HIGH); 
     } 
     else if(ch=="off"||ch=="OFF"){ 
      digitalWrite(13, LOW); 
     } 
     } 
    }