Sto cercando di realizzare una battaglia navale con una matrice led di 34 per 34. Non ho problemi nella gestione della matrice, ma nel riconoscimento delle coordinate inviate ad Arduino...
Sul monitor seriale ricevo dei dati tipo 24 - 27 dove 24 rappresenta la coordinata del led sull'asse x e 27 rappresenta la coordinata del led sull'asse y. Il problema è che non so come distinguere un dato dall'altro (24 da 27). Grazie mille a chi vorrà aiutarmi!
Ma il protocollo di trasmissione lo decidi tu?
Nel caso, la cosa più semplice è spedire 2 byte, il primo indica la coordinata X ed il secondo la coordinata Y. Così non hai da fare neanche le conversioni.
non solo hai trasmesso più byte del necessario (che fondamentalmente in un'applicazione del genere chissene), ma sei incappato in una bastardata della seriale.
se a priori hai estrapolato il buffer della seriale andando a caccia di "\0", ed elaborando pezzo per pezzo, ok, funziona, altrimenti rischi:
che per ora sia giunta solo parte dell'input via seriale, quindi x e y prendono valori più o meno casuali, sempre che non si impalli la sscanf
che hai più coordinate in inp: in questo caso credo che estrapoli solo la prima occorrenza
il codice di leo invece sfrutta una delle "debolezze" della seriale, ovvero di poter leggere (in modo bloccante) solo un byte alla volta, per superare questi problemi che richiederebbero una stesura di codice "inutile", oltre che a risparmiare qualche byte di banda.
Certo che siete veramente bravi a complicare una cosa semplice
Basta spedire tre byte consecutivi, il primo contiene un valore/carattere che è diverso dal range dei dati, in questo caso da 1 a 34, p.e. utilizziamo 0xff (255), a seguire i due byte dei valori.
Chi riceve non deve fare altro che ascoltare in attesa di 0xff, tutto quello che arriva prima di questo valore è da ignorare.
Non appena si riceve 0xff si acquisiscono i due byte seguenti che sono i nostri valori e il ciclo riparte, si può anche prevedere un eventuale time out per la ricezione dei due byte dati.
Protocollo semplicissimo, leggero, facile da gestire, affidabile quanto basta.
Dovrei chiarire quel "in ogni caso..." la sopra con un "se ti capitasse qualche altra volta di dover estrarre valori numerici da una stringa composta, (anche se in questo caso il problema si risolve per tutt'altra via), si fa così...".
Ciao