Absauganlage über den Arduino

  • Hochintetessant aber irrelevant.

    Void() existiert nicht! Jedenfalls lagert man keine Programmteile "in ein Void()" aus.

    Void Funktionsname() existiert. Gewöhnt euch ab, irgendwelchen sprachlichen Unsinn zu schreiben und hinterher stundenlang zu rechtfertigen.

    Was du meintest war schlicht eine Funktion (ohne Rückgabewert). Dann sag doch auch "Funktion". Wenn der User unter Void()" nachgoogelt, wird er kaum schlau werden.

    Und ob du die Programmteile nun in Funktionen auslagern oder nicht... Das Grundkonzept hier ist und bleibt eine Superloop (abzugrenzen gegen z. B. Interruptkonzpte oder Threading oder sequezielle Programmabläufe).

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Edited once, last by Gnom (June 15, 2022 at 11:29 AM).

  • Guten Tag Gnom,

    Wenn der User unter Void()" nachgoogelt, wird er kaum schlau werden.

    Bevor du wieder irgendwelche Thesen aufstellst, solltest du deine Aussagen auch kontrollieren, und nicht nur etwas hinschreiben.

    Gibt man "void()" direkt in die Google-Suche ein, führt der erste Link zu Wikipedia.
    Wenn du diese Erklärung und Erläuterung für unverständlich hältst, dann ist es wohl nicht unser aller Problem.

    es grüßt euer
    Willy

    es grüßt euer
    Willy

  • Das Thema void ist kontrovers: https://towardsdatascience.com/are-void-methods-bad-6d67dedc6600

    Quote

    On their own, Void methods are dead code. It’s like a virus. On its own it cannot “live” in the world of programming. And just like a virus requires a host to be truly alive. Void methods, require side-effects[1][2] to actually survive.


    In manchen Programmiersprachen wird strikt zwischen Prozedur und Funktion unterschieden.

    Prozedur:

    Hat Seiteneffekte. Die print-Funktion aus Python wäre z.B. eine Prozedur.

    void Funktionen funktionieren nur, wenn sie Seiteneffekte haben.

    Funktion:

    Hat keine Seiteneffekte. Eine Funktion liefert irgendein Rückgabewert zurück.

    Nichts wird verändert.

    Die void-Funktionen sind nur dann nützlich, wenn sie Seiteneffekte haben.

    Wann void verwendet werden soll/kann und wann nicht, steht im Artikel.

    Darüber kann man sich hier im Forum bestimmt noch auslassen, nachdem der Artikel gelesen worden ist.

    Ich denke mal, dass oftmals void Funktionen verwendet werden, um das herumreichen der Pointer zu verhindern.

  • Guten Tag Gnom,

    Das Grundkonzept hier ist und bleibt eine Superloop

    Bevor du dich hier weiter mit irgendwelchen Spitzfindigkeiten über Andere aufregst, deine eigenen Behauptungen und Thesen aber nicht verifiziert hast, nur so viel tum Thema:
    Super-Loop, dass entstammt doch wohl auch nur deiner Vorstellungskraft und Aussageform.
    Unter Superloop oder Super-Loop findet man alles, auch Achterbahnen und sonstiges mit Google nur keinen Hinweis auf den ersten 3 Seiten zur Programmiersprache C/C++ !

    Und warum soll der Loop einfach Super sein ? Es ist eine Endlosschleife ohne Abbruchbedingung. Mehr nicht und nicht weniger.

    es grüßt euer
    Willy

    es grüßt euer
    Willy

  • Jedenfalls wird alles mit #define vor dem Kompilieren des Quellcodes durch die Zahlen ersetzt.

    Es handelt sich nicht um Variablen.

    #define ist 'veraltet'. Auch in der Arduino-Referenz werden Konstanten bevorzugt.

    Ich hatte den Link hier (im Forum) auch einmal gepostet (#define vs. const).

    #define ist aber ein guter Hinweis. Das spart Speicherplatz, weil diese definierten Konstanten direkt vor dem Compilieren in den Quellcode eingebaut werden und somit keinen Variablenspeicherplatz belegen. Sollte man bei jeder passenden Gelegenheit nutzen.

    dann doch besser "constexpr [type] [name] {Wert}" , also beispielsweise "constexpr int BITRATE {9600}"

    Was du meintest war schlicht eine Funktion (ohne Rückgabewert).

    ist das dann nicht eine Methode ?

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

  • Hallo Perlchamp,

    dann doch besser "constexpr [type] [name] {Wert}" , also beispielsweise "constexpr int BITRATE {9600}"

    Grauenvolleren Quellcode vermag ich mir nicht mehr vorzustellen.

    Nö. "Methode" ist ein Begriff aus der Objektorientierten Programmierung (OOP).

    Eine Methode ist innerhalb des instanziierten Objektes "Klasse" eine Prozedur (ohne Rückgabewert) oder Funktion (mit Rückgabewert), die mit den Daten (der andere Bestandteil einer Klasse) eines Objektes irgendwas anstellt.

    Und verwechsle das Ganze jetzt bloß nicht mit der Klassendefinition...


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Grauenvolleren Quellcode vermag ich mir nicht mehr vorzustellen.

    ganz deiner Meinung. Aber wenn du möglichst wenig Speicher belegen/verbrauchen willst - und darum ging es - dann sollte dieser Code am wenigsten 'verbraten' ...

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

  • Guten tag Perlchamp,

    ganz deiner Meinung. Aber wenn du möglichst wenig Speicher belegen/verbrauchen willst - und darum ging es - dann sollte dieser Code am wenigsten 'verbraten' ...

    Ist das eine allgemeine Feststellung oder eine Arduino IDE bezogene Feststellung, ich verkneife mir hier bewusst das Wort Behauptung zu benutzen ?

    Grundsätzlich so meine Feststellung, macht es bei der Boardauswahl für ein Arduino Board über diese IDE keinen Unterschied, ob man über const Variablentyp oder #define einen Wert festlegt, der vom Compiler als solches mit dem Inhalt dieses Bezeichners eingearbeitet und übersetzt wird. Das Ergebnis ist immer das Gleiche. Und solange dieses #define nicht gegen die Compiler-Direktiven verstößt, würde ich auch das Wort veraltet nicht gebrauchen. In der Arduino Referenz wird nur von nicht empfohlen gesprochen.
    Wenn man jedoch über die Boardverwaltung eine andere Quelle auswählt macht es jedoch einen Unterschied. Bei einigen ATTiny Typen oder anderen Boards führt die Verwendung von const zu einer größeren RAM Nutzung als wenn man klassisch auf #define setzt.
    Wenn sie, oder du von "verbraten" sprichst, dann die die Methode mit setup() und loop() einer der größten Ressourcen-Verschwendungen.
    Einfach int main(void) verwenden, und das fertige Programm wird um fast 1k kleiner.

    es grüßt euer
    Willy

    Edited once, last by WillyR_aus_C: Schreibfehler korrigiert (June 15, 2022 at 3:27 PM).

  • In der Arduino Referenz wird nur von nicht empfohlen gesprochen.

    richtig, sorry.

    EDIT:

    Kannst ruhig 'du' zu mir 'sagen' ...

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

  • Guten Tag Colonn,

    Haha :bravo2:

    jetzt geht es auch. Der Servo lässt den Arduino also für Millisekunden abstürzen und deswegen hatte ich das Problem. Code funktioniert jetzt. Werde das mal mit den zwei weiteren probieren ob es dann immernoch funktioniert.

    Noch ein Hinweis zu den millis():
    Irgendwann nach einigen Monaten läuft auch diese Variable mal über, das heißt der Zählwert beginnt wieder bei 0 ( Null).
    Nun weis ich nicht, ob dein Arduino im Dauerbetrieb und ständig unter Strom bleibt, und ob dieser Überlauf-Effekt bei dir auftreten könnte.
    Darum prüfe ggf ob der Startwert aus millis() ausgelesen Plus der Verweilzeit überhaupt erreicht werden kann. Nicht dass das Programm dann in eine Endlosschleife festhängt, ohne das die Abschaltbedingung erreicht werden kann.
    Wenn dieses Steuer-Arduino nur dann unter Spannung ist, wenn du in der Werkstatt / Garage arbeitest, dann betrachte diese Anmerkung als Gegenstandslos.

    es grüßt euer
    Willy

  • Irgendwann nach einigen Monaten läuft auch diese Variable mal über, das heißt der Zählwert beginnt wieder bei 0 ( Null).

    Richtig. Mein Wissensstand ist folgender: macht nichts, da passiert nichts, läuft ohne probleme weiter. Wieso und weshalb weiß ich im Detail nicht, lerne aber immer gerne dazu :)

    EDIT: ich glaube nach ~49 Tagen ...

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

  • Guten Tag Perlchamp,

    Es macht einen Unterschied.
    Hierbei kommt es darauf an wie man das Programm bzw die Abfrage im Detail als Programmcode schreibt.
    Ich hatte das Problem auch schon einmal. Ja, das Programm zwar läuft weiter.
    Ich will jetzt auch nichts falsches sagen. Wenn man diesen Zeitwert der millis() Abfrage nach der Abfrage der Startzeit mit += erweitert und somit die Endzeit ermittelt hat, dann hat auch der Abfragewert ( Abschaltzeitpunkt) schon diesen Wertüberlauf. Damit ist man wieder Konform zum aktuellen übergelaufenen millis() Wert. Das entspricht dann &.
    Irgendwo hatte ich damals einen Zuordnungsfehler in der IF Abfrage.

    Da müsste ich jetzt mal mein ganzes Programmarchiv durchwühlen. Aus dem Kopf bringe ich das auf die Schnelle jetzt auch nicht mehr zusammen.
    Es betrifft aber nur Programme oder Boards die unentwegt durchlaufen.

    es grüßt euer
    Willy

  • ich persönlich 'traue' den Arduino-Seiten generell sehr wenig, aber wenn's nützt ;)

    Quote

    I don't suppose that you will leave this program running for 49 days to see what happens (please feel free to do so), but suppose that you had used the principle for something more critical that simply must not do something silly after 49 and a bit days. Fear not. Using unsigned variables and subtraction for the elapsed period the comparison will work even if/when millis() rolls over to zero when the program is running. This is not the place to have a diversion into the reasons why this works but trust me, it does.


    Ist von HIER ...

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---

  • Guten Tag Colonn,

    Noch ein Hinweis zu den millis():
    Irgendwann nach einigen Monaten läuft auch diese Variable mal über, das heißt der Zählwert beginnt wieder bei 0 ( Null).
    Nun weis ich nicht, ob dein Arduino im Dauerbetrieb und ständig unter Strom bleibt, und ob dieser Überlauf-Effekt bei dir auftreten könnte.
    Darum prüfe ggf ob der Startwert aus millis() ausgelesen Plus der Verweilzeit überhaupt erreicht werden kann. Nicht dass das Programm dann in eine Endlosschleife festhängt, ohne das die Abschaltbedingung erreicht werden kann.
    Wenn dieses Steuer-Arduino nur dann unter Spannung ist, wenn du in der Werkstatt / Garage arbeitest, dann betrachte diese Anmerkung als Gegenstandslos.

    Das mit den millis sollte kein Problem sein. Wenn die Werkstatt abgeschlossen ist, dann ist alles stromlos sprich der Arduino aus. Aber trotzdem danke für den Hinweis.

  • Moin Colonn,

    falls dein Thema damit erledigt ist, dann, bitte, als erledigt markieren.

    Das geht oben bei Thema bearbeiten.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • So habe jetzt mal wieder Zeit gehabt. Habe das Programm getestet und es funktioniert... für eine halbe Minute ungefähr. Dann geht erstmal garnichts mehr am Servo. Nach einer weiteren halben Minute geht der Servo zwar wieder, aber es gibt beim schließen plötzlich keine Verzugszeit mehr. Sowohl auf als auch zu geht direkt. :-/:-/

  • Guten Tag Colonn,

    So habe jetzt mal wieder Zeit gehabt. Habe das Programm getestet und es funktioniert... für eine halbe Minute ungefähr. Dann geht erstmal garnichts mehr am Servo. Nach einer weiteren halben Minute geht der Servo zwar wieder, aber es gibt beim schließen plötzlich keine Verzugszeit mehr. Sowohl auf als auch zu geht direkt. :-/:-/

    Könntest du hier mal bitte den gesamten Code einstellen, und bitte die Code Ansicht benutzen ;)

    es grüßt euer
    Willy

  • Und was sagt das dem User? Gar nichts. Wenn er das lernen will, was du meinst, muss er in Wiki unter "Funktion" und "Prozedur" nachsehen.

    Hör endlich auf, das Halbwissen, dass du hier verbreitest auch noch zu rechtfertigen. Es gibt kein void() !!! Void ist ein Schlüsselwort, dass in C besagt, dass kein Wert zurückgegeben wird. In was lagerst du denn Programmteile aus, die einen Integerwert zurückgeben? In ein int() ?

    Das entstammt keineswegs "wohl auch nur" meiner Vorstellungskraft - wenn du dir mal die Mühe machst unter "Superloop Programmierung" zu googeln, wirst du zahlreiche Quellen finden. Wenn du ganz allgemein bei C nichts dazu findest, liegt das daran, dass es ein Konstrukt aus der Embedded-Programmierung ist.

    Wenn du nicht googeln kannst und deshalb bei Achterbahnen landest, wenn du nach Superloop suchst, ist das wirlich eine Superleistung von dir!

    "super" ist übrigens lateinisch und heißt "über" - das bedeutet, es ist eine übergeordnete Schleife, die alle anderen Funktionen des Programms steuert.


    Mach dich doch hier nicht so zum Affen!

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

    Edited 2 times, last by Gnom (June 24, 2022 at 8:16 PM).

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!