Pages: [1]   Go Down
Author Topic: Benötige HILFE!!! mit meiner Steuerung  (Read 1087 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Oldenburg
Offline Offline
Sr. Member
****
Karma: 16
Posts: 270
Arduino, imagine the possibilities!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Moin Thomas,

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


Gruß

Sebastian
Logged

Libraries:
  - multiCameraIrControl [V1.6]
  -

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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;   
           
 
Logged

Oldenburg
Offline Offline
Sr. Member
****
Karma: 16
Posts: 270
Arduino, imagine the possibilities!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Libraries:
  - multiCameraIrControl [V1.6]
  -

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

CH
Offline Offline
Newbie
*
Karma: 1
Posts: 18
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wann genau schreibst du die currentMillis? - Das ist entscheidend.
 
Code:
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.

Code:
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.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 18
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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??
Logged

Bern, Switzerland
Offline Offline
Jr. Member
**
Karma: 2
Posts: 53
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo
Versuch es doch mal so (habe es selber nicht ausprobiert)...
Code:
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);
  }
   
}
Logged

Pages: [1]   Go Up
Jump to: