Tutorial: arduino, led rgb, potenziometri e pulsanti

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.

Led RGB due potenziometri e dei pulsanti

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.

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/tutorial-arduino-led-rgb-potenziometri-pulsanti.html

10 commenti

Vai al modulo dei commenti

    • Filippo il 12 Giugno 2012 alle 15:13
    • Rispondi

    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 ???

    1. 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

    • Francesco il 24 Gennaio 2014 alle 18:43
    • Rispondi

    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.

    1. 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

    • Emanuele il 20 Febbraio 2015 alle 20:18
    • Rispondi

    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.

    1. 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.

    • Davide il 27 Settembre 2018 alle 21:41
    • Rispondi

    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

    1. 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.

    • Andrea il 24 Aprile 2020 alle 02:27
    • Rispondi

    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?

    1. 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.