Buongiorno a tutti
da buon utente neofita di Arduino (da circa un mese), mi sono messo in testa di farmi la classica lampada rgb telecomandata con Apple Remote.
Dopo varie letture e configurazioni suggerite ho optato per comandare le strip rgb(anodo comune) con 1 ULN2003 (allego schema Fritzing, per schemi con Eagle devo ancora capire :D).
Considerato che non mi piace avere la pappa pronta ho scritto un pò di codice che compila, ma non funziona come dovrebbe.
Il codice che allego non è completo delle funzionalità che vorrei per la lampada, ma per gestire meglio il tutto faccio delle prove in corso d'opera per verificarne il funzionamento e correggere eventuali errori.
Ecco lo sketch
/*
PeenieLamp v0.1
Lampada RGB con telecomando Apple
Codici Apple Remote
+ 2011287595
- 2011279403
<< 2011238443
play pause 2011242539
>> 2011291691
menu 2011250731
tenuti premuti 4294967295
° Play/Pause accende e spegne
° "+" e "-" regolano luminosità
° "<<" e ">>" Cambiano modalità
° "menu" luce bianca
Modalità:
0 - luce bianca
1 - Dissolvenza
2 - Arcobaleno
3 -
4 -
5 -
ultima modifica 02-05-2012
*/
#include <IRremote.h>
int r1=3; //pin dei colori
int g1=5;
int b1=6;
int r2=9;
int g2=10;
int b2=11;
int RECV_PIN=12; // pin del ricevitore
IRrecv irrecv(RECV_PIN);
decode_results results;
int PP = 0 ; //conteggio di quanto volte è stato premuto "Play/Pausa"
int lumi = 100; //luminosità iniziale
int modo = 0; // inizio da modo 0
int passo=3; //aumento per cambio colori
int vel=10; //velocità cambio colori
///SETUP///
void setup()
{
irrecv.enableIRIn();// attiva il ricevitore
pinMode (r1,OUTPUT);
pinMode (g1,OUTPUT);
pinMode (b1,OUTPUT);
pinMode (r2,OUTPUT);
pinMode (g2,OUTPUT);
pinMode (b2,OUTPUT);
analogWrite (r1, lumi);
analogWrite (g1, lumi);
analogWrite (b1, lumi);
analogWrite (r2, lumi);
analogWrite (g2, lumi);
analogWrite (b2, lumi);
}
///MODALITA'///
void modo0(){
analogWrite (r1, 255);
analogWrite (g1, 255);
analogWrite (b1, 255);
analogWrite (r2, 255);
analogWrite (g2, 255);
analogWrite (b2, 255);
}
void modo1() {
for (int fadevalue=0; fadevalue<= lumi; fadevalue +=5){
analogWrite (r1, fadevalue);
analogWrite (g1, fadevalue);
analogWrite (b1, fadevalue);
analogWrite (r2, fadevalue);
analogWrite (g2, fadevalue);
analogWrite (b2, fadevalue);
delay(50);
}
for ( int fadevalue=lumi;fadevalue>=0; fadevalue -=5){
analogWrite (r1, fadevalue);
analogWrite (g1, fadevalue);
analogWrite (b1, fadevalue);
analogWrite (r2, fadevalue);
analogWrite (g2, fadevalue);
analogWrite (b2, fadevalue);
delay(50);
}
}
void modo2 () {
for (int L=0;L<256;L+=passo) {
analogWrite(r1,255-L);
analogWrite(g1,L);
delay(100);
}
for (int L=0;L<256;L+=passo) {
analogWrite(g1,255-L);
analogWrite(b1,L);
delay(100);
}
for (int L=0;L<256;L+=passo) {
analogWrite(b1,255-L);
analogWrite(r1,L);
delay(100);
}
}
///MAIN LOOP///
void loop() {
if (irrecv.decode(&results)) {
//play/pausa premuto
if(results.value == 2011242539) {
if(PP==LOW){
PP=HIGH;
}
else {
PP=LOW;
}
}
//tasto + premuto
if (results.value ==2011287595 && lumi<240){
lumi=lumi +20;
}
//tasto - premuto
if (results.value == 2011279403 && lumi>0){
lumi=lumi -20;
}
// tasto << premuto
if (results.value==2011238443){
if(modo>0) {
modo =modo-1;
}
else{
modo = 2;
}
}
// tasto>>premuto
if (results.value== 2011238443){
if(modo <2){
modo = modo +1;
}
else{
modo = 0;
}
}
irrecv.resume();
}
switch (modo) {
case 0:
if (PP==HIGH){
analogWrite (r1, lumi);
analogWrite (g1, lumi);
analogWrite (b1, lumi);
analogWrite (r2, lumi);
analogWrite (g2, lumi);
analogWrite (b2, lumi);
}
else {
analogWrite (r1, 0);
analogWrite (g1, 0);
analogWrite (b1, 0);
analogWrite (r2, 0);
analogWrite (g2, 0);
analogWrite (b2, 0);
}
break;
case 1:
if(PP==HIGH){
modo1();
}
break;
case 2 :
if(PP==HIGH){
modo2();
}
break;
}
}
Il problema è che dopo aver premuto i tasti per la luminosità si impalla tutto il sistema, inoltre non riesco a gestire le varie modalità di accensione della lampada.
Sono sicuro di aver commesso un sacco di errori ed infatti vi chiedo aiuto e suggerimenti per l'avanzamento del mio progetto.
Avrei anche bisogno di qualche idea per giochi di luci da implementare nella lampada :D.
Insomma mi farebbe piacere completarla con il vostro aiuto e la vostra esperienza.
Andrea