INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Neuling benötigt Hilfe
22.11.2014, 16:26
Beitrag #1
Neuling benötigt Hilfe
Hallo zusammen,

ich bin neu hier im Forum und programmiere heute zum ersten Mal ein eigenes Programm. Leider komme ich nicht mehr weiter.

Die Aufgabe:
Ein Schwimmschalter überwacht den Wasserstand in einer Grube. Dieser wird mit einem Schwimmschalter überwacht. Löst dieser auf, wird eine Pumpe zugeschaltet, welche das Wasser abpumpt. Die Pumpe soll danach noch etwas nachlaufen.

Hier mein Programm:
int Relais = 2;
int Sensor = 4;
int Zeit = 5000; //5 Sek als Beispiel, später ca. 30 sek

//Relais = 0;

void setup()
{
pinMode(Relais, OUTPUT);
pinMode(Sensor, INPUT);
}

void loop()
{
if (digitalRead(Sensor) == HIGH)

{
digitalWrite(Relais,HIGH);
delay(Zeit);
digitalWrite(Relais,LOW);
}}


Das ganze funktioniert auch soweit. Allerdings, sobald der Sensor auslöst, läuft die Pumpe auch die gewisse Zeit nach. Aber wenn nun die Pumpe etwas länger braucht, bis der Sensor wieder auf LOW schaltet, ist bereits die Zeit abgelaufen und die Pumpe aus, obwohl noch immer Wasser in der Grube ist. Wie kann ich da noch etwas "dazuprogrammieren", dass erst die Zeit anfängt abzulaufen, wenn der Sensor wieder ein LOW hat.

Gruß Markus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.11.2014, 16:41 (Dieser Beitrag wurde zuletzt bearbeitet: 22.11.2014 16:42 von itAxel.)
Beitrag #2
RE: Neuling benötigt Hilfe
Hallo Markus und willkommen im Forum.

Ich will dir jetzt nicht die Lösung direkt sagen. Da sollst du schon selber drauf kommen aber ich geb dir einen Hinweis. Es ist ganz einfach.
Beschäftige dich mal ein wenig mehr mit der If-Anweisung. Darüber gibts viel im Netz.

Nun der Hinweis:
Wenn der Sennsor ein HIGH gibt dann soll die Pumpe eingeschaltet werden ( digitalWrite(Relais,HIGH); )
Ansonste soll sie aus gehen ( digitalWrite(Relais,LOW); )

Soweit zum Hinweis.
Gruß Alex
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.11.2014, 17:50
Beitrag #3
RE: Neuling benötigt Hilfe
Hallo Alex,
zuerst einmal vielen Dank für die schnelle Antwort.

Nochmals zum Ablauf des Programms:
Die Grube ist recht groß. Bei meinem Programm ist es im Moment so, dass sobald der Sensor ein HIGH ausgibt, die Pumpe läuft und auch sogleich die Zeit anfangt abzulaufen. Nach der eingestellten Zeit geht die Pumpe aus.
Es sollte aber so sein. Der Sensor bekommt ein HIGH, die Pumpe geht an, der Sensor fällt ab auf LOW und erst dann soll die eingestellte Zeit ablaufen.

Gruß Markus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.11.2014, 17:55 (Dieser Beitrag wurde zuletzt bearbeitet: 22.11.2014 17:57 von itAxel.)
Beitrag #4
RE: Neuling benötigt Hilfe
Das habe ich schon verstanden Smile

Aber der Hinweis bleibt trotzdem gleich:

Wenn Sensor = HIGH
dann Relais = HIGH
ansonsten
warte 5sek.
und dann Relais = LOW

vielleicht hilft das mehr weiter. Natürlich musste noch ein wenig was dazu machen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.11.2014, 20:47
Beitrag #5
RE: Neuling benötigt Hilfe
Sorry, aber ich stehe total auf dem Schlauch.
Komme im Moment echt nicht mehr weiter.

Markus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.11.2014, 21:12
Beitrag #6
RE: Neuling benötigt Hilfe
ok...

Eine IF-Anweisung ist folgendermaßen aufgebaut:

if (Bedingung) {
... was soll ich machen wenn Bedingung wahr (true) ist ...
}
else {
... was soll ich dann machen wenn Bedingung falsch (false) ist ...
}

In der Arduino-Umgebung gibt es auch If-else-Beispiele.
Und hier auch:
http://arduino.cc/en/Reference/Else



PHP-Code:
int Relais 2;
int Sensor 4;
int Zeit 5000//5 Sek als Beispiel, später ca. 30 sek
int STATUS 0;
//Relais = 0;

void setup()
{
  
pinMode(RelaisOUTPUT);
  
pinMode(SensorINPUT);
}

void loop()
{
  if (
digitalRead(Sensor) == HIGH) {
    
// Wenn Sensor ein Signal gibt dann ist diese Bedingung TRUE
    // dann Relais einschalten
    // Diese Anweisung wird solange durchlaufen bis Bedingung FALSE ist
    
digitalWrite(Relais,HIGH);
    
STATUS 1;
  }
  if (
STATUS == 1) {
    
// Wenn STATUS 1 ist dann ist diese Bedingung TRUE
    
delay(Zeit);
    
digitalWrite(Relais,LOW); 
    
// Damit diese Anweisung nicht immer wieder wiederholt wird, setzen wir den STATUS wieder auf 0
    
STATUS 0;  
  }

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2014, 09:23
Beitrag #7
RE: Neuling benötigt Hilfe
Ändere folgende Zeile:
if (STATUS == 1) {

in
if (digitalRead(Sensor) == LOW && STATUS == 1) {
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2014, 14:26
Beitrag #8
RE: Neuling benötigt Hilfe
Hi,
man kann's natürlich auch kompliziert machen.
Wie wär's denn so:
Code:
int Relais = 2;
int Sensor = 4;
int Zeit = 5000; //5 Sek als Beispiel, später ca. 30 sek

//Relais = 0;

void setup()
{
pinMode(Relais, OUTPUT);
pinMode(Sensor, INPUT);
}

void loop()
{
if (digitalRead(Sensor) == HIGH)

{
digitalWrite(Relais,HIGH);
}else{                  // <<<<< diese Zeile ist neu!
delay(Zeit);
digitalWrite(Relais,LOW);
}}
Meiner Meinung nach sollte es das tun: Wenn der Sensor auf HIGH geht, dann geht der Sensor an. Er bleibt auch so lange an, wie der Sensor auf HIGH bleibt. Wenn er auf LOW geht (oder auf LOW ist), dann wird erstmal 5 Sekunden abgewartet und dann geht die Pumpe aus.
Der Nachteil dieser Lösung (und aller anderen, die mit delay() arbeiten) ist natürlich, dass die Pumpe u.U. nicht sofort angeht, wenn der Sensor auslöst, sondern mit bis zu 5 Sekunden Verzögerung. (Später 30 Sekunden, wie man im Programmkommentar oben sieht.) Wahrscheinlich ist das nicht schlimm, außer wenn Deine Grube sehr schnell vollläuft. Ansonsten muss man das delay() auf die übliche Weise ersetzen und die Prüfung des Sensors öfter machen.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Neuling mit einen Projekt MrNiceGuy 31 1.021 30.11.2017 22:15
Letzter Beitrag: torsten_156
  Neuling Fehler beim Kompilieren guenni71 6 225 26.11.2017 16:48
Letzter Beitrag: hotsystems
  Neuling Projekt Zähler Feuersturm84 2 241 16.11.2017 19:50
Letzter Beitrag: Chopp
  Prüfung eines Drucksensors mit Hilfe des Arduino r4c3 17 1.834 10.11.2017 22:24
Letzter Beitrag: r4c3
  Suche Hilfe für den Fehler in der Datei Holzwurm56 5 374 01.11.2017 14:26
Letzter Beitrag: Holzwurm56
  Hilfe bei Einschaltverzögerung gesucht Ingo 9 637 28.10.2017 19:04
Letzter Beitrag: Tommy56
Photo Hilfe bei meinem Arduino Projekt Niklas 10 553 23.09.2017 21:05
Letzter Beitrag: Niklas
  Ublox Neo 6M und Nextion ! Bitte um Hilfe. b3ta 19 1.398 13.07.2017 14:52
Letzter Beitrag: Tommy56
  Anfänger sucht erfahrene Hilfe Customizer 21 1.634 11.07.2017 21:37
Letzter Beitrag: Customizer
  Bitte um Hilfe Arduino Nano-MAX7219-PIR_Sensor Opa_Klaus 35 2.481 20.05.2017 21:11
Letzter Beitrag: Opa_Klaus

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste