in pratica quello che vuoi fare, se ho capito bene, è che alla pressione di una delle tre opzioni, per esempio la 'a', l'arduino si metta in attesa di un valore diciamo a n cifre (nel tuo caso credo due ma magari anche una soltanto).
Per prima cosa devi quindi gestire una sorta di stato in cui il tuo software passa nel momento in cui riceve il comando 'a' e fino a quando non riceve un carattere di conferma, per esempio 13 che è il codice ASCII del 'return' della tastiera.
Mentre il software si trova in questo stato dovrà accettare i caratteri numerici 0-9 (ASCII da 48 a 57) e magari il carattere di cancellazione (backspace, non ricordo l'ASCII ma a memoria direi l'8 ). Per quanto riguarda i caratteri numerici, per avere la cifra corrispondente ti basta fare n = c - 48; dove c è il carattere ASCII ricevuto sulla seriale e n è la cifra decimale corrispondente.
Purtroppo i metodi indicati da lesto temo non vadano bene. Infatti si riferiscono alla ricezione di dati binari mentre tu invece invii caratteri ASCII e vuoi ottenere non una stringa (il terzo caso da lui proposto) ma l'intero corrispondente. Avevo già proposto una possibile implementazione in questo thread: Inserire una cifra tramite Keypad 4*4 - #3 by vittorio68 - Software - Arduino Forum . Lì i caratteri arrivavano da una tastiera e tu invece li ricevi dalla seriale. Tuttavia, dopo la conversione ASCII/decimale che ti ho indicato, la questione diventa la stessa.
Ricapitolando il codice diventerebbe qualcosa del genere (ti ricordo che non l'ho provato...)
boolean flagmenu = true;
int byteInArrivo = 0; // per iniziare la trasmissione seriale
int serial =0;
void setup( )
{
Serial.begin(9600); // apertura porta seriale, impostazione velocità di
// trasmissione dati a 9600bps
prompt()
}
void loop( )
{
if (Serial.available()>0)
{
byteInArrivo = Serial.read( );
if (flagmenu)
{
switch (byteInArrivo)
{
case 97:
Serial.print("Hai premuto a");
flagmenu=false;
break;
case 98:
Serial.print("Hai premuto b");
// qui chiami la funzione da eseguire quando viene premuto b
break;
case 99:
Serial.print("Hai premuto c");
// qui chiami la funzione da eseguire quando viene premuto c
break;
default:
Serial.print("Comando sconosciuto");
break;
}
delay(2000); // serve per dare 2 secondi di tempo per vedere l'eventuale output della funzione richiesta
// magari è inutile o vuoi sostituirlo con qualcos'altro
prompt();
}
else
{
// qui dovresti inserire il pezzo di codice che gestisce la lettura del parametro partendo dal valore contenuto in byteInArrivo
if (byteInArrivo == 13)
{
// ora una tua variabile conterrà il valore ricevuto dalla seriale
// ritorni nello stato di attesa di un comando
flagmenu = true;
}
}
}
void prompt()
{
Serial.println("\E[H\E[2J" ); //Clear Screen in PuTTY
Serial.println("Scegli tra le seguenti opzioni:");
// perchè le delay? A cosa servono?
//delay(5);
Serial.println("a - Leggi x");
//delay(5);
Serial.println("b - Leggi y");
//delay(5);
Serial.println("c - Leggi z");
//delay(5);
Serial.print("\n");
//delay(5);
}
Non me ne volere... volutamente non ho scritto il pezzo di codice che ricostruisce il valore del parametro per due motivi. Il primo è che richiede un minimo di attenzione in più e magari qualche test. Il secondo è che condivido il suggerimento di leo72. Ho provato a darti qualche spunto ma poi, se vuoi veramente imparare a programmare, l'unico modo che conosco è quello di "perderci le nottate...". Non è mancanza di disponibilità da parte degli amici del forum è solo l'unica strada possibile.
Ciò premesso, se hai ancora altri dubbi, chiedi pure.
Ciao.
Vittorio.