Pages: 1 2 3 [4]   Go Down
Author Topic: Lampada RGB con Apple Remote  (Read 2859 times)
0 Members and 1 Guest are viewing this topic.
La Spezia
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

smiley-grin:D:D
tralasciavo gli "errori"

l'ora tarda, i led negli occhi  smiley smiley-razz
Logged

Il fare è il miglior modo d'imparare

La Spezia
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley) che non riuscivo a fare funzionare.
Cmq per oggi mi ritengo soddisfatto, ho capito qualcosina in più smiley
allego lo sketch ultimo smiley-grin

* PeenieLampv0_2d.ino (4.63 KB - downloaded 13 times.)
Logged

Il fare è il miglior modo d'imparare

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 77
Posts: 4645
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Prova a leggere questo:  blink led senza delay(), usando millis()
http://arduino.cc/en/Tutorial/BlinkWithoutDelay
Logged

my name is IGOR, not AIGOR

La Spezia
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Letto e riletto, ma ancora non capisco come integrarlo al meglio.
Logged

Il fare è il miglior modo d'imparare

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 77
Posts: 4645
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

my name is IGOR, not AIGOR

La Spezia
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

  smiley grazie per il link
Oggi faccio qualche prova con la millis, in effetti nel mio codice quei delay rallentano il tutto.
Logged

Il fare è il miglior modo d'imparare

La Spezia
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smileysmileysmiley
Logged

Il fare è il miglior modo d'imparare

La Spezia
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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 smiley-grin
Logged

Il fare è il miglior modo d'imparare

La Spezia
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

continuo a fare prove ma proprio non riesco a fare un "rainbow" senza delay smiley-sad
a dire il vero non mi è riuscita bene neanche quella perchè dopo il primo giro si ferma smiley-sad
Logged

Il fare è il miglior modo d'imparare

La Spezia
Offline Offline
Newbie
*
Karma: 0
Posts: 43
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

per chi fosse interessato lo sketch è questo
Code:
/*
                  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





Logged

Il fare è il miglior modo d'imparare

Pages: 1 2 3 [4]   Go Up
Jump to: