Eine Bedingung im Programm kontinuierlich prüfen.

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen!

    Ich habe eine allgemeine Frage zum Thema Programmieren. Ich möchte an meiner Arduino einen Taster auslesen der dann bei High oder Low eine If-else-Schleife ausführt. Während er die If-Schleife ausführt ist der Zustand des Tasters bisher irrelevant... Also die Bedienung Taster ist gedrückt ist high also macht er alles was im if steht.

    Ich hätte es gerne das er die Schleife abbricht wenn der Taster seinen Zustand währenddessen ändern sollte.

    Wie kann ich das realisieren? :denker:

    Vielen Dank!

  • Eine Bedingung im Programm kontinuierlich prüfen.? Schau mal ob du hier fündig wirst!

  • Leider ist nicht so richtig verständlich, was dein Programm genau machen soll.

    Kannst du es noch mal anders erklären?

    Wahrscheinlich läuft es drauf raus, dass du den Taster innerhalb der If-Schleife abfragen musst und dann ggf. aus der Schleife rausspringst.

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

  • Hallo,

    Zitat

    Ich hätte es gerne das er die Schleife abbricht wenn der Taster seinen Zustand währenddessen ändern sollte.

    Grunssäzlich läuft ein Programm, also jedes Programm, egal welche Sprache, erst mal linear durch, d.h. es wird Zeile für Zeile abgearbeitet. Wenn man Sachen (quasi-) Parallel machen will, braucht man nebenläufige Programmierung (z.B. Threading, Multirprocessing, ... etc).

    Wenn die Plattform das nicht bietet - was AFAIK bei vielen Mikrocontrollern der Fall ist - muss man sich halt selber drum kümmern, dass der Zustand im Hauptprogramm immer wieder abgefragt wird und dann der Programmablauf entsprechend geändert wird.

    Ansonsten solltest du vielleicht mal konkreter Beschreiben, was aktuell passiert und was du gerne ändern würdest, am besten mit realem Code. Dann kann man besser helfen. Aktuell ist das alles ja ein bisschen abstrakt.

    Gruß, noisefloor

    P.S.: if ist eine Bedingung, keine Schleife. Schleifen sind z.B. for, while, do ... while.

  • Colonn

    Hast du schon in C programmiert?

    Arduino hat eine sehr gute Dokumentation.

    Hier gibt es eine Anleitung wie man ein edge_detection programmieren kann.

    Google am besten mal nach Arduino Edge detection / Event handler.

    Hast du schon irgendwas programmiert was du zeigen kannst?

  • Das Problem liegt nicht in der Erkennung des Tasters, sondern in der Struktur des Programms (also des If-Teils, von dem wir noch nicht so wirklich wissen, ob er eine Schleife ist oder nicht). Innerhalb dieses Teils mus auf den Erkannten Taster reagiert werden mit einer Beendigung der Schleife oder des If-Zweiges. Bei einer Schleife kann man dieses Ende (mindestens) einmal pro Schleifendurchlauf gewährleisten. Bei einem linearen Teil wird das schwieriger. Wenn am Ende dieser lieare Teil noch mit delays versehen ist, klappt das gar nicht.

    Also, es braucht erst mal genauere Angaben, was das Programm da eigentlich macht.

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

  • Peuler, du Neunmalklug - ich bin niur halb so blöd, wie du glaubst! Ich habe nie If-Schleife geschrieben. Lies gefälligst genau, bevor du Leute anscheißt! Man kann auch innerhalb des If-Teils eine Schleife haben. Insofern kann der If-Teil eine Schleife sein. Ihr geht mir mit eurer Besserwisserei auf die Erbse!!! Würdet ihr mal was zur Sache schreiben, statt eure Hybris hier auszukosten, wäre mehr geholfen.

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

  • Hallo,

    Zitat

    ich bin niur halb so blöd, wie du glaubst!

    Hm... das ist aber eine ungeschickte Aussage. Sagen wir mal - so rein hypothetisch und natürlich völlig grundlos und ungerechtfertigt - dich hält jemand für unendlich blöd. Dann ist die Hälfte immer noch ...

    Und nein, if leitet nie eine Schleife ein. Die Schleife kann frühsten eine Zeile später kommen. Hat dann aber nicht wirklich mehr was mit der if-Bedingung zu tun.

    Das interessante dabei, dass glaube ich noch nie jemand geschrieben hat, dass es ein Problem mit der else-Schleife gibt ;)

    Gruß, noisefloor

  • Ich habe nie behauptet, dass If eine Schleife einleitet. Und jetzt hört endlich auf mit der Erbsenzählerei. Jeder weiß, was gemeint ist. Ihr benehmt euch wie die letzten ***********. Kommt ihr euch eigentlich nicht blöd vor mit dem dämlichen Gelaber? Was müsst ihr für arme Würstchen sein, dass ihr es nötig habt, euch hier so zu gerieren?

    Spart euch weitere Kommentare- ihr seid doch nur auf Krawall aus. Ich setz euch da hin, wo schon ein paar andere eures Schlages sind - auf die Ignoreliste.

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

  • Colonn Ich bitte um Entschuldigung! Ich konnte nicht ahnen, dass durch meinen durchaus gut gemeinten Hinweis um Klarheit zu schaffen, hier ... na Du hast es ja sicher gelesen.

    denk mal drüber nach

    Habe ich, auch wenn es etwas gedauert hat mich damit zu beschäftigen. Es sind insgesamt vielleicht ca. 20 Beiträge (inkl. Wie frage ich nach Hilfe), die neben einem Link keiner weiteren Erklärung bedurften.

    Zum weiteren Verlauf dieses Threads bis hierher schreibe ich mal besser nichts.

  • Wahrscheinlich läuft es drauf raus, dass du den Taster innerhalb der If-Schleife abfragen musst und dann ggf. aus der Schleife rausspringst.

    Schön, dass solche Fehler transparent übernommen werden :-p


    Auf einem Mikrocontroller verwendet man IRQs, wenn man Ereignisse etwas machen lassen will.

    Ereignisse:

    • "steigende Flanke"
    • "fallende Flanke"
    • "steigende Flanke" oder "fallende Flanke"

    Das löst dann einen definierten Callback aus. Der Callback ist irgendeine Funktion, die irgendwas machen soll, aber aufgrund der Konstruktion nur wenig Zeit zur Ausführung benötigen darf.

    Mit Threads arbeitet man auf einem Mikrocontroller eher nicht und deswegen hat man das Problem, dass man alles in der Hauptschleife machen muss. Aus dem Grund ist es auch einfacher Ereignisse geschehen zu lassen, als ständig die GPIOs zu pollen.

    Hier ist für Arduino ein Beispiel: https://www.arduino.cc/reference/de/l…ttachinterrupt/

  • Und wie steigst du mit deinem IRQ aus der Schleife raus? Indem du in der Schleife das Ergebnis der ISR abfragst, das du in irgendeiner Queue oder Variablen hinterlegst. Hahaha! Dann kannst du in den meisten Fällen auch gleich den Taster abfragen.

    Was mich so ankotzt hier ist, dass man sich von jedem Dahergelaufenen sagen lassen muss, dass alles ein "Fehler" ist, was man macht.

    Bevor du Leuten Fehler vorhältst, sorg' erst mal dafür, dass du weißt, von was du redest.

    Ihr könnt eure Diskussipon zu dem Thema alleine weiterführen. Was hier abgeht, ist zum Kotzen! Und Colonn hat offenbart an der Antwort auf seine Frage sowieso kein Interesse.

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

  • Und wie steigst du mit deinem IRQ aus der Schleife raus? Indem du in der Schleife das Ergebnis der ISR abfragst, das du in irgendeiner Queue oder Variablen hinterlegst. Hahaha! Dann kannst du in den meisten Fällen auch gleich den Taster abfragen.

    Überhaupt nicht! Der soll nicht die Schleife verlassen.

    Ein IRQ / ISR unterbricht die Ausführung des Mikroprozessors/Prozessors und springt in die zuvor definierte Callback-Funktion und nachdem diese Callback-Funktion beendet ist (return), läuft die Schleife nach dem Aufruf weiter. Das Programm selbst, löst diesen Mechanismus nicht aus, sondern die Hardware durch den IRQ/ISR. Wenn man die Hauptschleife beendet, endet auch das Programm.

    Was mich so ankotzt hier ist, dass man sich von jedem Dahergelaufenen sagen lassen muss, dass alles ein "Fehler" ist, was man macht.

    Was denn? Du bist doch derjenige, der hier unbedingt mit dem Kopf durch die Wand will.

    Macht nichts, meine Wand ist aus 30 mm dickem Stahl.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!