Con i led RGB puoi fare tanti effetti e trovare la tua sfumatura preferita, quello che ti occorre è uno sketch che ti permetta di modificare il valore associato ad ogni colore e dei pulsanti che ti consentano di memorizzare il colore nel tuo sketch.
Ecco il progetto di oggi.
Nell’articolo precedente: Tutorial: arduino, led rgb e potenziometri hai potuto realizzare un controllo RGB per il tuo led con soli due potenziometri, l’inconveniente è che il potenziometro B imposta il valore sia del colore verde sia di quello blu.
Un altro inconveniente è che il colore varia al variare della posizione del potenziometro, per cui non puoi toccare il potenziometro dopo la sua regolazione altrimenti il gioco finisce.
Aggiungeno 3 pulsanti, 3 resistenze da 10KΩ e questo sketch le cose cambiano.
/* * Sketch Led RGB e potenziometri * * @author: Alfieri Mauro * @see: https://www.mauroalfieri.it * * @licenze: Creative common */ int ledR = 9; int ledG = 10; int ledB = 11; int potA = A5; int potB = A4; int butR = 6; int butG = 7; int butB = 8; void setup() { pinMode(ledR,OUTPUT); pinMode(ledG,OUTPUT); pinMode(ledB,OUTPUT); pinMode(butR,INPUT); pinMode(butG,INPUT); pinMode(butB,INPUT); Serial.begin(9600); } void loop() { int valA = map(analogRead(potA),0,1023,0,255); int valB = map(analogRead(potB),0,1023,0,255); Serial.print(" Button R: "); Serial.print( digitalRead(butR) ); Serial.print(" Button G: "); Serial.print( digitalRead(butG) ); Serial.print(" Button B: "); Serial.print( digitalRead(butB) ); if (digitalRead(butR) == 1) { analogWrite(ledR,valA); } if (digitalRead(butG) == 1) { analogWrite(ledG,valB); } if (digitalRead(butB) == 1) { analogWrite(ledB,valB); } Serial.print(" Potenziometro A: "); Serial.print( valA ); Serial.print(" Potenziometro B: "); Serial.println( valB ); delay(500); }
Vediamo cosa accade:
E se sei curioso di capire come funziona leggi a desrizione dello sketch.
Rispetto allo sketch presentato nell’articolo precedente ci sono alcuni piccoli cambiamenti, inizia dalle
linee 17-19: in cui definisci 3 nuove variabili, sempre di tipo integer come le altre presenti, a ciascuna di esse associ il pin digitale a cui hai collegato un pulsante. Ogni pulsante ha il suo effetto su un colore, ad es.: se al pin 6 di arduino colleghi il pulsante con cui vuoi agire sul colore rosso, allora 6 deve essere il valore della variabile butR. Stesso discorso per gli altri 2 pulsanti;
linee 27-29: anche queste sono nuove, rispetto al precedente sketch, il loroscopo è informare arduino che i pin definiti come butR, butG e butB sono da utilizzare come INPUT;
linee 39-44: ti servono per visualizzare nel monitor seriale il valore letto con la funzione digitalRead(pin) dove pin è sostituito con i valorei delle variabili butR, butG e butB;
Nota Bene: il valore restituito dalla funzione digitalRead(pin) può essere 0 o 1, 0 quando il pulsante non è premuto in quanto la corrente transita attraverso al resistenza di 10KΩ verso il polo negativo facendo rilevare ad arduino un segnale pari a 0 ( <5v ) e sarà 1 alla pessione del pulsante in quanto questo commuterà a +5v il corrispondente pin di arduino;
Fatta questa premessa passiamo alle linee successive:
linee 46-48: sono tutte identiche fatto salvo la loro influenza su pin differenti sia in lettura che in scrittura. In particolare la condizione di if verifica il valore restituito dalla funzione digitarRead() e se tale valore è 1 invia al pin corrispondente il valore letto sul potenziometro e mappato da 0 a 255. Normalmente il valore letto sui tre pin connessi ai pulsanti è 0 (vedi Nota Bene) alla pressione di uno di essi il corrispettivo valore letto è 1 che verifica la condizione presente nell’if e attua l’effetto desiderato sul pin PWM corrispondente.
Il funzionamento è abbastanza semplice, il video dovrebbe averti già chiarito tutto, qualora non ti fosse chiaro puoi scrivermi commentando questo articolo.
Buon divertimento.
10 commenti
Vai al modulo dei commenti
premetto che sono un ragazzino ma in questo progetto dato che la combinazione pulsante potenziometro modifica il colore invece di mettere 2 potenziometri non conveniva metterne uno soltanto ???
Autore
Non è importante che età hai o quanta conoscenza, siamo tutti quì per condividere, la tua idea potrebbe essere ottima, se hai già realizzato questo sketch puoi inviarlo e condividerlo con tutti.
Mauro
Non riesco capire come modificare il programma, allora ti do
> l’allegato sketch_buttons se tu puoi sistemare il programma per
> aggiungere: timer per spegnere il display, e due potenziometri uno
> che regola la velocità di scorrimento ed un secondo che regola solo
> il tempo.
> Scusami ti chiedo di aiutarmi perchè che so sei esperto e l’unico
> per me che può aiutarmi. grazie. Cordiali saluti
Mi hai chiesto:
1. il display deve spegnersi dopo un tempo predefinto ed accenderersi in quale occasione?
Quando una persona suona campanello o chiama al tefono o altro
2. il potenziometro regola quale velocità di scorrimento?
lo scorrimento dell’avviso quando suona es: il campanello
3. che range in secondi vuoi poter regolare con il potenziometro che spegne il display?
per quanto tempo deve scorrere l’avviso es: per 1 minuto o 2 minuti.
Autore
Ciao Francesco,
inviami il codice e la descrizione a mezzo email alla casella info del blog.
Proverò a farti un preventivo per le modifiche di cui hai bisogno.
Mauro
Scusa l’ignoranza, ma al posto dei pulsanti non conviene aggiungere un altro potenziometro, cosi da averne uno per fase? Io ho fatto cosi e non noto differenze con quello con i pulsanti.
Autore
Ciao Emanuele,
alcuni miei esperimenti sono puro esercizio di stile e la pubblicazione di una delle possibili soluzioni sw.
Se hai trovato una soluzione alternativa è un ottimo risultato e certamente ne esistono altre più o meno performanti.
Premetto che son nuovo in materia.. ho bisogno di fare impianto per non udente usando uno schema simile all’esempio.. cioè X ogni singolo evento, associare un colore. Al posto dei pulsanti mi occorre un microfono, un sensore di movimento è un sensore di vibrazioni… qualcuno può aiutarmi per realizzazione e soprattutto sketch?
Grazie
Autore
Ciao Davide,
puoi usare tutti gli articoli e le mie spiegazioni linea per linea per capire come assemblare lo sketch che ti occorre.
Lascio il tuo commento on-line per consentire a chi lo desidera di aiutarti.
Premesso che sono un neofita e che sto seguendo questo corso per imparare, volevo chiedere perchè nel setup non sono stati dichiarati i pin di “pota” e “potb” come input?
Autore
Ciao Andrea,
da un punto di vista formale sarebbe stato opportuno dichiararli, tuttavia essendo un potenziometro un sensore in grado di restituire sempre il valore di riferimento avendo sia un collegamento al Gnd sia uno al positivo è possibile ometterlo.