Il pulsante P1 viene posizionato a debita distanza a nord del passaggio a livello.
Esso incrementerà la variabile value1.
Il pulsante P2 a sud del passaggio a livello ed incrementerà la variabile value2.
Se value1= value2 la barra è alzata.
Se value1 diverso da value2 la barra è abbassata.
Lo sketch visualizza, inultimente,il conteggio degli assi del treno prima e dopo il suo passaggio, serve solo come controllo dello sketch.
#include <LiquidCrystal.h> LiquidCrystal lcd(8, 9, 10, 11, 12, 13); # define TASTO1 2 # define TASTO2 3 # define RELE 6 int Value1 = 0; int Value2 = 0; long Tempo1 = 0; long Tempo11 = 50; void setup() { pinMode(TASTO1,INPUT ); pinMode(TASTO2,INPUT ); pinMode(RELE, OUTPUT); lcd.begin(16, 2); lcd.setCursor(0,0); lcd.print ("Valore1"); lcd.setCursor(0,1); lcd.print ("Valore2"); Serial.begin(9600); } void loop() { //********** TASTO 1 ***************** int StatoTasto1; int StatoTasto1a = LOW; int valoreTasto1 = digitalRead(TASTO1); //-------- antirimbalzo1 -------------- if (valoreTasto1 != StatoTasto1a) {Tempo1 = millis();} if ((millis() - Tempo1) > Tempo11) {StatoTasto1 = valoreTasto1;} StatoTasto1a = valoreTasto1; //------------esecuzione1 ------------ if (valoreTasto1 == HIGH) { Value1 = (Value1 + 1); Serial.println(Value1); lcd.setCursor(10,0); lcd.print(Value1); delay(500); } //********** TASTO 2 ***************** int StatoTasto2; int StatoTasto2a = LOW; int valoreTasto2 = digitalRead(TASTO2); //-------- antirimbalzo2----------- if (valoreTasto2 != StatoTasto2a) {Tempo1 = millis();} if ((millis() - Tempo1) > Tempo11) {StatoTasto2 = valoreTasto2;} StatoTasto2a = valoreTasto2; //-------- esecuzione2 ------------ if (valoreTasto2 == HIGH) { Value2 = (Value2 + 1); Serial.println(Value2); lcd.setCursor(10,1); lcd.print(Value2); delay(500); } //---- CONFRONTO FRA I DUE DATI -------- if (Value1 == Value2) { digitalWrite(RELE, LOW); Serial.println("RELE OFF"); delay(350); } else {digitalWrite(RELE, HIGH); Serial.println("RELE OFF"); delay (100); } }
Nessun commento:
Posta un commento