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
  Hilfe: IR Remote Steuerung, MSGEQ7 + RGB-LED Streifen dastob 1 119 14.10.2016 21:40
Letzter Beitrag: hotsystems
Sad Ich brauche Hilfe Prosac 4 232 09.10.2016 18:39
Letzter Beitrag: Prosac
  at24c256 Hilfe Gandalf 6 248 29.08.2016 18:59
Letzter Beitrag: MKc
Smile Progammier Neuling Codeschloss bittet um Hilfe Donalonso 2 285 27.08.2016 18:23
Letzter Beitrag: Binatone
  Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite b3ta 11 449 22.08.2016 08:07
Letzter Beitrag: b3ta
  Hilfe: Mega2560 - ENC 28J60 - MYSQL Gandalf 1 180 28.07.2016 16:30
Letzter Beitrag: Gandalf
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 542 06.07.2016 14:59
Letzter Beitrag: Binatone
Wink Bin Neuling Guekard 62 3.220 12.06.2016 19:01
Letzter Beitrag: hotsystems
  Hilfe beim Arduino Shield reimundko 6 455 05.06.2016 11:28
Letzter Beitrag: rpt007
  Brauche etwas Hilfe bei der Umsetzung einer Idee raspido 3 527 23.04.2016 10:26
Letzter Beitrag: rkuehle

Gehe zu:


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