Visualizzazione post con etichetta Temporizzatore. Mostra tutti i post
Visualizzazione post con etichetta Temporizzatore. Mostra tutti i post

lunedì 1 dicembre 2014

Blink regolabile

# define LEDA 2
# define LEDB 3
# define POT A0

int ledStateA = LOW;  
int ledStateB = LOW; 

long pMillisA = 0;  
long pMillisB = 0;  

long pausa = 0;

void setup()
    { pinMode (POT, INPUT);
      pinMode(LEDA, OUTPUT);
      pinMode(LEDB, OUTPUT); }

void loop(){

  pausa = analogRead(POT);
  
  unsigned long cMillisA = millis();
  
  if( cMillisA - pMillisA > (pausa + 50))
    { pMillisA = cMillisA;   
      if ( ledStateA== LOW)
           ledStateA = HIGH;
           else
              ledStateA = LOW;
              digitalWrite(LEDA, ledStateA);}
 
              
 unsigned long cMillisB = millis();
 
  if( cMillisB - pMillisB > ( pausa + 275) )
    { pMillisB = cMillisB;   
      if ( ledStateB == LOW)
           ledStateB = HIGH;
           else
              ledStateB = LOW;
              digitalWrite(LEDB, ledStateB);}
}


Blink regolabile (delay).



# define Sensore A0
# define LED1 2
# define LED2 3

int tempo = 0;


   void setup() 
       { pinMode (Sensore,INPUT);
         pinMode(LED1,OUTPUT);  
         pinMode(LED2,OUTPUT);
         Serial.begin(9600);}

   void loop(){
       
       tempo = analogRead(Sensore);
       digitalWrite (LED1,HIGH);        
       delay(tempo *0.5 );
       digitalWrite (LED1,LOW);  
       digitalWrite (LED2,HIGH);        
       delay(tempo*2);
       digitalWrite (LED2,LOW);  
       delay(tempo);
        }

lunedì 24 novembre 2014

Temporizzatore ad impulso.



      /*  TEMPORIZZATORE
          Alla pressione di BUTTON1
          LED1 si accende per 
          spegnersi dopo TempoON
      */
     # define BUTTON1 2
     # define LED1    8
     
       int buttonState1 = 0;
     
      unsigned long iMillis1 = 0;
      byte acceso1 = LOW;
      int TempoON           =  3000;
      
      void setup() 
          { pinMode(LED1, OUTPUT);      
            pinMode(BUTTON1, INPUT);  }
      
      void loop() {
       
        int buttonState1 = digitalRead(BUTTON1);
        if ( buttonState1 == HIGH && acceso1 == LOW) 
           { digitalWrite(LED1, HIGH);
             acceso1 = HIGH;
             iMillis1 = millis(); }
        if ( acceso1 == HIGH && (millis()-iMillis1)> TempoON)
           { digitalWrite(LED1, LOW);
             acceso1 = LOW; }
      
      }//-------------Fine LOOP-------------

Temporizzatore ritardato all'inserzione (pulsante).


      /* Il LED si accende dopo 5 sec. dalla pressione
         del pulsante e si spegne dopo 8 secondi dalla
         stessa pressione.  */
         
       # define TASTOSET       2
       # define LED            7
      
       int  ValueLED          =  0;
       int  tempoON           =  5000;
       byte acceso = LOW;
       int  tempoOFF          =  8000;
       byte acceso1 = LOW;

     
       unsigned long iMillis = 0;

       
       void setup() 
       
           { pinMode(TASTOSET, INPUT );
             pinMode(LED,      OUTPUT); }
      
       void loop() {

      int valoreTastoSET = digitalRead(TASTOSET);
          if ( valoreTastoSET == HIGH)
             { acceso = HIGH;
               acceso1 = HIGH;
               iMillis = millis(); 
               digitalWrite(LED, LOW);}
         
          if ( acceso == HIGH && (millis()-iMillis)> tempoON)
             { digitalWrite(LED, HIGH);
               acceso = LOW;  }
      
          if ( acceso1 == HIGH && (millis()-iMillis)> tempoOFF)
             { digitalWrite(LED, LOW);
               acceso1 = LOW;  }            
               
          }

domenica 23 novembre 2014

Temporizzatore ad Impulso ritardato.




      /* Il LED si accende dopo 5 sec. dalla pressione
         del pulsante e si spegne dopo 8 secondi dalla
         stessa pressione.  */
         
       # define SET       2
       # define LED       7
      
       int  ValueLED   =  0;
       int  RitardoON  =  5000;
       byte acceso     = LOW; 
       int  RitardoOFF =  8000;
       byte acceso1    = LOW;

     
       unsigned long iMillis = 0;

       
       void setup() 
       
           { pinMode(SET,      INPUT );
             pinMode(LED,      OUTPUT); }
      
       void loop() {

      int valoreTastoSET = digitalRead(SET);
          if ( valoreTastoSET == HIGH)
             { acceso = HIGH;
               acceso1 = HIGH;
               iMillis = millis(); 
               digitalWrite(LED, LOW);}
         
          if ( acceso == HIGH && (millis()-iMillis)> RitardoON)
             { digitalWrite(LED, HIGH);
               acceso = LOW;  }
      
          if ( acceso1 == HIGH && (millis()-iMillis)> RitardoOFF)
             { digitalWrite(LED, LOW);
               acceso1 = LOW;  }            
               
          }

Temporizzatore con ritardo all'inserzione.


  

       # define LED1 8
       # define SWITCH1 2
  
      int switch1State = LOW;         
  

      byte          pState1 = 0;
      unsigned long pMillis1 = 0; 
      unsigned long pausa1 =3000;

      void setup() 
           { pinMode(LED1, OUTPUT);      
             pinMode(SWITCH1, INPUT);  }
      
      void loop(){
   
        switch1State = digitalRead(SWITCH1);

        if  (switch1State == HIGH) 
            {    if ( millis() - pMillis1 > pausa1)
                { pMillis1 = millis(); 
                  pState1 = HIGH;
                  digitalWrite(LED1, pState1);}}
        }
     

sabato 22 novembre 2014

Pausa

Non ho capito bene il perchè ma questo è lo sketch corretto che sostituisce la funzione delay.


      unsigned long iMillis1 = 0;
      byte acceso1 = LOW;
      int TempoON           =  3000;
      
      void setup() 
          { pinMode(13, OUTPUT);      
            pinMode(2, INPUT);  }
      
      void loop() {
       
        if ( digitalRead(2) == HIGH && acceso1 == LOW) 
           { digitalWrite(13, HIGH);
             acceso1 = HIGH;
             iMillis1 = millis(); }
      
        if (acceso1 == HIGH && (millis()-iMillis1)> TempoON)
        { digitalWrite(13, LOW);
          acceso1 = LOW; }
      
      }

giovedì 20 novembre 2014

Delay 2

I due led lampeggiano alla stessa frequenza con tempi di ON ed OFF uguali.
Vedi anche i post  " delay 1" e " Blink senza delay".

      
     

      /* La pausa inserita nel ciclo di BUTTON1
         non influisce sull'azione di BUTTON2 
             */
      
      const int BUTTON1 = 2;     
      const int LED1 =  12;     
      int buttonState1 = 0;       
      
      const int BUTTON2 = 3;     
      const int LED2 =  13;     
      int buttonState2 = 0;  
      
      long pMillis = 0;  
      long interval = 10000;  
      void setup()
      
           { pinMode(BUTTON1, INPUT);
             pinMode(BUTTON2, INPUT); 
             pinMode(LED1,   OUTPUT);      
             pinMode(LED2,   OUTPUT); }
      
      void loop(){
      
      buttonState1 = digitalRead(BUTTON1);
            if ( buttonState1 == HIGH)
               { unsigned long cMillis = millis();
                 if ( cMillis - pMillis > interval)
                    { pMillis = cMillis;   
                      digitalWrite( LED1, HIGH); }
               else { LED1, LOW;}}
                       
     buttonState2 = digitalRead(BUTTON2);
            if ( buttonState2 == HIGH)
               { digitalWrite(LED2, HIGH); } 
          else { digitalWrite(LED2, LOW);  }
          
       
      }

Delay 1

  /* Mentre BUTTON1
         è a livello HIGH per 10 sec. tutto il 
         LOOP è bloccato, infatti BUTTON2
         non riesce ad accendere LED2
      
      */
      
      const int BUTTON1 = 2;     
      const int LED1 =  12;     
      int buttonState1 = 0;       
      
      const int BUTTON2 = 3;     
      const int LED2 =  13;     
      int buttonState2 = 0;  
      
      long pMillis = 0;  
      long interval = 10000;  
      void setup()
      
           { pinMode(BUTTON1, INPUT);
             pinMode(BUTTON2, INPUT); 
             pinMode(LED1,   OUTPUT);      
             pinMode(LED2,   OUTPUT); }
      
      void loop(){
      
  buttonState1 = digitalRead(BUTTON1);
           if ( buttonState1 == HIGH)
               { digitalWrite(LED1, HIGH); 
                  delay (10000);           } 
          else { digitalWrite(LED1, LOW);  }
                       
  buttonState2 = digitalRead(BUTTON2);
            if ( buttonState2 == HIGH)
               { digitalWrite(LED2, HIGH); } 
          else { digitalWrite(LED2, LOW);  }
      }

venerdì 14 novembre 2014

Blink with delay asimmetrico.


Alla chiusura di un interruttore due led lampeggiano ciascuno con tempi propri di ON ed OFF senza l'uso dell'istruzione delay()

   
      # define BUTTON1 2
      # define BUTTON2 3
      # define LED1 6
      # define LED2 7
      
      int buttonState1 = 0;
      byte Pulse1 = 0;
      unsigned long pMillis1A = 0; 
      unsigned long Wart1A = 100;  
      unsigned long pMillis1B = 0; 
      unsigned long Wart1B = 1200; 
   
      int buttonState2 = 0;
      byte Pulse2 = 0;
      unsigned long pMillis2A = 0; 
      unsigned long Wart2A = 330;  
      unsigned long pMillis2B = 0; 
      unsigned long Wart2B = 660;      
    
    
      void setup() 
          { pinMode(BUTTON1,INPUT);
            pinMode(BUTTON2,INPUT);
            pinMode(LED1, OUTPUT);
            pinMode(LED2, OUTPUT); }
      

      void loop() {
    
      buttonState1 = digitalRead(BUTTON1);
           if ( buttonState1 == HIGH)
              { if ( millis() - pMillis1A > Wart1A)
                   { pMillis1A = millis(); 
                     Pulse1 = LOW;
                     digitalWrite(LED1, Pulse1); 
                if ( millis() - pMillis1B > Wart1B)
                    { pMillis1B = millis(); 
                      Pulse1 = HIGH;
                      digitalWrite(LED1, Pulse1);   }}}
     
      buttonState2 = digitalRead(BUTTON2);
           if ( buttonState2 == HIGH)
              { if ( millis() - pMillis2A > Wart2A)
                   { pMillis2A = millis(); 
                     Pulse2 = LOW;
                     digitalWrite(LED2, Pulse2); 
                if ( millis() - pMillis2B > Wart2B)
                    { pMillis2B = millis(); 
                      Pulse2 = HIGH;
                      digitalWrite(LED2, Pulse2);   }}}     
}

sabato 25 ottobre 2014

CRONOMETRO HIGH/LOW



Lo sketch permette di cronometrare il tempo di ON e di OFF di un onda quadra.


   /* Cronómetro modificato, creado por 
      Javier Sirgo Blanco http://zygzax.com/webpcronometro/
      
      Ingresso al pin 2.
      Misura il tempo di ON e di OFF di un segnale ad onda quadra.
      I due tempi si azzerano al reinizio del ciclo.
  */
    
    #include <LiquidCrystal.h>                
   
    # define SET   2
   
    LiquidCrystal lcd(8, 9, 10, 11, 12, 13); 
    int m, mu=0,md=0;                          
    int s, su=0,sd=0;
    int l, lu=0,ld=0,lc=0;
    int  pin2;
    long int tempo,inizio;
         
    void setup()
        
         { pinMode(SET, INPUT);                      
           pin2=LOW;
           lcd.begin(16, 2);                      
           lcd.setCursor(0, 0); 
           lcd.print("ON");         
           lcd.setCursor(5, 0);                  
           lcd.print("00:00:000");                
           lcd.setCursor(0, 1); 
           lcd.print("OFF");         
           lcd.setCursor(5, 1);                  
           lcd.print("00:00:000");
                                }
     
    
    void loop() {
//**************** Tempo in cui il pin 2 è HIGH ********************
      pin2=digitalRead(2);                 
      if ( pin2==HIGH)
         { inizio=millis();                      
         //Cronometra e trasforma in sessagesimali il tempo di ON
           while (pin2==HIGH)
                { tempo=millis()-inizio;            
                  m=(tempo/1000)/60;                 
                  mu=m%10;                           
                  md=(m-mu)/10;                       
                  s=(tempo/1000)%60;                 
                  su=s%10;                          
                  sd=(s-su)/10;                       
                  l=(tempo%1000);                    
                  lu=l%10;                            
                  ld=((l-lu)/10)%10;                  
                  lc=(l-(ld*10)-lu)/100;              
               // Stampa sulla prima riga il tempo di ON
                  lcd.setCursor(5, 0);                
                  lcd.print(md);                      
                  lcd.print(mu);              
                  lcd.print(":");
                  lcd.print(sd);
                  lcd.print(su);
                  lcd.print(":");
                  lcd.print(lc);
                  lcd.print(ld);
                  lcd.print(lu);
                  pin2=digitalRead(SET); } } // Fine sottoprogramma tempo di HIGH
                  
 //**************** Tempo in cui il pin 2 è LOW ********************                 
      pin2=digitalRead(2);                 
      if ( pin2==LOW)
         { inizio=millis();                      
         //Cronometra e trasforma in sessagesimali il tempo di OFF
           while( pin2==LOW)
                { tempo=millis()-inizio;            
                  m=(tempo/1000)/60;                 
                  mu=m%10;                           
                  md=(m-mu)/10;                       
                  s=(tempo/1000)%60;                 
                  su=s%10;                          
                  sd=(s-su)/10;                       
                  l=(tempo%1000);                    
                  lu=l%10;                            
                  ld=((l-lu)/10)%10;                  
                  lc=(l-(ld*10)-lu)/100;              
               // Stampa sulla seconda riga il tempo di OFF
                  lcd.setCursor(5, 1);                
                  lcd.print(md);                      
                  lcd.print(mu);              
                  lcd.print(":");
                  lcd.print(sd);
                  lcd.print(su);
                  lcd.print(":");
                  lcd.print(lc);
                  lcd.print(ld);
                  lcd.print(lu);
                  pin2=digitalRead(SET); }}  // Fine sottoprogramma tempo di LOW                   
                                            
           }//----------Fine Programma

domenica 3 agosto 2014

Candeliere votivo.

Annotazioni: vedi lo sketch Pausa.
Senza le variabili acceso1...acceso6 il LOOp so blocca dopo un certo numero di cicli.
NinoAL
       
 
 
 
 /* Candeliere votivo.
          Alla pressione del pulsante la
          relativa candela rimane accesa
          per n. minuti */
       # define CONTA          2
       # define LED1           8
       # define LED2           9
       # define LED3          10
       # define LED4          11     
       # define LED5          12
       # define LED6          13
     
       int ValueConta        = 0;
       int lastValueConta    = 0;
       int contaImpulsi      = 0;
       int ValueUno          = 1;
       int ValueDue          = 2;
       int ValueTre          = 3;
       int ValueQuattro      = 4;
       int ValueCinque       = 5;
       int ValueSei          = 6;
       
       byte acceso1 = LOW;
       byte acceso2 = LOW;
       byte acceso3 = LOW;
       byte acceso4 = LOW;
       byte acceso5 = LOW;
       byte acceso6 = LOW;
       
       unsigned long iMillis1 = 0;
       unsigned long iMillis2 = 0;
       unsigned long iMillis3 = 0;
       unsigned long iMillis4 = 0;
       unsigned long iMillis5 = 0;
       unsigned long iMillis6 = 0;
      
       int TempoON           =  3000;
       
       void setup() 
           { pinMode(CONTA,     INPUT );
             pinMode (LED1,     OUTPUT);
             pinMode (LED2,     OUTPUT);   
             pinMode (LED3,     OUTPUT);
             pinMode (LED4,     OUTPUT);             
             pinMode (LED5,     OUTPUT);
             pinMode (LED6,     OUTPUT); }
      
       void loop() {
      
      //---------- Leggi pezzi su Pin2 -------------------     
            ValueConta  = digitalRead(CONTA); 
            if ( ValueConta != lastValueConta) 
               { if ( ValueConta == HIGH)
                    { contaImpulsi++;
                    delay(20);    }}// DebounceTime
            lastValueConta = ValueConta;

           if ( ValueConta == HIGH && acceso1 == LOW && contaImpulsi==ValueUno) 
              { digitalWrite(LED1, HIGH);
                acceso1 = HIGH;
                iMillis1 = millis(); }
           if ( acceso1 == HIGH && (millis()-iMillis1) > TempoON)
              { digitalWrite(LED1, LOW);
                acceso1 = LOW; }
            
           if ( ValueConta == HIGH && acceso2 == LOW && contaImpulsi==ValueDue) 
              { digitalWrite(LED2, HIGH);
                acceso2 = HIGH;
                iMillis2 = millis(); }
           if ( acceso2 == HIGH && (millis()-iMillis2) > TempoON)
              { digitalWrite(LED2, LOW);
                acceso2 = LOW; }           
          
           if ( ValueConta == HIGH && acceso3 == LOW && contaImpulsi==ValueTre) 
              { digitalWrite(LED3, HIGH);
                acceso3 = HIGH;
                iMillis3 = millis(); }
           if ( acceso3 == HIGH && (millis()-iMillis3) > TempoON)
              { digitalWrite(LED3, LOW);
                acceso3 = LOW; }
            
           if ( ValueConta == HIGH && acceso4 == LOW && contaImpulsi==ValueQuattro) 
              { digitalWrite(LED4, HIGH);
                acceso4 = HIGH;
                iMillis4 = millis(); }
           if ( acceso4 == HIGH && (millis()-iMillis4) > TempoON)
              { digitalWrite(LED4, LOW);
                acceso4 = LOW; }             
         
           if ( ValueConta == HIGH && acceso5 == LOW && contaImpulsi==ValueCinque) 
              { digitalWrite(LED5, HIGH);
                acceso5 = HIGH;
                iMillis5 = millis(); }
           if ( acceso5 == HIGH && (millis()-iMillis5) > TempoON)
              { digitalWrite(LED5, LOW);
                acceso5 = LOW; }
            
           if ( ValueConta == HIGH && acceso6 == LOW && contaImpulsi==ValueSei) 
              { digitalWrite(LED6, HIGH);
                acceso6 = HIGH;
                iMillis6 = millis(); }
           if ( acceso6 == HIGH && (millis()-iMillis6) > TempoON)
              { digitalWrite(LED6, LOW);
                acceso6 = LOW; }   
      
          if ( contaImpulsi > 5)
             { contaImpulsi= 0; }     
       }

giovedì 29 novembre 2012

Temporizzatore con delay comandato da pulsante.

 
 
/* Premre il pulsante per qualche attimo.
Il relè rimarra acceso per 10 secondi */

# define TASTO1 7
# define LED1   8

int Stato1 = 0;    

void setup() 
{ pinMode(LED1, OUTPUT);      
  pinMode(TASTO1, INPUT);}

void loop(){

  Stato1 = digitalRead(TASTO1);

  if (Stato1 == HIGH)
  { digitalWrite(LED1, HIGH);  
    delay(10000);} 
  else {digitalWrite(LED1, LOW);}
}