Go Down

Topic: Lampada RGB con Apple Remote (Read 5281 times) previous topic - next topic

peenieman

:D:D:D
tralasciavo gli "errori"

l'ora tarda, i led negli occhi  :) :P
Il fare è il miglior modo d'imparare

peenieman

Oggi ho fatto un pò di modifiche , ho cambiato qualche modo() e tolto le funzioni che mi aveva dato nid69ita riguardo alla millis(devo ancora capirle :)) che non riuscivo a fare funzionare.
Cmq per oggi mi ritengo soddisfatto, ho capito qualcosina in più :)
allego lo sketch ultimo :D
Il fare è il miglior modo d'imparare

nid69ita

Prova a leggere questo:  blink led senza delay(), usando millis()
http://arduino.cc/en/Tutorial/BlinkWithoutDelay
my name is IGOR, not AIGOR

peenieman

Letto e riletto, ma ancora non capisco come integrarlo al meglio.
Il fare è il miglior modo d'imparare

nid69ita

E allora questo (in italiano) dovrebbe chiarirti la millis()
http://www.leonardomiliani.com/2013/programmiamo-i-compiti-con-millis/

dal sito dell'admin @leo72      :smiley-mr-green:
my name is IGOR, not AIGOR

peenieman

  :) grazie per il link
Oggi faccio qualche prova con la millis, in effetti nel mio codice quei delay rallentano il tutto.
Il fare è il miglior modo d'imparare

peenieman

Dopo un bel pò di prove sono arrivato alla conclusione di non aver capito niente sulla millis,
o meglio, in uno sketch semplice e con un colore solo riesco a fargli fare l'effetto fade, ma quando provo a farlo tra tutti i colori non riesco.
inoltre non riesco ad integrare nel codice della lampada l'effetto fade di un colore solo.
Mi sa che dovrò studiare di brutto :):):)
Il fare è il miglior modo d'imparare

peenieman

Anche oggi ho fatto un bel pò di prove e forse qualcosa in più ho capito, anche se ci sono moooolte cose che non mi sono chiare, questo è quello che sono riuscito a fare con due colori(ne ho definiti 3 già in partenza)
Code: [Select]
const byte r1=5;        //pin dei led
const byte g1=9;
const byte b1=6;
byte lr1=0;            // imposto i led         
byte lg1=0;
byte lb1=0;
unsigned long previousMillisr=0;  //ricorda l'ultimo lampeggio
unsigned long previousMillisg=0;
unsigned long previousMillisb=0;
int fade=5;
//int fade1=10;
void setup(){
  pinMode (r1,OUTPUT);
  pinMode (g1,OUTPUT);
  pinMode (b1,OUTPUT);
}//fine setup

void loop(){
  unsigned long currentMillis =millis();

  if (currentMillis - previousMillisr > 100){
    previousMillisr = currentMillis;
    lr1=lr1+fade;
    analogWrite(r1,lr1);   
    if (lr1==0||lr1==255) fade=-fade;  }//fine if
     
  if (previousMillisr - previousMillisg > 100){
    previousMillisg = currentMillis;
    lg1=lg1-fade;   
    analogWrite(g1,lg1);   
    if (lg1==0||lg1==255)  fade=+fade;
  }//fine if
   
/* if (currentMillis - previousMillisb > 300){
    previousMillisb = currentMillis;
    lb1=lb1+fade;   
    if (lb1==0||lb1==255)  fade=-fade;
    analogWrite(b1,lb1);  }//fine if*/
   
}// fine loop


per tre colori non riesco a capire come fare, potreste postarmi un esempio di "rainbow" con 3 colori così magari capisco i miei errori :D
Il fare è il miglior modo d'imparare

peenieman

continuo a fare prove ma proprio non riesco a fare un "rainbow" senza delay :(
a dire il vero non mi è riuscita bene neanche quella perchè dopo il primo giro si ferma :(
Il fare è il miglior modo d'imparare

peenieman

In questi giorni mi sono dedicato poco alla mia lampada, e quel poco non è stato molto produttivo nel senso che per ora non metterò un'opzione per un "rainbow" ma solo colori fissi, proprio non riesco con la millis a fare un fade con i tre colori.
Per ora mi accontento così, in futuro vedrò di aggiornare il software (cioè dopo un bel pò di studio :))

per chi fosse interessato lo sketch è questo
Code: [Select]
/*
                 PeenieLamp v0.2e
Lampada RGB con telecomando Apple

Codici Apple Remote  DEC/HEX
+ 2011287595 / 77E1D02B
- 2011279403 / 77E1B02B
frw 2011238443 / 77E1102B
play pause 2011242539 / 77E1202B
ffw 2011291691 / 77E1E02B
menu 2011250731 / 77E1402B
tenuti premuti 4294967295 / FFFFFFFF

° Play/Pause accende e spegne
° "+" e "-" regolano luminosità
° "<<" e ">>" Cambiano modalità


Modalità:
modo0 - Bianco
modo1 - Rosso
modo2 - Verde
modo3 - Blu
modo4 - Giallo
modo5 - Viola
modo6 - Azzurro

ultima modifica 17-05-2012 h23:00
*/
#include <IRremote.h>

const byte r1=5;         //pin dei colori
const byte g1=6;
const byte b1=9;

const byte RECV_PIN=12;   // pin del ricevitore

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;

boolean PP  = false;  //conteggio di quanto volte è stato premuto "Play/Pausa"
int lumi = 255;    //luminosità iniziale
int modo = 0;    // inizio da modo 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);

}

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);

}

void modo0()
{
 analogWrite (r1, lumi);
 analogWrite (g1, lumi);
 analogWrite (b1, lumi);

 StampaModo();
}

void modo1 ()
{
 analogWrite(r1,lumi);
 analogWrite(g1,0);
 analogWrite(b1,0);
 StampaModo();
}
void modo2 ()
{
 analogWrite(r1,0);
 analogWrite(g1,lumi);
 analogWrite(b1,0);
 StampaModo();
}

void modo3 ()
{
 analogWrite(r1,0);
 analogWrite(g1,0);
 analogWrite(b1,lumi);
 StampaModo();
}

void modo4(){
  analogWrite(r1,lumi);
 analogWrite(g1,lumi);
 analogWrite(b1,0);

 StampaModo();
 }
 
void modo5()
{
  analogWrite(r1,lumi);
 analogWrite(g1,0);
 analogWrite(b1,lumi);
 StampaModo();
}

void modo6()  
{
 analogWrite (r1,0);
 analogWrite (g1, lumi);
 analogWrite (b1, lumi);
 StampaModo();
}

///MAIN LOOP///

void loop()  
{
 if (irrecv.decode(&results))
 {
   switch(results.value)
   {
   case Kplay:  //play/pausa premuto
     if(PP==false)
     {
       PP=true;
       Serial.println("ACCESO");
     }
     else  
     {
       PP=false;  
       Serial.println("SPENTO");
     }
     break;
   case Kpiu:    //tasto + premuto
     lumi=lumi+15;
     if (lumi>255) lumi=255;
     delay(10);
     break;
     
   case Kmeno:   //tasto - premuto
     lumi=lumi-15;
     if(lumi<=0) lumi=5;   // lumi=0 sarebbe come spegnere
     delay(10);
     break;
     
   case Krew:    // tasto << premuto
        if(PP==true) modo--;
     if(modo<0) modo=K_MAXMODI;
     if(modo<6) lumi=lumi;
           
     break;  
   case Kffw:    // tasto>>premuto
     if(PP==true) modo++;
     if(modo>K_MAXMODI) modo=0;
     if(modo<6) lumi=lumi;            
     break;
     
   }  // end switch
   irrecv.resume();
   if(PP!=true){
     Spegni();
   }
   else{
     switch (modo) {
     case 0:
       modo0();
       break;
     case 1:
       modo1();
       break;
     case 2:
       modo2();
       break;
     case 3:
       modo3();
       break;
     case 4:
       modo4();
       break;
     case 5:
       modo5();
       break;
     case 6:
       modo6();
       break;
     }  // end switch
   }  // end if
 }  // end if
}  // end loop






Il fare è il miglior modo d'imparare

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy