2012-05-04 5 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"); 
    } 
} 

から文字列を読んで、それはそれはBBBBはシリアルをオフにしているLED、上のAAAAターンがあるとき。Arduinoのは、私はアルドゥイーノのシリアルと4文字の長い文字列を読み取ろうとする、としていますシリアル

しかし、「AAAA」と入力すると、途中で「ÿ」がたくさんある「AAAÿ」と読み込まれます。

私はすべてを正しく読んでいると思っていますが、うまくいきません。私が間違っていることを考えていますか?

+0

ことを確認します。あなたが「それが本当であることを知っていても」、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

あなたが読むことができるものがあるかどうかを確認する必要があります。そうでない場合、のread()は-1を返します。 Serial.available()を使用して、読み取りバッファをチェックすることができます。

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」を読み込みます。他の文字がUARTバッファからアンスタックするまでには時間がかかります。だから、文字を読むためのループはできません。あなたはそれを読む前に別のキャラクターが利用できるのを待たなければなりません。

また、この待機文字は、メインループをブロックするため、最善の方法ではありません。ここで

は、私は私のプログラムの中で何をすべきかです:あなたのボーレート、ストップビット、フロー制御、およびパリティが両端に同じです

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; 

    } 
} 
関連する問題