ESP8266 taster entprellen in Interruptroutine

OP #5585479
Lesenswert?

Hallo zusammen,

ich habe in meinem Sketch ein Interrupt eingebaut welcher bei einer 
Tastenäderung aufgerufen wird. ich habe in der Interruptroutine ein 
delay(100) eingebaut um den Taster zu entprellen.

Sobald das delay in der Interruptrotine aber drin ist, spielt der ESP 
verrückt und gibt jede menge Zeichen aus, startet nicht richtig.
Darf mann kein delay Befehl in einer Interrupt Routine einbauen?
1
//Sub Interrupt  Change
2

3
  void wechsel(){
4
    zustandalt = digitalRead(reedpin);
5
    delay(100);
6

7
  if (zustandalt==HIGH){
8
    aufzaehler++;
9
    Serial.print("Interrupt->auf->" );
10
    Serial.println(aufzaehler);
11
    
12
  }
13
  if (zustandalt==LOW){
14
    zuzaehler++;
15
    Serial.print("Interrupt->zu->" );
16
    Serial.println(zuzaehler);
17
  
18
  }
19
    
20
  }
Gast #5585745
Lesenswert?

Das funktioniert aus zwei Gründen nicht:

1) Die Firmware soll für maximal 20ms unterbrochen werden, sonst kommt 
es zu Kommunikationsfehlern. In der Praxis gehen 50ms.

2) Der Quelltext von delay() enthält einen Aufruf von yield(), was 
wiederum die Firmware des ESP ausführt. Diese wurde aber nicht dafür 
vorgesehen, aus einer ISR heraus aufgerufen zu werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren