Arduino ricezione da seriale e confronto dati

Ciao a tutti,
ho un piccolo problema nella ricezione di stringhe su arduino. Se ricevo solo un carattere tutto funziona come previsto, se invece devo riceverne più di uno e fare il confronto tra stringhe non mi funziona.

il codice che ho scritto è questo

byte rx = 0; 
int uscita1 = 4;

void setup()
{

  Serial.begin(9600);
  Serial.println("Seriale 1");
  pinMode(uscita1, OUTPUT);
}

void loop()
{
    if (Serial.available())
   {
      rx = Serial.read();  
    Serial.flush();  
      if (rx == 'A20AB')
          {
             digitalWrite(uscita1,HIGH);
             Serial.println("uscita attivata");
          }
   }}

Come posso fare a ricevere e inserire tutto in un unica stringa per poi fare il confronto?

Grazie :smiley:

Devi concatenare in una stringa tutti i byte letti da serial.read.
Il codice che hai fatto prende solo un byte dalla seriale, e poi svuota il buffer, per cui se invii la stringa A20AB rx contene solo la lettera A.

int inByte = 0;        
char myCmd[128];
int inputSize=0;

void setup()
{
 Serial.begin(9600);
 Serial.println("Ready:");
}

void loop()
{
 inputSize=0;
 if (Serial.available() > 0) 
{
   delay(300);
   inputSize = Serial.available();
   Serial.print("inputSize=");
   Serial.println(inputSize);

   for (int i = 0; i < inputSize; i++)
  {
     myCmd[i] = Serial.read();
   }
   Serial.print("I received: ");
   Serial.println(myCmd);
 }
}

Ma per concatenare i dati devo leggerli uno alla volta e metterli un un vettore
quindi dovrei fare un ciclo, vedere quanti dati contiene la seriale e inserirli uno alla volta in un vettore attraverso un ciclo for?

si vedi sopra

ho capito, un'altra piccola cosa :slight_smile:

quando vado a fare l'if devo scrivere
if (myCmd == "11")
o in un altro modo? perchè ho provato e non mi funziona

myCmd è un array .

qui bisogna vedere da quanti caratteri è composta la tua stringa di input
se sei sicuro che siano sempre 2 cifre allora prendi

if (myCmd[0] == "1")
if (myCmd[1] == "1")

scusa mi correggo le " " non ci vanno

if (myCmd[0] == '1')
if (myCmd[1] == '1')
if (myCmd == '11')

Grazie mille, funziona! :slight_smile:

pablos71:
if (myCmd == '11')

questo è errato.

puoi usare la strcmp, del c ANSI ne libreria string.h