Benötige HILFE!!! mit meiner Steuerung

Hallo

ich habe leider ein Problem, ich möchte schon seit Tagen folgende Schaltung realisieren:

Ich habe eine Wasserpumpe diese soll per Schwimmschalter angesteuert werden d.h :

wenn Sensor HIGH ist soll die Pumpe auch auf HIGH gehen, aber nur für max. 5 sec , wenn der Schwimmschalter innerhalb der 5 sec auf LOW geht soll die Pumpe auch auf LOW gehen.Ist der Sensor länger als 5 sec auf HIGH soll die PUMPE auf LOW gehen.
Da ich leider nich nicht so viel Erfahrung habe, wäre ich euch sehr dankbar wenn ihr mir helfen könntet.

LG

Moin Thomas,

dann zeig doch mal wo Du in Deinem Code hängen geblieben bist.

Gruß

Sebastian

Hallo anbei der Code
unsigned long currentMillis = millis();

if((currentMillis - previousMillis <5000) && (digitalRead(refill_input) == HIGH)) {
digitalWrite (refill_pump, HIGH);
//
}
else {
digitalWrite (refill_pump, LOW);
//previousMillis = currentMillis;

Sieht doch ganz OK aus. Wenn Du die previousMillis clever setzt, gehts. Wo hakt es denn?

Naja das Problem ist , das LED (Pumpe) nach über 5 sec nicht aus geht und bleibt.

Wann genau schreibst du die currentMillis? - Das ist entscheidend.
unsigned long currentMillis = millis();

Versuch mal die currentMillis in der else-Schleife zu schreiben. So ist während die Pumpe aus ist immer currentMillis=millis() und wenn der Eingang high wird, startet die Pumpe wieder bis die 5 Sek abgelaufen sind.

 else {
    digitalWrite (refill_pump, LOW);
 previousMillis = currentMillis;

Für dein Eingang könntest du auch eine Flankenerkennung machen, damit die Pumpe nie länger als 5 Sek. läuft bis der Eingang erneut true wird.

Hi danke dir erstmal

habe es abgeändert LED (PUMPE) leuchtet für 5 sec geht dan kurz aus und danach wieder 5 sec an etc. jetzt müßte ich das ganze nur noch so hinkriegen das die LED ausbeleibt wenn der Sensor (Taster) > 5 sec auf HIGH steht.

Code sieht jetzt so aus:

unsigned long currentMillis = millis();
if((currentMillis - previousMillis <5000) && (digitalRead(refill_input) == HIGH)) {
digitalWrite (refill_pump, HIGH);}
else {
digitalWrite (refill_pump, LOW);
previousMillis = currentMillis;

}

Wie würde das mit der Flankenerkennung funktionieren??

Hallo
Versuch es doch mal so (habe es selber nicht ausprobiert)...

const int refill_input = 12;     
const int refill_pump =  13;  

unsigned long currentMillis = 0;
unsigned long previousMillis = 0;

void setup() {
  pinMode(refill_input, INPUT);
  pinMode(refill_pump, OUTPUT);    
}

void loop(){
  
  if (digitalRead(refill_input) == HIGH) {
    currentMillis = millis(); 
    previousMillis = millis();
    while ((digitalRead(refill_input) == HIGH) && (currentMillis - previousMillis < 5000)) {     
      digitalWrite(refill_pump, HIGH);
      previousMillis = currentMillis;
      currentMillis = millis();  
     }
  }
  else {
    digitalWrite (refill_pump, LOW);
  }
    
}