Originariamente Scritto da
Niko
Potresti attivare la pompa solo se lo stato di basso livello permane ad esempio per piú di un minuto.
Il codice potrebbe essere semplicemente:
Codice:
If (isLevelNormal()) lastLevelNormalTime=mills();
pompaOn = mills() - lastLevelNormal>60000;
Che tradotto, fin quando il livello è normale il temporizzatore viene sempre resettato. Quando il livello scende tale per cui il temporizzatore non viene resettato per piú di un minuto viene attivata la pompa.
Al successivo reset la pompa si stacca e ricomincia il giro.
Grazie del consiglio, penso che aggiungerò un while dentro quello di accensione in maniera da verificare se l'interruttore da segnale positivo per più di un tempo x e comportarsi di conseguenza :)
E magari porto tutto in digitale come diceva billy
Codice:
int led = 13; //PIN
int gnd = 8;
int vvc = 9;
int sw1 = 2;
int sicura =0; // Variabili programma
int indice1 =0;
long tempo_sicura = 15000;
long conta = 0;
long times = 0;
void setup() {
pinMode(gnd, OUTPUT);
pinMode(vvc, OUTPUT);
pinMode(sw1, INPUT);
pinMode(led, OUTPUT);
}
void loop() {
delay(100);
while(analogRead(sw1) > 400 == HIGH && sicura ==0){
digitalWrite(gnd, LOW);
digitalWrite(vvc, LOW);
delay(100);
times = millis();
if(indice1 == 0){
conta = millis();
indice1 = 1;
} //If indice
if((conta + tempo_sicura ) < (times)){
sicura = 1;
} //If sicura
}//while acceso
while(analogRead(sw1) < 400){
digitalWrite(gnd, HIGH);
digitalWrite(vvc, HIGH);
delay(100);
indice1 = 0;
}
while(sicura == 1){
digitalWrite(gnd, HIGH);
digitalWrite(vvc, HIGH);
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
}
Connect With Us