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

Sto provando a leggere una stringa di 4 caratteri con Arduino's Serial, e quando è AAAA accendi un LED, quando è BBBB disattiva la seriale.Arduino stringa da seriale

Tuttavia, quando inserisco "AAAA", legge "AAAÿ" con un sacco di "ÿ" lungo la strada.

Penso di leggere tutto correttamente, ma non funziona così bene, nessuna idea di cosa sto facendo male?

+0

Verificare che il baud rate, bit di stop, controllo di flusso, e la parità sono identici su entrambe le estremità. Anche se "sai che è vero", prendi i 3 minuti e verificalo. Risparmia ore. –

+0

Qual'è il tuo codice 'Serial.begin()'? – qwertz

+0

È 9600, l'ho anche pubblicato. –

risposta

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

È necessario verificare se è disponibile qualcosa da leggere. In caso contrario, il read() restituirà -1. È possibile utilizzare Serial.available() per verificare il buffer di lettura.

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

Si legge 'ÿ' perché non c'è char di leggere nel buffer. Ci vuole del tempo perché gli altri personaggi si disimpegnino dal buffer di uart. Quindi, non puoi fare un ciclo per leggere i caratteri. Devi aspettare che un altro personaggio sia disponibile prima di leggerlo.

Inoltre, questo modo di attendere i caratteri non è il modo migliore perché blocca il ciclo principale.

Ecco quello che faccio nei miei programmi:

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; 

    } 
} 
Problemi correlati