la modo0 per prima cosa verifica lo stato del tasto play
poi se è HIGH, cioè premuto, accende tutti i colori
altrimenti (else) li spegne
nello switch rimanda al modo0 se PP è premuto
con questo codice accende e spegne tutti i modox
/*
PeenieLamp v0.6
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 -
modo5 -
ultima modifica 02-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;
int RECV_PIN=12; // pin del ricevitore
int K_MAXMODI=3; //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 = 0 ; //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
///SETUP///
void setup()
{
delay(1000);
Serial.begin(9600);
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, 0);
analogWrite (g1, 0);
analogWrite (b1, 0);
analogWrite (r2, 0);
analogWrite (g2, 0);
analogWrite (b2, 0);
}
///MODALITA'///
void modo0()
{
if (PP==HIGH)
{
analogWrite (r1, lumi);
analogWrite (g1, lumi);
analogWrite (b1, lumi);
analogWrite (r2, lumi);
analogWrite (g2, lumi);
analogWrite (b2, lumi);
Serial.print("Modo:");
Serial.println(modo);
Serial.print("lumi=");
Serial.println(lumi);
delay(500);
}
}
void modo1() {
analogWrite (r1, lumi);
analogWrite (g1, 0);
analogWrite (b1, lumi);
analogWrite (r2, lumi);
analogWrite (g2, 0);
analogWrite (b2, lumi);
Serial.print("Modo:");
Serial.println(modo);
Serial.print("lumi=");
Serial.println(lumi);
delay(500);
}
void modo2 () {
analogWrite(r1,0);
analogWrite(g1,255);
analogWrite (b1,0);
analogWrite(r2,0);
analogWrite(g2,255);
analogWrite (b2,0);
Serial.print("Modo:");
Serial.println(modo);
Serial.print("lumi=");
Serial.println(lumi);
delay(500);
}
void modo3 (){
analogWrite(r1,255);
analogWrite(g1,0);
analogWrite (b1,0);
analogWrite(r2,255);
analogWrite(g2,0);
analogWrite (b2,0);
Serial.print("Modo:");
Serial.println(modo);
Serial.print("lumi=");
Serial.println(lumi);
delay(500);
}
///MAIN LOOP///
void loop() {
if (irrecv.decode(&results)) {
//play/pausa premuto
if(results.value == Kplay) {
if(PP==LOW){
PP=HIGH;
Serial.println("remote: PLAY ACCESO");
}
else {
PP=LOW;
Serial.println("remote: PLAY SPENTO");
}
}
//tasto + premuto
if (results.value == Kpiu && lumi<255){
lumi = lumi+15;
}
//tasto - premuto
if (results.value == Kmeno && lumi>0){
lumi=lumi -15;
}
// tasto << premuto
if (results.value == Krew){
modo = modo-1;
if(modo<0) modo = K_MAXMODI;
}
// tasto>>premuto
if (results.value== Kffw){
modo=modo+1; // puoi anche scrivere: modo++;
if(modo>K_MAXMODI) modo=0;
}
irrecv.resume();
switch (modo) {
case 0:
if (PP==HIGH){
modo0();
}
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();
}
else
{
analogWrite (r1, 0);
analogWrite (g1, 0);
analogWrite (b1, 0);
analogWrite (r2, 0);
analogWrite (g2, 0);
analogWrite (b2, 0);
}
break;
case 2 :
if(PP==HIGH){
modo2();
}
else
{
analogWrite (r1, 0);
analogWrite (g1, 0);
analogWrite (b1, 0);
analogWrite (r2, 0);
analogWrite (g2, 0);
analogWrite (b2, 0);
}
break;
case 3 :
if(PP==HIGH){
modo3();
}
else
{
analogWrite (r1, 0);
analogWrite (g1, 0);
analogWrite (b1, 0);
analogWrite (r2, 0);
analogWrite (g2, 0);
analogWrite (b2, 0);
}
}
}
}