Ciao,
Ho un problema a livello software... Via seriale io vorrei selezionare un valore (es. se scrivo 1 viene selezionato 1) e lì ci sono... Ma vorrei anche attribuire valori ad esso, esempio: se scrivo 1, 255 o 2, 300, a 1 viene attribuito 255 e a 2 viene attribuito 300. Quindi, in poche parole mi serve un codice in grado di leggere stringhe inviate tramite seriale e interpretarle... Spero di essermi spiegato, grazie in anticipo.
Francesco
ciao fmattiussi,
ci sono diversi modi per gestire questa cosa...dipende anche da come invierai i tuoi dati...uno alla volta...tutti assieme?...qual'è il range di valori possibili?...frequenza invio?
poi altra cosa...chi invierà questi registro/valore? una latro arduino? via monitor seriale?
ci deve essere un qualche "handshaking" o comunque conferma di cos'è stato inviato per essere sicuri di aver passato il valore corretto?
fmattiussi:
... Quindi, in poche parole mi serve un codice in grado di leggere stringhe inviate tramite seriale e interpretarle...
Solo per eviare futuri malintesi e fraintendimenti ...
... ti rammento il punto 16.1 (ed anche il 16.13) del REGOLAMENTO ... questo per chiarire che qui NON ti verrà "fornito" il codice già pronto, ma ti si aiuterà a correggere il codice che TU scriverai ![]()
Guglielmo
ORSO2001:
ciao fmattiussi,ci sono diversi modi per gestire questa cosa...dipende anche da come invierai i tuoi dati...uno alla volta...tutti assieme?...qual'è il range di valori possibili?...frequenza invio?
poi altra cosa...chi invierà questi registro/valore? una latro arduino? via monitor seriale?
ci deve essere un qualche "handshaking" o comunque conferma di cos'è stato inviato per essere sicuri di aver passato il valore corretto?
Allora io invierò la stringa una alla volta (tipo 1, 20 e poi una tipo 1,50). Il range è da 0 a 255. e non c'è frequenza, perchè verranno inviati ed interpretati istantaneamente. Il valore verrà inviato tramite monitor seriale, non mi serve una conferma.
Per rispondere a gbp01: non cerco un codice già pronto ma solo alcune dritte, o consigli, come li vuoi chiamare tu.
Il problema non è molto compleso, quindi senza servirti il codice per darti modo di migliorare le tue conoscenze, ti posso suggerire di guardare tra gli esempi dell'IDE legati alla seriele (Communication), ma al posto di utilizzare la classe String che su piccole MCU non è il massimo puoi iniziare devinendoti un array di 6 caratteri dove andrai a inserire i valori della seriale, una volta letti puoi trasformarli in numeri (per la precisione in byte nel tuo caso) con la funzione atoi del C.
Butta giù del codice e poi man mano arriverai alla soluzione, da solo o con l'aiuto del forum
Concordo con l'ultimo suggerimento, anche se preferirei un metodo più veloce che, legge un byte alla volta.
Il programma diventerebbe più complicato, ma così esprimibile
Leggo la seriale (1 carattere alla viltà, senza controllo sul loro numero)
Se esso corrisponde a separatore una booleana cambia di stato (usato come selettore tra 2)
Se non corrisponde a separatore, ma a cifra (quindi il separatore non deve essere una cifra) il numero contenuto in un array di 2 int di lettura (indice e valore) nel posto corrispondente al valore della boolean, aumenta (lettura[boolean]=lettura[boolean]*10+rx-'0')
Se non corrisponde a cifra si fa un altro test, che rende più complicata la comunicazione: se coincide con un carattere di stop
Se si allora array [lettura[0]]=lettura[1] e boolean=0. Fine lettura
Se no... Errore
Vantaggio: il programma continua ad agire anche in presenza di seriale