Taster geht nicht an ESP32-S

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
luemar
User
Beiträge: 20
Registriert: Samstag 4. April 2015, 19:36

Hallo Experten,
möchte mit diesem einfachen Script (mPiCraft) eine LED - später eine Relais - über einen Taster an einem ESP32-S durch Drücken ein und Loslassen ausschalten.

Code: Alles auswählen

from machine import Pin
from time import sleep

led = Pin(2,Pin.OUT)
taster = Pin(5, Pin.IN)

print(taster.value())

while True:
  if taster.value(not taster.value()):
    print(taster.value())
    led.value(1)
  else:
    led.value(0)
 
Geht aber nicht, das erste print statement Zeile 7 erscheint, auf Tastendruck passiert nichts, das 2. print statement auf Zeile 10 erscheint nicht, die while Schleife wird offenbar nicht ausgeführt. Habe mich mit Interrupts etc. beschäftigt sehe aber meinen Fehler nicht.
Nach dem Stop button in der IDE wird angezeigt:

Traceback(.......)
File "<sdtin>", line 1, in <module>
File "<string>", line 10, in <module>
KeyboardInterrupt:
>>>

Leider konnte ich ein Bild der Schaltung nicht einfügen, sie funktioniert mit anderen Taster-Scripts und Pin 5 zeigt initial 3.3V nach Tastendruck 0V.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Was denkst Du bedeutet `taster.value(not taster.value())`?
luemar
User
Beiträge: 20
Registriert: Samstag 4. April 2015, 19:36

vielen Dank für die sehr rasche Antwort.
Da der Ausgangswert von taster am Pin 5 3.3V d.h. 1 beträgt wollte ich
ihn zu Beginn der while Schleife durch Drücken des Tasters auf 0V d.h.
0 setzten, damit die LED angeht.
Anstelle von <taster.value(not taster.value(())> ginge whs. auch
<taster.value(0)>
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wieso *setzt* du denn einen Tasten bzw willst das? Das ist doch eine Eingabe, die du nur abfragst, und gesetzt wird die durch den physikalischen Schalter.
luemar
User
Beiträge: 20
Registriert: Samstag 4. April 2015, 19:36

habe nochmals logisch nachgedacht und jetzt geht's:

Code: Alles auswählen

from machine import Pin
from time import sleep

led = Pin(2,Pin.OUT)
taster = Pin(5, Pin.IN)

while True:
  while taster.value() == 1:
    led.value(0)
    sleep(.1)
  led.value(1)
[Code]

Das ist aber nicht das Ende der Fahnenstange: Mit diesem Script laufen die while Schleifen
bzw. die CPU permanent, 24/7. Ich Könnte das allenfalls mit einem Ein- Ausschalter für den
ESP32-S umgehen oder eben wie schon erwähnt direkt, ohne ESP32-S. 
Eleganter wäre ein Lösung mit einem Interrupt aber dazu starte ich ein neues Thema.
Antworten