Sto provando a fare tutte le modifiche ma c'è sempre qualcosa che sbaglio, con questo codice ad esempio non si spegne più
/*
PeenieLamp v0.1b
Lampada RGB con telecomando Apple
Codici Apple Remote
+ 2011287595
- 2011279403
frw 2011238443
play pause 2011242539
ffw 2011291691
menu 2011250731
tenuti premuti 4294967295
° Play/Pause accende e spegne
° "+" e "-" regolano luminosità
° "<<" e ">>" Cambiano modalità
° "menu" luce bianca
Modalità:
modo0 - Bianco
modo1 - Viola
modo2 - Verde
modo3 - Rosso
modo4 - Blu
modo5 - Blinky
modo6 - Fade
ultima modifica 03-05-2012
*/
#include <IRremote.h>
const byte r1=3; //pin dei colori
const byte g1=5;
const byte b1=6;
const byte r2=9;
const byte g2=10;
const byte b2=11;
const byte RECV_PIN=12; // pin del ricevitore
byte fade = 5;
const byte K_MAXMODI=6; //costante per i modi
///Costanti per codici ricevitore
const unsigned long Kpiu = 2011287595;
const unsigned long Kmeno = 2011279403;
const unsigned long Krew = 2011238443;
const unsigned long Kplay = 2011242539;
const unsigned long Kffw = 2011291691;
const unsigned long Kmenu = 2011250731;
IRrecv irrecv(RECV_PIN);
decode_results results;
int PP = LOW ; //conteggio di quanto volte è stato premuto "Play/Pausa"
int lumi = 255; //luminosità iniziale
int modo = 0; // inizio da modo 0
int passo=3; //aumento per cambio colori
int vel=10; //velocità cambio colori
unsigned long previousMillis=0;
///SETUP///
void setup()
{
delay(1000);
Serial.begin(9600);
irrecv.enableIRIn();// attiva il ricevitore
pinMode (r1,OUTPUT);//definisce i pin come output
pinMode (g1,OUTPUT);
pinMode (b1,OUTPUT);
pinMode (r2,OUTPUT);
pinMode (g2,OUTPUT);
pinMode (b2,OUTPUT);
}
void StampaModo()
{ Serial.print("Modo:");
Serial.println(modo);
Serial.print("lumi=");
Serial.println(lumi);
}
///MODALITA'///
void Spegni()
{
analogWrite (r1, 0);
analogWrite (g1, 0);
analogWrite (b1, 0);
analogWrite (r2, 0);
analogWrite (g2, 0);
analogWrite (b2, 0);
Serial.println("SPENTO");
}
void modo0(){
analogWrite (r1, lumi);
analogWrite (g1, lumi);
analogWrite (b1, lumi);
analogWrite (r2, lumi);
analogWrite (g2, lumi);
analogWrite (b2, lumi);
StampaModo();
}
void modo1() {
analogWrite (r1, lumi);
analogWrite (g1, 0);
analogWrite (b1, lumi);
analogWrite (r2, lumi);
analogWrite (g2, 0);
analogWrite (b2, lumi);
StampaModo();
}
void modo2 () {
analogWrite(r1,0);
analogWrite(g1,lumi);
analogWrite (b1,0);
analogWrite(r2,0);
analogWrite(g2,lumi);
analogWrite (b2,0);
StampaModo();
}
void modo3 (){
analogWrite(r1,lumi);
analogWrite(g1,0);
analogWrite (b1,0);
analogWrite(r2,lumi);
analogWrite(g2,0);
analogWrite (b2,0);
StampaModo();
}
void modo4 (){
analogWrite(r1,0);
analogWrite(g1,0);
analogWrite (b1,lumi);
analogWrite(r2,0);
analogWrite(g2,0);
analogWrite (b2,lumi);
StampaModo();
}
void modo5(){
analogWrite (r1, lumi);
analogWrite (g1, lumi);
analogWrite (b1, lumi);
analogWrite (r2, lumi);
analogWrite (g2, lumi);
analogWrite (b2, lumi);
StampaModo();
}
void modo6()
{
analogWrite (r1, lumi);
analogWrite (g1, lumi);
analogWrite (b1, lumi);
analogWrite (r2, lumi);
analogWrite (g2, lumi);
analogWrite (b2, lumi);
StampaModo();
}
///MAIN LOOP///
void loop() {
if (irrecv.decode(&results)) {
//play/pausa premuto
if(results.value == Kplay) {
if(PP==LOW){
PP=HIGH;
Serial.println("ACCESO");
}
else {
PP=LOW;
}
}
//tasto + premuto
if (results.value == Kpiu && lumi<255){
lumi = lumi+15;
delay(30);
}
//tasto - premuto
if (results.value == Kmeno && lumi>0){
lumi=lumi -15;
delay(30);
}
// tasto << premuto
if (results.value == Krew){
modo = modo-1;
if(modo<0) modo = K_MAXMODI;
if(modo<5) lumi=255;
if(modo==5) lumi=255;
if(modo==6) lumi=0;
}
// tasto>>premuto
if (results.value== Kffw){
modo=modo+1; // puoi anche scrivere: modo++;
if(modo>K_MAXMODI) modo=0;
if(modo<5) lumi=255;
if(modo==5) lumi=255;
if(modo==6) lumi=0;
}
irrecv.resume();
if (PP==HIGH){
switch (modo) {
case 0:
modo0();
break;
case 1:
modo1();
break;
case 2:
modo2();
break;
case 3:
modo3();
break;
case 4:
modo4();
break;
} // END switch
} //END if
unsigned long currentMillis = millis();
switch(modo)
// queste modalità sono eseguite in base al tempo della millis (per animazioni dei led)
if(PP==HIGH){
{ case 5: // blinky
if(currentMillis - previousMillis > 1000L) // ogni secondo 1000L=1 sec
{ previousMillis = currentMillis;
PP=!PP;
if(PP==false)
Spegni();
else
modo0();
}
break;
case 6: // fade
if(currentMillis - previousMillis > 100) // ogni 0,1 sec
{ previousMillis = currentMillis;
lumi=lumi+fade;
if(lumi==0 || lumi==255) fade=-fade;
modo0();
}
break;
} // end switch
} // END loop
}
}
Persistono i problemi di prima, ma riuscirò a sistemarli