Button klicked die Zweite
Forumsregeln
Bitte beachte die Forumsregeln!
Bitte beachte die Forumsregeln!
Button klicked die Zweite
Der erste funktioniert wie erwartet: Beim Drücken (und Halten) der Taste wird "gedrückt" und "wahr" ausgegeben. Beim Loslassen "losgelassen" und "falsch".
Der zweite funktioniert NICHT wie erwartet: Beim Drücken (und Halten) der Taste wird "gedrückt" und "wahr" und anschließend der (hochzählende) count ausgegeben. Soweit so gut.
Beim Loslassen wird die 2. Falls_Bedingung nicht erreicht. Der count läuft weiter. Offensichtlich wird während der Ausführung der "solange-Schleife" das Ereignis "Taste losgelassen" nicht gemonitored!? Oder? Wer kann helfen?
Grüße Martin
- fishfriend
- Beiträge: 2218
- Registriert: 26 Nov 2010, 11:45
Re: Button klicked die Zweite
Hallo...
Ich habe soetwas mit den Tasten immer in zwei unabhängige parallellaufende Programme laufen lassen.
Die Auswertung ist dann im Hauptprogramm.
Mit freundlichen Grüßen
Holge
Ich habe soetwas mit den Tasten immer in zwei unabhängige parallellaufende Programme laufen lassen.
Die Auswertung ist dann im Hauptprogramm.
Mit freundlichen Grüßen
Holge
ft Riesenräder PDF: ftcommunity.de/knowhow/bauanleitungen
TX-Light: Arduino und ftduino mit RoboPro
TX-Light: Arduino und ftduino mit RoboPro
Re: Button klicked die Zweite
Moin,
ich habe die Funktion "wenn Schaltfläche xxx angeklickt" so verstanden:
Bei jedem Klick der Schaltfläche wird der programmierte Inhalt genau 1 mal durchlaufen. So hat es mir ft erklärt.
Das bedeutet, dass Drücken des Button lässt einen Ablauf zu und auch das Loslassen lässt einen Ablauf zu.
Zu dem soll der Inhalt so knapp wie möglich sein, denn die Funktion wird per Interrupt aufgerufen und unterbricht das laufende Hauptprogramm.
Ich befürchte deshalb, dass programmierte Inhalte, die mehr als 1 Programmdurchlauf benötigen, innerhalb dieser Funktion nicht einwandfrei abgearbeitet werden.
ich habe die Funktion "wenn Schaltfläche xxx angeklickt" so verstanden:
Bei jedem Klick der Schaltfläche wird der programmierte Inhalt genau 1 mal durchlaufen. So hat es mir ft erklärt.
Das bedeutet, dass Drücken des Button lässt einen Ablauf zu und auch das Loslassen lässt einen Ablauf zu.
Zu dem soll der Inhalt so knapp wie möglich sein, denn die Funktion wird per Interrupt aufgerufen und unterbricht das laufende Hauptprogramm.
Ich befürchte deshalb, dass programmierte Inhalte, die mehr als 1 Programmdurchlauf benötigen, innerhalb dieser Funktion nicht einwandfrei abgearbeitet werden.
lg werli
Re: Button klicked die Zweite
moin,moin
na ja, warum wird der interrupt nicht während,des Ablaufs der Solange-Schleife ausgelöst? Andere Ereignisse, wie das Drücken eines anderen buttons ,werden ja bemerkt; wäre ja auch schlimm, wenn nicht. Das Hauptprogramm besteht. ja nur aus einer Dauerschleife.
lg martin
na ja, warum wird der interrupt nicht während,des Ablaufs der Solange-Schleife ausgelöst? Andere Ereignisse, wie das Drücken eines anderen buttons ,werden ja bemerkt; wäre ja auch schlimm, wenn nicht. Das Hauptprogramm besteht. ja nur aus einer Dauerschleife.
lg martin
Re: Button klicked die Zweite
Moin,
ich bin kein Python-Freak und habe da nur Grundkenntnisse.
Ich kenne aber aus anderen Programmierarten, das Instanzen teilweise nicht in einem Zyklus komplett abgeschlossen sind und z.B. erst im 2. Zykluslauf temporäre Variablen wieder frei gemacht werden, usw. .
Wenn hier die "Schaltflächen-Funktion" genau einen Zykluslauf pro Klickereingnis zulässt, dann werden weitere Klickereignisse benötigt, um eine gestartete Instanz abzuschliessen. Dadurch würde das "Loslassen-Ereignis" dann die gestartete Instanz weiter bearbeiten und nicht das gewünschte/erwartete Ergebnis bringen.
Das würde auf deine zweite Lösung passen, die Funktion "wiederhole solange ...." wird mehr als einen Zykluslaufbenötigen.
Die dort eingesetzte "warte-Funktion" bewirkt, so meine Erkenntnisse mit Coding, nur eine Unterbrechung des Programmlaufs bzw. des aufrufenden Threads um eine Sekunde.
ich bin kein Python-Freak und habe da nur Grundkenntnisse.
Ich kenne aber aus anderen Programmierarten, das Instanzen teilweise nicht in einem Zyklus komplett abgeschlossen sind und z.B. erst im 2. Zykluslauf temporäre Variablen wieder frei gemacht werden, usw. .
Wenn hier die "Schaltflächen-Funktion" genau einen Zykluslauf pro Klickereingnis zulässt, dann werden weitere Klickereignisse benötigt, um eine gestartete Instanz abzuschliessen. Dadurch würde das "Loslassen-Ereignis" dann die gestartete Instanz weiter bearbeiten und nicht das gewünschte/erwartete Ergebnis bringen.
Das würde auf deine zweite Lösung passen, die Funktion "wiederhole solange ...." wird mehr als einen Zykluslaufbenötigen.
Die dort eingesetzte "warte-Funktion" bewirkt, so meine Erkenntnisse mit Coding, nur eine Unterbrechung des Programmlaufs bzw. des aufrufenden Threads um eine Sekunde.
lg werli
Re: Button klicked die Zweite
danke...aber das ist zu hoch für mich ...für mich ist das "unexpected code execution"
lg martin
lg martin
- fishfriend
- Beiträge: 2218
- Registriert: 26 Nov 2010, 11:45
Re: Button klicked die Zweite
Hallo...
Ich hab da eventuell so eine Ahnung was es sein könnte.
Kannst du mir mal das Programm schicken?
Mit freundlichen Grüßen
Holger
Ich hab da eventuell so eine Ahnung was es sein könnte.
Kannst du mir mal das Programm schicken?
Mit freundlichen Grüßen
Holger
ft Riesenräder PDF: ftcommunity.de/knowhow/bauanleitungen
TX-Light: Arduino und ftduino mit RoboPro
TX-Light: Arduino und ftduino mit RoboPro
Re: Button klicked die Zweite
Im Prinzip sehr gerne...aber nach unzähligen Versuchen habe ich gelesen "Die App kann nur auf Fotos. zugreifen". "*.ft"-dateien kann ich nicht hochladen !?
Re: Button klicked die Zweite
...aber eigentlich bildet der screenshot das Programm ab...
Re: Button klicked die Zweite
...ich habe die dateiextension auf jpg umbenannt...muss auf ft zurückgesetzt werden
Re: Button klicked die Zweite
Moin,
nimm das Programm so wie im ersten Bild abgebildet.
Du siehst, beim Drücken des Button wird die Funktion genau 1 mal komplett abgearbeitet. Beim Loslassen des Button passiert das auch nur genau 1 mal. USW....
Wenn du die Funktion "wiederhole solange..." einsetzt, siehe 3. Bild, dann siehst du in der Konsoleanzeige, dass das Zählen dauernd weiter läuft, auch wenn der Button losgelassen wurde. Alle weiteren Klicks auf den Button werden nicht gezählt, weil Coding in der "wiederhole-Schleife" feststeckt, da diese in einem einzigen PGM-Durchlauf nicht abgeschlossen wird.
Die Coding-Beschreibung dazu ist so knapp, dass man viel Wünsche hineininterpretieren kann. Meiner Meinung nach ist das ein Bug....
Ich denke, eine etwas ander Programmierung sollte eine Lösung zu dem Problem bringen. Z.B. im Programm entsprechend Bild 1 in der Abfrage "Ereignis = wahr" eine neue Variable auf "wahr" setzen und diese Variable in der Abfrage "Ereignis = falsch" auf "falsch" setzen. Nun über das Hauptprogramm das Zählen programmieren. Dazu habe ich noch nichts gebastelt, ich hoffe dass da keine neuen Fallstricke den Lösungsweg versperren.
(PS: Den "remote_status_indicator" benutze ich im Bedienfeld oder auf dem Display, um zu sehen, wann ein Programm nach dem Starten dann endlich läuft.)
nimm das Programm so wie im ersten Bild abgebildet.
Du siehst, beim Drücken des Button wird die Funktion genau 1 mal komplett abgearbeitet. Beim Loslassen des Button passiert das auch nur genau 1 mal. USW....
Wenn du die Funktion "wiederhole solange..." einsetzt, siehe 3. Bild, dann siehst du in der Konsoleanzeige, dass das Zählen dauernd weiter läuft, auch wenn der Button losgelassen wurde. Alle weiteren Klicks auf den Button werden nicht gezählt, weil Coding in der "wiederhole-Schleife" feststeckt, da diese in einem einzigen PGM-Durchlauf nicht abgeschlossen wird.
Die Coding-Beschreibung dazu ist so knapp, dass man viel Wünsche hineininterpretieren kann. Meiner Meinung nach ist das ein Bug....
Ich denke, eine etwas ander Programmierung sollte eine Lösung zu dem Problem bringen. Z.B. im Programm entsprechend Bild 1 in der Abfrage "Ereignis = wahr" eine neue Variable auf "wahr" setzen und diese Variable in der Abfrage "Ereignis = falsch" auf "falsch" setzen. Nun über das Hauptprogramm das Zählen programmieren. Dazu habe ich noch nichts gebastelt, ich hoffe dass da keine neuen Fallstricke den Lösungsweg versperren.
(PS: Den "remote_status_indicator" benutze ich im Bedienfeld oder auf dem Display, um zu sehen, wann ein Programm nach dem Starten dann endlich läuft.)
lg werli
- fishfriend
- Beiträge: 2218
- Registriert: 26 Nov 2010, 11:45
Re: Button klicked die Zweite
Hallo...
Ich meinte das etwas anders.
Schreib mir über das Forum einen Mail und ich antworte dir über meine Mailadresse.
Speicher das Programm lokal auf deinem Rechner und sende es mir als Emailanhang.
Mit freundlichen Grüßen
Holger
Ich meinte das etwas anders.
Schreib mir über das Forum einen Mail und ich antworte dir über meine Mailadresse.
Speicher das Programm lokal auf deinem Rechner und sende es mir als Emailanhang.
Mit freundlichen Grüßen
Holger
ft Riesenräder PDF: ftcommunity.de/knowhow/bauanleitungen
TX-Light: Arduino und ftduino mit RoboPro
TX-Light: Arduino und ftduino mit RoboPro
Re: Button klicked die Zweite
Danke an Werli für die ausführliche Antwort. Das Einführen einer zweiten Statusvariablen und das Auslagern des Zählens in das Hauptprogramm funktioniert (siehe screen shot)
mfg
martin
mfg
martin
- Dateianhänge
-
- 1000003732.jpg (271.05 KiB) 2901 mal betrachtet
Re: Button klicked die Zweite
Prima,
der weg ist zwar etwas umständlich, aber es zeigt sich mal wieder "gehtnich - gibsnich"
der weg ist zwar etwas umständlich, aber es zeigt sich mal wieder "gehtnich - gibsnich"

lg werli
- phg-berlin
- Beiträge: 58
- Registriert: 12 Mär 2024, 20:22
- Wohnort: Berlin
- Kontaktdaten:
Re: Button klicked die Zweite
Hallo werli, hallo marwer,
vielen Dank, ihr habt mir bei einem scheinbar ganz anderen Problem geholfen.
Das Problem war, dass ich ein Modell mit vier Mini-Tastern habe. Jedesmal, wenn einer gedrückt wird, soll eine zugeordnete LED kurz aufleuchten und ein zugehöriger hochgeladener Ton abgespielt werden. Funktioniert auch, aber oft "stottern" die Töne. Es war eigentlich klar, dass es irgendwie an den Interrupts liegt. Ich hatte aber keine Idee, was ich dagegen tun kann. Liegt aber eigentlich auf der Hand: Die Ausgabe der Töne ins Hauptprogramm verlagern und von einer zugeordneten Statusvariable abhängig machen. Diese wird sofort wieder zurückgesetzt. Gesetzt wir sie in den Ereinis-Behandlungsroutinen des jeweiligen Tasters. Klappt jetzt wunderbar.
Ein Rätsel gibt es aber noch: Wenn ich statt der eigenen Audio-Datei einen "eingebauten" sound benutze, tritt das Stottern nicht auf. Ich verstehe nicht, wieso das so ist. Ist aber egal.
MfG
Horst
vielen Dank, ihr habt mir bei einem scheinbar ganz anderen Problem geholfen.
Das Problem war, dass ich ein Modell mit vier Mini-Tastern habe. Jedesmal, wenn einer gedrückt wird, soll eine zugeordnete LED kurz aufleuchten und ein zugehöriger hochgeladener Ton abgespielt werden. Funktioniert auch, aber oft "stottern" die Töne. Es war eigentlich klar, dass es irgendwie an den Interrupts liegt. Ich hatte aber keine Idee, was ich dagegen tun kann. Liegt aber eigentlich auf der Hand: Die Ausgabe der Töne ins Hauptprogramm verlagern und von einer zugeordneten Statusvariable abhängig machen. Diese wird sofort wieder zurückgesetzt. Gesetzt wir sie in den Ereinis-Behandlungsroutinen des jeweiligen Tasters. Klappt jetzt wunderbar.
Ein Rätsel gibt es aber noch: Wenn ich statt der eigenen Audio-Datei einen "eingebauten" sound benutze, tritt das Stottern nicht auf. Ich verstehe nicht, wieso das so ist. Ist aber egal.
MfG
Horst