Programm Schwimmer optimieren
|
05.11.2020, 10:43
(Dieser Beitrag wurde zuletzt bearbeitet: 05.11.2020 17:57 von Bitklopfer.)
Beitrag #1
|
|||
|
|||
Programm Schwimmer optimieren
Programm Schwimmer optimieren
Servus miteinander, mit Arduino- Programmen beschäftige ich mich seit ca. 3 Monaten. Vorher hatte ich mich mit C-Control beschäftigt und einige Projekte erstellt. Nun möchte ich eine Gießanlage für mein kleines Treibhaus bauen. Das Gießwasser soll zunächst in einen 10L Behälter getankt werden. Der Tankvorgang sollte zeitlich begrenzt sein aber durch einen Schwimmerschalter unterbrochen werden, damit bei einem Schwimmerausfall keine Überschwemmung produziert wird. Hier mein Tank Sketch der später in das Gesamtprogramm integriert werden soll. Das Programm macht zwar was es soll, funktioniert aber nicht im Gesamtprogramm. Wahrscheinlich kann man den Code viel intelligenter erstellen. Das wäre meine Bitte, mich dabei zu unterstützen. Grüße Max Code: // Testprogramm für Schwimmerschaltung lgbk Moderator |
|||
05.11.2020, 10:52
Beitrag #2
|
|||
|
|||
RE: Programm Schwimmer optimieren
Wichtigste Änderung: ohne goto und Sprungmarken arbeiten.
Gruß Tommy "Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt) |
|||
05.11.2020, 10:55
(Dieser Beitrag wurde zuletzt bearbeitet: 05.11.2020 10:56 von MicroBahner.)
Beitrag #3
|
|||
|
|||
RE: Programm Schwimmer optimieren
Sorry, aber dein Sketch ist das absolute Chaos. Du springst wie wild hin und her, in Schleifen rein, aus ifs raus. Das kann man nicht vernünftig nachvollziehen.
Verabschiede dich erstmal vom goto. Das braucht man (normalerweise) nicht, und es führt nur zu unübersichtlichen Programmen. Und die while-Schleife aufgrund des Schwimmerzustandes blockiert dir bei entsprechendem Schwimmerzustand den ganzen Sketchablauf. Das kann mit etwas anderem zusammen nicht funktionieren. Gruß, Franz-Peter |
|||
06.11.2020, 13:55
Beitrag #4
|
|||
|
|||
RE: Programm Schwimmer optimieren
Danke für die Antworten,
wirklich weiter komme ich dadurch aber nicht. Das mit den "gotos's" stammt aus der C-Control-Zeit. Meine vorhandene Gießanlage hat bis dato elektrisch gut funktioniert. Nun ist die Hardware in die Jahre gekommen und deshalb wollte ich alles neu machen und mit einen Feuchtsensor betreiben. Das Arduino- System schien mir dafür am besten geeignet. Einen Lösungsansatz für das Programm hätte ich aber schon erwartet, welcher Schleifentyp, wie unterbrechen usw. Wenn ich das "void giessen" in mein Gesamtprogramm einbaue, dann wird es doch bei jedem Aufruf nur einmal durchlaufen oder? Danke im Voraus Gruß Max |
|||
06.11.2020, 14:12
Beitrag #5
|
|||
|
|||
RE: Programm Schwimmer optimieren
(06.11.2020 13:55)maxo schrieb: .... Def. ist der Arduino richtig, allerdings solltest du dich vom Basic lösen. Warum fängst du dann nicht damit an, die Grundlagen von C++ zu lesen und verstehen ? Das kannst du am besten mit den Beispilen der IDE. Da steht auch, wenn man den Zustand eine Eingangspins nutzen will, muss man diesen erst einlesen und danach weiter verarbeiten. Und einen Eingang solltest du immer mit einem Pullup/Pulldown-Widerstand abschließen, damit dieser einen definierten Zustand erhält, andernfallst flowted dieser, was wiederum Fehler verursacht. Weiterhin ist die "while-Schleife" hier überflüssig, da du mit der loop schon eine Schleife hast, die immer läuft und niocht blockiert werden darf und das macht die while-Schleife. Statt dieser verwendest du eine if-Abfrage. Ich hoffe erst mal genug Infos geliefert zu haben. Wenn noch Fragen sind....leg los. Gruß Dieter I2C = weniger ist mehr: weniger Kabel, mehr Probleme. ![]() |
|||
06.11.2020, 15:06
Beitrag #6
|
|||
|
|||
RE: Programm Schwimmer optimieren
Hallo Max,
(06.11.2020 13:55)maxo schrieb: Das mit den "gotos's" stammt aus der C-Control-Zeit.Also ich habe auch viel mit der C-Control gemacht. Richtig große Programme mit mehreren tausend Zeilen Code. Da kam nie ein goto vor. D.h. goto hat nichts mit C-Control zu tun, sondern mit dem eigenen Programmierstil. Da solltest Du also dran arbeiten um dich von der 'goto' Denke zu lösen. Das führt einfach nur zu schwer nachzuvollziehenden und fehlerträchtigen Programmen. Und es geht immer auch ohne. Dass die while-Schleife ein großes Problem ist hat dir ja auch Dieter schon geschrieben. Die führt auch dazu, dass das nicht im 'Gesamtprogramm' funktioniert. Du musst lernen 'blockadefrei' zu programmieren. Das erfordert ein wenig Umdenken. Deine Schleife ist der 'loop'. Der sollte ohne große Verzögerungen immer durchlaufen. In dieser Schleife kannst Du nun abfragen, ob ein Ereignis aufgetreten ist, dass eine Aktion erfordert. Also z.B. dass dein Schwimmerschalter anspricht, und Du den Zufluß abstellen muss. Oder dass eine Zeit abgelaufen ist, und Du deshalb den Zufluß stoppen musst. Mal als Pseudo-Code in der Art: Code: void loop () { Für die Zeitfunktionen kannst Du dich entweder mit millis beschäftigen und das Beispiel 'Blink without delay' der IDE anschauen und verstehen lernen. Oder Du verwendest die Zeitfunktionen der Library 'MobaTools'. Das ist etwas einfacher, und da sind auch Beispiele dabei. Die MobaTools kannst Du über den Bibliotheksmanager installieren. Gruß, Franz-Peter |
|||
06.11.2020, 21:43
(Dieser Beitrag wurde zuletzt bearbeitet: 06.11.2020 21:44 von MicroBahner.)
Beitrag #7
|
|||
|
|||
RE: Programm Schwimmer optimieren
(05.11.2020 10:43)maxo schrieb: Das Gießwasser soll zunächst in einen 10L Behälter getankt werden.Wodurch soll der ganze Tankvorgang eigentlich gestartet werden? Gruß, Franz-Peter |
|||
06.11.2020, 22:32
Beitrag #8
|
|||
|
|||
RE: Programm Schwimmer optimieren
Basic...
das erinnert mich an was... da wurde mal programmiert: Code: ON ERROR GOSUB 9000 lgbk An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollt dann liest euch bitte diese Anleitung durch. Ich spreche fließend Schwäbisch, Deutsch das Notwendigste und für die Begriffsstutzigen erprobtes Tacheles mit direkten Hinweisen ohne Schnörkel... 1+1 = 10 ![]() ![]() |
|||
|
|
Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste