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
23.11.2014, 15:05
Beitrag #9
RE: Neuling benötigt Hilfe
Hallo zusammen,

zuerst einmal vielen Dank für die zahlreichen Antworten.

Das Programm funktioniert jetzt soweit ganz gut. Allerdings habe ich da schon ein weiteres Problem entdeckt.
Die Sache mit dem delay. Wie erwähnt läuft ja die Pumpe so lange wie in der Zeit Variablen hinterlegt. Bei einem delay > 30000 bzw. 60000 (30 / 60 sek) bleibt die Pumpe permanent an und schaltet auch nicht mehr ab. Schlecht.....
Meine andere Alternative wäre, einen zusätzlichen Schwimmschalter bei "Grube leer" zu installieren. Vorausgesetzt es gibt da noch eine andere "Programmiervariante".

Wie gesagt ich bin ein Neuling, also bitte Verständnis.

Gruß Markus
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.11.2014, 15:27
Beitrag #10
RE: Neuling benötigt Hilfe
Hi,
wenn das Ding nur ein dummer Schalter ist: Sagt die Dir der Begriff "Pulldown-Widerstand" etwas?
Ansonsten stell mal Dein Coding hier ein. Wir können ja nicht ahnen, welche Variante Du letztendlich verwendet hast.
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
24.11.2014, 22:55
Beitrag #11
RE: Neuling benötigt Hilfe
//Um das Delay zu umgehen, kann man den Timer 1 als Interupt benutzen.
//Der Sensor Eingang ist mit dem internen widerstand auf high gesetzt (INPUT_PULLUP).
//Zum Einschalten muss der Eingang auf 0-Volt (GND) gezogen werden.
//Soll zum Einschalten der Eingang auf 5-Volt gesetzt werden, muss bei Pinmode das PULLUP wegelassen werden und der
//Eingang mit einem 5K Ohm Widerstand auf 0-Volt gesetzt werden. Die Anweisungen "digitalRead(Sensor" muessen dann im
//Programm von High auf LOW und umgekehrt geaendert werden.


#include <Timer1.h> // Timer 1 benutzen -------------------------
int Relais = 2;
int Sensor = 4;
word Zeit = 5; //5 Sek als Beispiel, später ca. 30 sek
int STATUS = 0;
word Takt = 0;
//Relais = 0;
void setup() // --------------------------------------------------
{
pinMode(Relais, OUTPUT);
pinMode(Sensor, INPUT_PULLUP); // Eingang intern auf high
startTimer1(1000000L); // 1000000 µS = 1 Sekunde
}
void loop() // ---------------------------------------------------
{
if (digitalRead(Sensor) == LOW) // Wasser > max
{
digitalWrite(Relais,HIGH);
STATUS = 1; // Merken Pumpe laeuft
Takt = 0; // Sekunden takt auf 0 halten
}
if (STATUS == 1 && digitalRead(Sensor) == HIGH) { // unter max
if (Takt >= Zeit) // Ist > Soll Zeit
{
digitalWrite(Relais,LOW);
STATUS = 0;
}
}
}
// ------------ Timer Interrupt 1 Sekunde ------------------------
ISR(timer1Event)
{
resetTimer1(); // Timer wieder auf Anfangswert
++Takt; // Zykluszeit + 1 Sekunde
}
//--------------- Ende Timer Interrupt ---------------------------
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
24.11.2014, 23:22
Beitrag #12
RE: Neuling benötigt Hilfe
Hi,
das schöne ist, dass sowas schon in der Arduino-Standard Library vorhanden ist. Nennt sich millis().
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
25.11.2014, 01:24
Beitrag #13
RE: Neuling benötigt Hilfe
(24.11.2014 23:22)Thorsten Pferdekämper schrieb:  das schöne ist, dass sowas schon in der Arduino-Standard Library vorhanden ist. Nennt sich millis().
millis gibt nur die Zeit zurück, sonst nichts.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.11.2014, 09:59
Beitrag #14
RE: Neuling benötigt Hilfe
Hallo Axel,
danke für Deine Aufklärung.
So viel anderes macht HTOs Lösung aber auch nicht. Es wird im Prinzip mit der Variable "Takt" eine Art rücksetzbares millis() (Natürlich in Sekunden-Auflösung) realisiert. Meiner Meinung nach ist die Verwendung von millis() einfacher und auch universeller.
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
25.11.2014, 10:30 (Dieser Beitrag wurde zuletzt bearbeitet: 25.11.2014 10:31 von HaWe.)
Beitrag #15
RE: Neuling benötigt Hilfe
da möchte ich widersprechen:
millis (übrigen IMO eine unsägliche Bezeichnung - warum nicht clock() oder time() oder so?) ist möglicherweise einfacher zu handhaben bei sehr einfachen Aufgaben.

millis() zählt aber nur die vergangene Zeit (bzw. eine programmierte Zeitdifferenz zu einem gestoppten Zeitpunkt) in dem Moment, wo millis aufgerufen wird, und wenn man länger dauernde Aktionen hat, die viel Rechenzeit verlangen, kann es passieren, dass die beabsichtigte Takt-Zeit deutlich übergangen wird: hier versagt also millis() als zuverlässiger Taktgeber.

Daher ist ein IRQ-Timer, der im Hintergrund arbeitet und im vorgesehenen Takt auch laufende Tasks unterbricht um eine Aktion auszulesen, sicher die universellere Lösung, wenn auch nicht die simpelste.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.11.2014, 21:19
Beitrag #16
RE: Neuling benötigt Hilfe
(25.11.2014 10:30)HaWe schrieb:  millis ist möglicherweise einfacher zu handhaben bei sehr einfachen Aufgaben.
Naja, die Beispiele für Interrupt-Verwendung, die ich bisher gesehen habe, sind auch eher einfach. Wenn's komplex wird, dann will man ja eher vermeiden, dass einem irgend ein Prozess mal zwischendurch in die Quere kommt. Man hat dann im Prinzip keine Chance mehr, das ordentlich zu testen.

Zitat:millis() zählt aber nur die vergangene Zeit (bzw. eine programmierte Zeitdifferenz zu einem gestoppten Zeitpunkt) in dem Moment, wo millis aufgerufen wird,
Das macht HTOs Lösung aber auch. Ich meinte eigentlich nicht die Verwendung von Interrupts im Allgemeinen, sondern HTOs Lösung. Wenn man es so macht, dann kann man meiner Meinung nach gleich millis() verwenden.

Zitat:und wenn man länger dauernde Aktionen hat, die viel Rechenzeit verlangen, kann es passieren, dass die beabsichtigte Takt-Zeit deutlich übergangen wird: hier versagt also millis() als zuverlässiger Taktgeber.
In dem Fall stimmt das. Das ist aber Meinung nach nur bei wirklich zeitkritischen Sachen relevant, nicht wenn es um ungefähr 5 oder 30 Sekunden geht.

Zitat:Daher ist ein IRQ-Timer, der im Hintergrund arbeitet und im vorgesehenen Takt auch laufende Tasks unterbricht um eine Aktion auszulesen, sicher die universellere Lösung, wenn auch nicht die simpelste.
Mit "universell" meine ich, dass die meisten (auch komplexen) Sachen mit millis() einfacher sind. Natürlich gibt es ein paar spezielle Probleme (zeitkritische Aktionen parallel zu rechenintensiven), die damit nicht gehen.
Wenn man das mit den millis() mal richtig verstanden hat, dann kann man damit auch mal 50 unabhängige Timer auf einem Uno realisieren. Natürlich bekommt man das auch mit Interrupts hin, aber dann implementiert man entweder was ähnliches wie millis() oder es wird echt kompliziert.
Außerdem darf das Coding, welches innerhalb der Interruptroutine abläuft, auch nicht gerade lange dauern.
Wahrscheinlich ist es meistens Geschmacksache, was man verwendet. Ich bin halt ein millis()-Fan.

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 233 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.222 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 529 23.04.2016 10:26
Letzter Beitrag: rkuehle

Gehe zu:


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