ho un bel problema che non so come risolvere…
in pratica sono riuscito a fare una lista di ben 189 colori rgb scritti in esadecimale del tipo #RRGGBB
Dovrei quindi far accendere il led rgb secondo quei colori, mandandone uno alla volta con una pausa…
per questo motivo dovrei usare un convertitore da esadecimale a decimale, e l’ho fatto. ecco il convertitore:–>
L'elenco dei colori ce l'hai sul PC e vuoi spedire la combinazione RGB ad un Arduino via seriale per far accendere un led?
Se è così, devi spedire 3 byte, ogni byte contiene il valore di un canale colore. Ad esempio, $FF0000 corrisponde ad un rosso acceso, devi spedire $FF, $00 e $00. Lato seriale leggi 3 byte, ed usi direttamente il byte senza riconvertirlo ma come valore da usare nell'analogWrite del corrispondente canale colore.
Probabilmente non sa come gestire il protocollo di trasmissione tra pc e Arduino, aspettiamo suoi chiarimenti sulla domanda.
In tutti i casi è inutile convertire l'esadecimale in decimale, infatti basta usare direttamente i valori in arrivo sulla seriale, inviati come unsigned char (byte) e non come array di char (stringa), e darli in pasto direttamente all'analogwrite come giustamente suggerisci.
Scusate la tarda risposta...
allora no...le cose stanno così:
io non voglio inviare tramite seriale il codice....devo direttamente scriverli nello sketch
e cmq non posso scrivere per ogni codice il valore hex separato cioè: XRR,XGG,XBB perchè i codici sono troppi :fearful:
quindi la seriale non mi serve....ma se è l'unica soluzione magari usando un software a parte allora la userò
Se per "tanti" intedi che puoi saturare la memoria, allora vedo 2 soluzioni:
1) li salvi su una EEPROM esterna da cui poi li leggi
2) li salvi su una schedina SD
Sia nel 1° che nel 2° caso li memorizzi sempre in formato R/G/B, quindi 3 byte distinti. Ed in entrambi i casi necessiti comunque di HW aggiuntivo
no no sono solo 189...non penso sia troppo grande...
cmq partiamo dal fatto ke non posso memorizzarli in 3 byte distinti perchè ci metterei troppo tempo
quindi volevo solo sapere se si poteva memorizzare ogni codice in un array e poi selezionando il vettore lo mando al convertitore che ho fatto
igor97:
no no sono solo 189...non penso sia troppo grande...
cmq partiamo dal fatto ke non posso memorizzarli in 3 byte distinti perchè ci metterei troppo tempo
Non riesco a capire dove sta il problema, sempre tre valori devi inserire, ovvero tre byte per ogni colore, li metti tutti in fila in un array di 567 elementi e li leggi tre per volta assegnando la terna di valori alle relative AnalogWrite per ottenere il colore desiderato.
Salvali come stringa usando PROGMEM per poterli gestire direttamente in Flash.
L'alternativa è farsi un array di byte, per risparmiare memoria (189*3=567 celle di memoria),però considera che in fase di runtime ti verrebbe caricato in memoria, occupandoti diverso spazio.
Quella lista non puoi memorizzarla direttamente nello sketch in nessun modo, devi comunque scriverla a mano isolando i vari valori, puoi anche lasciarli direttamente in esadecimale, ovvero devi fare una cosa del genere:
… allora era mooolto complicato sopratutto quando volevi fare l’animazione di uno sprite… disegnare e mettere in codice i vari fotogrammi con i movimenti .