Hallo Leute, ich weiss nicht weiter. Ich hab jetzt schon (fast) über mehrere Wochen versucht bei mindestens 5 verschiedenen esp32 Varianten, IDE1 und IDE2 Versionen, verschiedenen esp32 Bibliothekständen und Routinen versucht, einen interrupt zum.laifem zu bringen. Bei dem ESP hat das Ende letzten Jahres auch funktioniert. Jetzt nicht mehr... warum? Bei den 8266, Mano und Mega habe ich die eingesetzt und läuft Warum "zickt" der ESP32 rum? Ist bei Espressif da Grade eine " Gemeinheit" unterwegs? Wer hat auch unerwartete Probleme? Viele Grüße Manfred
Ein delay in einer Interruptroutine? Das geht gar nicht! Und wo ist die schließenden Klammer von Sensormessung()???
Ja, mach ich nochmal mit dem delay(). Hatte ich (glaube ich ) schon probiert. Ich glaub, das Problem liegt tiefer... Viele Grüße Manfred
Manfred S. schrieb: > warum? Warum bekommen wir keinen testbaren Code zu sehen? Soll ich das ernsthaft abtippen? Manfred S. schrieb: > Wer hat auch unerwartete Probleme? Ja, wer wohl? Ich nicht! Unerwartete vielleicht, aber keine unlösbaren.
Arduino F. schrieb: > Warum bekommen wir keinen testbaren Code zu sehen? > Soll ich das ernsthaft abtippen? Bleiben die Finger auch schoen schlank, newohr?
Manfred S. schrieb: > ch hab jetzt schon (fast) über mehrere Wochen versucht bei mindestens 5 > verschiedenen esp32 Varianten, IDE1 und IDE2 Versionen, verschiedenen > esp32 Bibliothekständen und Routinen versucht, einen interrupt > zum.laifem zu bringen. > Bei dem ESP hat das Ende letzten Jahres auch funktioniert. Jetzt nicht > mehr... warum? Willst du uns veralber? Was soll der Käse mit dem ECHTEN Bildschirmphoto? Kurzen Quelltext (max 1 Bildschirmseite, ca. 100 Zeilen), kann man hier direkt reinkopieren und mittels der eckigen Klammer [ c ] und [ /c] einschließen
1 | // das ist C Quelltext
|
Längere Quelltexte DIREKT als Anhang. > Bei den 8266, Mano und Mega habe ich die eingesetzt und läuft > Warum "zickt" der ESP32 rum? Dein Qelltext ist ein Chaos! Das läuft nie durch den Compiler. > Ist bei Espressif da Grade eine " Gemeinheit" unterwegs? Nö.
So geht es. Aber man muss beachten, daß das Signal am Interupteingang prellfrei sein muss, sonst flackert die LED im Test nur! Ein einfacher Taster ist das NICHT! Und delay() funktioniert beim Arduino im Interrupt nicht, denn die Funktion benötigt aktive Interrupts (Timer 0). Im Interrupt sind diese aber inaktiv, zumindest beim AVR.
1 | void setup() { |
2 | pinMode(LED_BUILTIN, OUTPUT); |
3 | pinMode(2, INPUT_PULLUP); |
4 | attachInterrupt(digitalPinToInterrupt(2), Sensormessung, FALLING); |
5 | }
|
6 | |
7 | void Sensormessung(void) { |
8 | digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN)); |
9 | }
|
10 | void loop() { |
11 | |
12 | }
|
https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/ "Generally, an ISR should be as short and fast as possible. If your sketch uses multiple ISRs, only one can run at a time, other interrupts will be executed after the current one finishes in an order that depends on the priority they have. millis() relies on interrupts to count, so it will never increment inside an ISR. Since delay() requires interrupts to work, it will not work if called inside an ISR. micros() works initially but will start behaving erratically after 1-2 ms. delayMicroseconds() does not use any counter, so it will work as normal." RTFM works!
:
Bearbeitet durch User
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.