In realtà il LED RGB è formato da 3 LED (Rosso, Giallo, Verde) che hanno 3 cadute di tensione differenti.
LED Rosso = 1.6 v
LED Giallo = 2.2 v
LED Verde = 2.4 v
Per avere la stessa luminosità, proporzionale alla corrente passante, dovrai quindi usare tre resistenze differenti.
La formula è:
R = (Vin - Vled) / I
Per cui, ipotizzando una tensione in entrata di 5 v ed una corrente diciamo di 0.005 A (5 mA) le formule diventano:
LED Rosso Rr = (5 - 1.6) / 0.005 = 820 Ohm
LED Giallo Rg = (5 - 2.2) / 0.005 = 560 Ohm
LED Verde Rv = (5 - 2.4) / 0.005 = 520 Ohm (non esiste un valore commerciale di 520 Ohm, puoi usare una resistenza da 560 Ohm... come esercizio per impratichirti puoi ricalcolare la corrente passante con una resistenza da 560 Ohm per calcolare la differenza)
Tutte resistenze normalissime da 1/4 W.
Questo giusto per fare i perfezionisti.
Per quanto riguarda i pulsanti, entrambi hanno un comune che può essere o positivo (o massa). Dall'altra parte però devo "leggere" da Arduino se è positivo (o massa) quando "chiudo" il pulsante. Sul cavo che "entra" in Arduino per fare la "lettura" devo mettere una resistenza molto grande (10 K Ohm vanno bene) che mi porti a massa (o al positivo) la tensione quando il pulsante non è "chiuso", questo perché potrebbero esserci oscillazioni o qualsiasi tipo di problema. In questo modo quando il pulsante è premuto leggo il positivo (o la massa) e quando è rilasciato leggo la massa (o positivo), questo in maniera stabile.
La resistenza di pull-up o pull-down o la metti esterna oppure puoi attivarla internamente via software come ti è stato spiegato da Guglielmo.
Per quanto riguarda il debouncing si tratta di "leggere" la variazione dello stato del pulsante dopo un certo intervallo di tempo e non in maniera continua, questo perché potrebbero esserci dei "rimbalzi" del pulsante che, letti in maniera continua, potrebbe sembrare come se tu stessi pigiando il pulsante molto velocemente. Di solito se tu leggi lo stato del pulsante ogni 50 mS dovrebbe andare bene come debouncing. Tutto questo via software, oppure esiste il metodo "analogico" che consiste nell'inserire un condensatore tra il cavo da "leggere" e massa da un 0.1 uF per eliminare il debouncing.
Correggetemi pure se sto sbagliando.
