Go Down

Topic: Lampada RGB con Apple Remote (Read 3 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