lunedì 10 novembre 2014

Contatore UP/DOWN



Contatore generico con ingressi di UP; DOWN, AZZERA ed IMPOSTA.

      #include <LiquidCrystal.h>
      LiquidCrystal lcd( 8, 9, 10, 11, 12, 13);
      
       # define IMPOSTA       A0
       # define CONTA          2
       # define SCONTA         3
       # define AZZERA         4
       # define RELE           6
       # define RELE1          7 
       
       long ValueImposta     = 0;
       long ValueImposta1    = 0;
       long ValueAzzera      = 0;
       int  ValueConta       = 0;
       int  ValueSconta      = 0;
       int  lastValueConta   = 0;
       int  lastValueSconta  = 0;
       byte contaImpulsi     = 0;
       byte Merker           = 0; 
       
       void setup() 
           { pinMode(IMPOSTA,   INPUT ); 
             pinMode(CONTA,     INPUT );
             pinMode(SCONTA,     INPUT);
             pinMode(RELE,     OUTPUT ); 
             pinMode(RELE1,    OUTPUT ); 
             lcd.begin(16, 2);
             Serial.begin(9600);    }
      
       void loop() {
             
             lcd.setCursor(0,0);
             lcd.print ("V.Impostato");
             lcd.setCursor(0,1);
             lcd.print ("V.Contato");
      
        //-- Azzera il contatore pin 4----------
            ValueAzzera  = digitalRead(AZZERA); 
            if ( ValueAzzera == HIGH) 
               { contaImpulsi = 0; 
                      lcd.setCursor(13, 1);
                      lcd.print(contaImpulsi); 
                      Serial.println(contaImpulsi);
                      delay(20);    }
      
      //-Imposta con Pot.su A0 il n. max di pezzi ---
             ValueImposta=analogRead(IMPOSTA);
             ValueImposta1 = (ValueImposta / 10);
             lcd.setCursor(13,0);
             lcd.print(ValueImposta1);
      
      //---------- Incrementa con input su Pin2 ----     
            ValueConta  = digitalRead(CONTA); 
            if ( ValueConta != lastValueConta) 
               { if ( ValueConta == HIGH)
                    { contaImpulsi = contaImpulsi + 1; 
                      lcd.setCursor(13, 1);
                      lcd.print(contaImpulsi); 
                      Serial.println(contaImpulsi);
                      delay(20);    }}// DebounceTime
            lastValueConta = ValueConta;
             
      //---------- Decrementa con input su Pin3 ----     
            ValueSconta  = digitalRead(SCONTA); 
            if ( ValueSconta != lastValueSconta) 
               { if ( ValueSconta == HIGH)
                    { contaImpulsi = contaImpulsi - 1; 
                      lcd.setCursor(13, 1);
                      lcd.print(contaImpulsi); 
                      Serial.println(contaImpulsi);
                      delay(20);    }}// DebounceTime
            lastValueSconta = ValueSconta;
 
      /*---- -----CONFRONTO FRA I DUE DATI -------- 
       Se valore comntatore è uguale a valore
      impostato eccita i relè.at */
        
            if ( ValueImposta1 == contaImpulsi)
               { digitalWrite(RELE, HIGH);
                 Serial.println("RELE ON");
                 Merker = HIGH;
                 delay(500); 
                  
                 contaImpulsi = 0;
                 digitalWrite(RELE, LOW);
                 Merker = LOW; 
                 lcd.clear();
                 delay(30);          }
      
      /*------------ Esegui un'altra azione-----------
       La variabile Merker è usata per eseguire
       altre azioni.  */    
       
            if ( Merker == HIGH)
               { digitalWrite(RELE1, HIGH); }
      
      
       }

Nessun commento:

Posta un commento