2012-05-04 12 views
5
#include <stdio.h> 

#define LED 13 

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

void loop() { 
    int i; 
    char command[5]; 
    for (i = 0; i < 4; i++) { 
    command[i] = Serial.read(); 
    } 
    command[4] = '\0'; 

    Serial.println(command); 

    if (strcmp(command, "AAAA") == 0) { 
    digitalWrite(LED, HIGH); 
    Serial.println("LED13 is ON"); 
    } else if (strcmp(command, "BBBB") == 0) { 
    digitalWrite(LED, LOW); 
    Serial.println("LED13 is OFF"); 
    } 
} 

से स्ट्रिंग पढ़ने मैं Arduino के सीरियल के साथ एक 4 वर्ण स्ट्रिंग को पढ़ने के लिए कोशिश कर रहा हूँ, और जब यह एक एलईडी, जब यह bbbb धारावाहिक बंद कर देते हैं है पर AAAA बारी है।Arduino सीरियल

हालांकि, जब मैं "एएएए" दर्ज करता हूं तो यह "एएए" को बहुत से "ÿ" के साथ पढ़ता है।

मुझे लगता है कि मैं सब कुछ ठीक से पढ़ रहा हूं, लेकिन यह इतना अच्छा काम नहीं कर रहा है, मैं क्या गलत कर रहा हूं इसका कोई विचार?

+0

पुष्टि करें कि आपके baudrate, दोनों सिरों पर बिट्स बंद करो, प्रवाह नियंत्रण, और समता कर रहे हैं समान:

यहाँ क्या मैं अपने कार्यक्रमों में क्या है। भले ही आप "यह सच है," 3 मिनट लें और इसे सत्यापित करें। अपने आप को घंटे बचाओ। –

+0

क्या आपका 'Serial.begin() 'कोड है? – qwertz

+0

यह 9600 है, मैंने इसे भी पोस्ट किया। –

उत्तर

1
#define numberOfBytes 4 
char command[numberOfBytes]; 

    void serialRX() { 
     while (Serial.available() > numberOfBytes) { 
     if (Serial.read() == 0x00) { //send a 0 before your string as a start byte 
      for (byte i=0; i<numberOfBytes; i++) 
      command[i] = Serial.read(); 
     } 
     } 
    } 
1

आपको जांचना चाहिए कि पढ़ने के लिए कुछ उपलब्ध है। यदि नहीं, तो पढ़ें() वापस आ जाएगा -1। आप पढ़ने वाले बफर को देखने के लिए सीरियल। उपलब्ध() का उपयोग कर सकते हैं।

9
String txtMsg = ""; 
char s; 

void loop() { 
    while (serial.available() > 0) { 
     s=(char)serial.read(); 
     if (s == '\n') { 
      if(txtMsg=="HIGH") { digitalWrite(13, HIGH); } 
      if(txtMsg=="LOW") { digitalWrite(13, LOW); } 
      // Serial.println(txtMsg); 
      txtMsg = ""; 
     } else { 
      txtMsg +=s; 
     } 
    } 
} 
1

यह 'y' पढ़ता बफर में पढ़ने के लिए कोई चार क्योंकि वहाँ। अन्य पात्रों के लिए यूर्ट बफर से अनस्टैक करने में कुछ समय लगता है। तो, आप अक्षर पढ़ने के लिए एक लूप नहीं कर सकते हैं। आपको यह इंतजार करना होगा कि इसे पढ़ने से पहले एक और चरित्र उपलब्ध है।

इसके अलावा, प्रतीक्षा करने वाले पात्रों का यह तरीका सबसे अच्छा तरीका नहीं है क्योंकि यह मुख्य पाश को अवरुद्ध करता है।

String command; 

void loop() 
{ 
    if(readCommand()) 
    { 
     parseCommand(); 
     Serial.println(command); 
     command = ""; 
    } 
} 

void parseCommand() 
{ 
    //Parse command here 
} 

int readCommand() { 
    char c; 
    if(Serial.available() > 0) 
    { 
     c = Serial.read(); 
     if(c != '\n') 
     {  
      command += c; 
      return false; 
     } 
     else 
      return true; 

    } 
}