Comunicazione seriale con arduino [aiuto]

Byte perchè tu invii due valori, la prima è una sola cifra perciò 0-9 e un byte basta e lo metto in variabile funz (potevo chiamarla pippo)
la seconda 00-99 e perciò un byte basta (messo in variabile tempo, secondo le tue indicazioni iniziali)

Poi ho visto oggi che la seconda è a tre cifre perciò tempo deve essere int.

quando spedisci 1230# allora dopo la lettura avrai nel buffer di nome buf[]

buf
[0] = '1'       carattere '1' che nella tabella ascii è il numero 49
[1] = '2'       carattere '2' in ascii 50 
[2] = '3'       carattere '3' in ascii 51
[3] = '0'       carattere '0' in ascii 48
[4] = boh da qui in poi non si sa, ci può essere 0 (valore) o un valore a caso

Per il computer '0' è il valore 48 che stampato a video è il simbolo '0'

Perciò
funz = buf[0] - '0'; ovvero 49-48
tempo= (buf[1]-'0')*100 + (buf[2]-'0')*10 + (buf[3]-'0') * 1; ovvero (50-48)*100 + (51-48)10 + 48-481

E' obbligatorio che vengano inviati sempre 4 cifre e a finire il #
altrimenti quel calcolo sballa. Perciò "010" o "003" e non "10" o "3"
Se il secondo valore non ha dimensione fissa (3 char) allora bisogna usare altra tecnica.

isdigit() è una funzione che ti dice se il carattere è una cifra cioè tra '0' e '9' (tra 48 e 57)
if( isdigit(buf[0]) ) // se la cella 0 di buf contiene una cifra

atoi() converte da stringa a intero (stringa=array o vettori di caratteri con alla fine '\0' o null, NON oggetto String)
val = atoi(buf); // ma buf deve terminare con carattere '\0'