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
  Brauch hilfe bei einnem Sketch MrMagoo 10 348 11.02.2018 13:49
Letzter Beitrag: hotsystems
  Hilfe bei diesen Fehler MrMagoo 22 598 06.02.2018 20:03
Letzter Beitrag: hotsystems
  Neuling mit einen Projekt MrNiceGuy 39 2.185 04.02.2018 20:50
Letzter Beitrag: MrNiceGuy
Question Hilfe bei Programmierung Niklas 15 564 02.02.2018 12:55
Letzter Beitrag: Niklas
  Neulig sucht Hilfe bei Programmierung der Spannungsprotokollierung Matej 42 2.008 01.02.2018 18:11
Letzter Beitrag: Matej
  Hilfe!!! bei 7-Segment Anzeige Markus2018 9 530 31.01.2018 21:14
Letzter Beitrag: Tommy56
  Neuling sucht Beratung für ein RFID Motorschloss MaikGyver 34 2.188 07.01.2018 21:24
Letzter Beitrag: Tommy56
  Neuling Fehler beim Kompilieren guenni71 6 558 26.11.2017 16:48
Letzter Beitrag: hotsystems
  Neuling Projekt Zähler Feuersturm84 2 375 16.11.2017 19:50
Letzter Beitrag: Chopp
  Prüfung eines Drucksensors mit Hilfe des Arduino r4c3 17 2.537 10.11.2017 22:24
Letzter Beitrag: r4c3

Gehe zu:


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