Button klicked die Zweite

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
marwer
Beiträge: 45
Registriert: 20 Mai 2024, 15:45

Button klicked die Zweite

Beitrag von marwer » 16 Nov 2024, 14:45

1000003704.jpg
1000003704.jpg (297.12 KiB) 3149 mal betrachtet
In ibigem screenshot sind 2 Codeschnipsel gezeigt:
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

Benutzeravatar
fishfriend
Beiträge: 2218
Registriert: 26 Nov 2010, 11:45

Re: Button klicked die Zweite

Beitrag von fishfriend » 16 Nov 2024, 16:44

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
ft Riesenräder PDF: ftcommunity.de/knowhow/bauanleitungen
TX-Light: Arduino und ftduino mit RoboPro

werli
Beiträge: 85
Registriert: 25 Apr 2024, 10:42

Re: Button klicked die Zweite

Beitrag von werli » 16 Nov 2024, 17:16

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.
lg werli

marwer
Beiträge: 45
Registriert: 20 Mai 2024, 15:45

Re: Button klicked die Zweite

Beitrag von marwer » 16 Nov 2024, 17:45

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

werli
Beiträge: 85
Registriert: 25 Apr 2024, 10:42

Re: Button klicked die Zweite

Beitrag von werli » 16 Nov 2024, 18:27

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.
lg werli

marwer
Beiträge: 45
Registriert: 20 Mai 2024, 15:45

Re: Button klicked die Zweite

Beitrag von marwer » 16 Nov 2024, 18:33

danke...aber das ist zu hoch für mich ...für mich ist das "unexpected code execution"
lg martin

Benutzeravatar
fishfriend
Beiträge: 2218
Registriert: 26 Nov 2010, 11:45

Re: Button klicked die Zweite

Beitrag von fishfriend » 16 Nov 2024, 19:05

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
ft Riesenräder PDF: ftcommunity.de/knowhow/bauanleitungen
TX-Light: Arduino und ftduino mit RoboPro

marwer
Beiträge: 45
Registriert: 20 Mai 2024, 15:45

Re: Button klicked die Zweite

Beitrag von marwer » 16 Nov 2024, 20:26

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 !?

marwer
Beiträge: 45
Registriert: 20 Mai 2024, 15:45

Re: Button klicked die Zweite

Beitrag von marwer » 16 Nov 2024, 20:43

...aber eigentlich bildet der screenshot das Programm ab...

marwer
Beiträge: 45
Registriert: 20 Mai 2024, 15:45

Re: Button klicked die Zweite

Beitrag von marwer » 16 Nov 2024, 22:14

...ich habe die dateiextension auf jpg umbenannt...muss auf ft zurückgesetzt werden

werli
Beiträge: 85
Registriert: 25 Apr 2024, 10:42

Re: Button klicked die Zweite

Beitrag von werli » 16 Nov 2024, 23:21

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....
PGM_Button_Test.jpg
PGM_Button_Test.jpg (98.44 KiB) 2995 mal betrachtet

BF_Button_Test.jpg
BF_Button_Test.jpg (14.62 KiB) 2995 mal betrachtet
PGM_Button_Test_Schleife.jpg
PGM_Button_Test_Schleife.jpg (106.05 KiB) 2995 mal betrachtet
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

Benutzeravatar
fishfriend
Beiträge: 2218
Registriert: 26 Nov 2010, 11:45

Re: Button klicked die Zweite

Beitrag von fishfriend » 17 Nov 2024, 06:50

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
ft Riesenräder PDF: ftcommunity.de/knowhow/bauanleitungen
TX-Light: Arduino und ftduino mit RoboPro

marwer
Beiträge: 45
Registriert: 20 Mai 2024, 15:45

Re: Button klicked die Zweite

Beitrag von marwer » 17 Nov 2024, 15:57

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
Dateianhänge
1000003732.jpg
1000003732.jpg (271.05 KiB) 2901 mal betrachtet

werli
Beiträge: 85
Registriert: 25 Apr 2024, 10:42

Re: Button klicked die Zweite

Beitrag von werli » 17 Nov 2024, 17:04

Prima,

der weg ist zwar etwas umständlich, aber es zeigt sich mal wieder "gehtnich - gibsnich" :)
lg werli

Benutzeravatar
phg-berlin
Beiträge: 58
Registriert: 12 Mär 2024, 20:22
Wohnort: Berlin
Kontaktdaten:

Re: Button klicked die Zweite

Beitrag von phg-berlin » 17 Nov 2024, 18:51

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

Antworten