Lettura virgola seriale

Ciao ragazzi, sto facendo il mio primo programmino. Per partire dalla base (devo fare un programma un po' complicato) sto cercando di individuare una virgola nel carattere che scrivo. Il codice che ho scritto è questo :

char virgola = ',';
void setup() {
  
  Serial.begin(2400);

}

void loop() {
  
  if (Serial.available()>0)
  {
      Serial.println("Disponibile");
      
      if (Serial.read()==virgola)

            Serial.println("Virgola");

  }
  
}

Quando apro il monitor seriale ed invio 1,23 il risultato che ottengo è : Disponibile Disponibile Virgola Disponibile Disponibile

Perciò mi viene tutto slittato di uno; qualcuno mi potrebbe spiegare il perchè? Grazie e spero di non rompere troppo :)

Non viene slittato, semplicemente "Disponibile" viene stampato per ogni carattere ricevuto, quindi una prima volta per l'1 e una seconda per la virgola stessa.

Succede così perché il programma che ha scritto scrive sempre "disponibile", poi, nel caso in cui legga ',' allora scrive " virgola". Per fare una cosa migliore puoi usare una if leggo virgola allora scrivo virgola. Ed una else allora scrivo "disponibile"

ciao...esattamente per quanto detto da SukkoPera potresti gestire il tutto con un if-else:

  if (Serial.available() > 0) {
    if (Serial.read() == virgola) {
      Serial.println("virgola");
    }
    else {
      Serial.println("disponibile");
    }
  }

ORSO2001: ciao...esattamente per quanto detto da SukkoPera potresti gestire il tutto con un if-else:

  if (Serial.available() > 0) {
    if (Serial.read() == virgola) {
      Serial.println("virgola");
    }
    else {
      Serial.println("disponibile");
    }
  }

Grazie a tutti, ho fatto un erroraccio. Sto facendo un programma che mi serve individuare la virgola per poi separare i dati che invio sulla seriale (invio 12,34) vorrei solo (34). Ovviamente quello che ho fatto non funziona hahah

char virgola = ',';
int elemento = 0;
char Letto[3];
int Dato = 1;

void setup() {
   Serial.begin(2400);
}

void loop() {

  if(Serial.available()>0)
  {
    char c = Serial.read();
    if (c == virgola)
    {
      Serial.println("Virgola");
      Dato = 2;
    }
  if(Dato == 2)
  {
    Letto[elemento]=Serial.read();
    elemento++;
  }
  if(elemento==3)
  {
    Serial.println(Letto);
  }
    
  }
  
}

Sul monitor seriale se invio 12,34 leggo ; Virgola ⸮⸮⸮ Non ho idea del perchè -.-

a me non piace com'è impostato ma, seguendo il tuo ragionamento, quello che dovresti fare è:

char virgola = ',';
int elemento = 0;
char Letto[3];
boolean ok = false;

void setup() {
  Serial.begin(9600);
}

void loop() {

  if (Serial.available() > 0)
  {
    char c = Serial.read();
    if (ok == true) {
      Letto[elemento] = c;
      elemento++;
    }
    if (c == virgola) {
      ok = true;
    }
    if (elemento == 2) {
      Serial.println(Letto);
      ok = false;
      elemento = 0;
    }
  }
}

l'ordine con cui si verificano ed eseguono le azioni è importante.... ATTENZIONE: il mio baudrate è 9600...

Beh, scusate, un consiglio: per imparare meglio a capire come funzionano certe cose di base (ma non solo) e per fare un debugging più comodo perché non provare a usare TinkerCad circuits (ex Autodesk 123d circuits)?

Dopo essersi registrati (gratuitamente), si crea un circuito con Arduino, si scrive (o copia/incolla) il codice, lo si "carica" e poi si può fare debug, con tanto di breakpoint e possibilità di vedere il contenuto delle variabili!

Nel tuo caso, comunque, ti conviene accumulare TUTTI i caratteri che ricevi dalla seriale, fino a che non ricevi un Invio ("\n") ed a quel punto ti analizzi la stringa così ricevuta alla ricerca della virgola, separi i dati e poi ci fai quello che vuoi