Ein ESP32 beobachtet Bewegungen in einem Raum, schaltet dann nach einer "bewegungslosen Zeit" die Stromversorgung aus und versendet dann per MQTT bei AN und AUS eine Nachricht. Mit einem Taster kann man per Hand die Stromversorgung sofort ausschalten und hat noch Zeit den Raum zu verlassen ohne den Bewegungsmelder wieder zu aktivieren. Das Problem: Der ESP ist so beschäftigt, dass der Tastendruck in gewissen Zeiträumen nicht abgefragt wird und man muss dann wild "rumdrücken" bis der Tastendruck angenommen wurde. Nennenswerte Delays sind keine im Programm vorhanden. Benötigt man, um das richtig zu machen, hierfür einen gesonderten Thread der immer auf den Tastendruck lauscht?
:
Verschoben durch Moderator
Kannst du den Taster irgendwie latchen, also z.B. ein Interruptbit in einem Interruptflag-Register benutzen(ohne den Interrupt-Enable dafür anzuschalten)? Musst halt Hardware-Entprellen. Eine zweite Lösung wäre, die Tastenabfrage mehrmals in den rechenintensiven Bereich einzuweben. SW-Designmäßig nicht geil, geht aber evtl auch. mfg mf
Frank K. schrieb: > Benötigt man, um das richtig zu machen, hierfür einen gesonderten Thread > der immer auf den Tastendruck lauscht? Ja, dafür sind die Dinger da: einen Programmteil zu unterbrechen, der von seinem Ersteller nicht unterbrechbar programmiert wurde. Und das Wichtigste an einem Gerät ist, dass es zügig auf Benutzeranfoderungen reagiert. Da darf dann schon ein Thread her...
hallo, die Frage des TO habe ich mir auch schon oft gestellt - ich arbeite an etwas ähnlichem. Lothar M. schrieb: > Ja, dafür sind die Dinger da: einen Programmteil zu unterbrechen, der > von seinem Ersteller nicht unterbrechbar programmiert wurde. Und das > Wichtigste an einem Gerät ist, dass es zügig auf Benutzeranfoderungen > reagiert. Da darf dann schon ein Thread her... Steckt da Ironie drin, oder nicht? Irgendwie interpretiert mein Gehirn da Ironie rein :-D Meine Frage ist ernst gemeint. Danke. mfg F.
Früher (tm) hätte man das über einen Pin-Change Interrupt erledigt. Jetzt schafft es schon ein Mehrkernprozessor nicht mehr einen Taster abzufragen? Der Fortschritt ist nicht aufzuhalten ... Vielleicht liegt es aber doch nur an der Programmierung.
>Steckt da Ironie drin, oder nicht? Nein das meint der ernst. Das ist so. Alternativ kannst du beim esp32 einen kern nur zur tastenabfrage benutzen. >Pin-Change Interrupt Am debouncer wird er scheitern :)
:
Bearbeitet durch User
Obermayer F. schrieb: > Steckt da Ironie drin, oder nicht? > Irgendwie interpretiert mein Gehirn da Ironie rein :-D > > Meine Frage ist ernst gemeint. Nö... Ich sehe keinen Witz, oder so... Zumindest unter Arduino gilt: FreeRTOS ist dabei und loop sowieso schon eine Task. Zudem wird dein ESP einen 2ten Kern haben, welcher fleißig genutzt werden möchte..
Pepe T. schrieb: >>Pin-Change Interrupt > Am debouncer wird er scheitern :) Nach einer erkannten Tastenflanke kann der IRQ bis zum Ausschalten der Stromversorgung getrost disabled werden. Zum Entprellen sollte die Zeitspanne wohl mehr als ausreichend sein.
Obermayer F. schrieb: > Steckt da Ironie drin, oder nicht? > Irgendwie interpretiert mein Gehirn da Ironie rein :-D > > Meine Frage ist ernst gemeint. Natürlich. Da verdienst du dir auch eine ernsthafte Antwort. Da es ja deiner Problembeschreibung nach unbedingt erforderlich ist, daß der Raum ohne auch nur die allerkleinste Unterbrechung überwacht wird, um auch noch Attosekunden kurze Ereignisse sicher zu detektierten, kann der Prozessor natürlich nicht auch noch innerhalb weniger Microsekunden auf Benutzereingaben reagieren. Für das Problem gibt es daher keine Lösung. Oliver
Um eine schnelle Verbesserung zu bekommen werde ich den Vorschlag, bzgl. mehreren Tasterabfragen, einbauen. Thread: ... habe ich noch nie programmiert, werde ich mir dann mal ansehen. Latchen: Per Flip-Flop die Schalterbetätigung speichern? Auch eine super Idee! Bis hierher schonmal vielen Dank Frank
Frank K. schrieb: > Thread: > ... habe ich noch nie programmiert, werde ich mir dann mal ansehen. Threads setzen ein OS voraus, das die verfügbare Rechenzeit und die evtl. mehrfach vorhandenen Kerne irgendwie sinnvoll auf die gestarteten Threads aufteilt. Also, was läuft denn da auf deinem Controller? W.S.
W.S. schrieb: > Also, was läuft denn da auf deinem Controller? FreeRTOS! Die Seiten habe ich in meinem ESP32-Buch immer überlesen :-D ... und dann kommen die Seiten zur Thread Funktionalität... jetzt benötige ich ein paar Tage Zeit
Frank K. schrieb: > FreeRTOS! Als Real Time Betriebssystem sollte dir das doch sogar verraten, wie echtzeitfähig es ist, d.h. welche Reaktionszeit auf ein Event garantiert wird.
Und keine Angst vor Interrupts, klingt furchtbar schwierig aber am Schluss sind's dann nur eine Handvoll Codezeilen.
Frank K. schrieb: > Thread: > ... habe ich noch nie programmiert, werde ich mir dann mal ansehen. Ja, tu das. Und nein, das war keine Ironie, sondern das Mittel der Wahl, wenn man schon einen Mehrkernrechner mit dediziertem Echtzeit-Multitasking-OS hat. > Latchen: > Per Flip-Flop die Schalterbetätigung speichern? Auch eine super Idee! Das ist jetzt aber echt ironisch. Garantiert! Im Ernst: du hast da einen annähernd-GHz-Rechenknecht mit zig tausend Flipflops und brauchst noch extra eines für eine Taste. Das ist krude...
:
Bearbeitet durch Moderator
Frank K. schrieb: > man muss dann wild "rumdrücken" bis der > Tastendruck angenommen wurde. Das ist dann definitiv ein Programmierfehler. Im einfachsten Fall packt man die Entprellib in den Systick Interrupt alle 10ms.
Frank K. schrieb: > Der ESP ist so beschäftigt, dass der Tastendruck in gewissen Zeiträumen > nicht abgefragt wird und man muss dann wild "rumdrücken" bis der > Tastendruck angenommen wurde Thread verschleiert vielleicht nur Dein Problem. Wie erkennst Du die Taste bzw den Tastendruck? Was heißt "nicht nennenswert"? Mikrosekunden, Millisekunden, Aufbau von TCP/IP-Verbindungen? Reicht gedrückt halten? Poste 3 oder 4 Zeilen der Abfrage.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.