Werte Community,
zuerst mal vorweg, das ist mein erster Beitrag hier, bzw. anders gesagt,
ich bin der Neue hier. :)
Weiters möchte ich euch bitten mit mir erbarmen zu haben, denn ich weiß
nicht was ich tue. hahaha Zumindest nich bei allem.
Zu meinem Problem:
Ich habe schon lange nicht mehr programmiert, deshalb hat ein Freund mir
ein bisschen geholfen. Von ihm habe ich auch den ESP 8266 D1 mini
bekommen und wir haben für die Programmierung VS Code mit dem Plugin
PlatformIO verwendet. Ob man damit Debuggen kann weiß ich bis dato noch
nicht.
Mein Projekt funktioniert soweit so gut, nur möchte ich einen kleinen
Zusatz dabei haben. Ohne diesen Zusatz ist das Ganze ziemlich lästig.
Ich komme aber gleich darauf zu sprechen.
Vorab möchte ich jedoch sagen, dass durch euer prüfendes Auge der
bisherige Code sicherlich besser zu schreiben ist, mir ist aber das
momentan egal, hauptsache das Programm tut was es soll. Bin nämlich ein
bisschen im Zeitdurck und möchte einfach das es läuft.
Nun aber zu den Einzelheiten:
Ich habe einen ESP8266 D1 mini, einen Motortreiber "Motor Driver Module
BTS7960", einen Motor, zwei Schalter (keine Taster, obwohl im Programm
mit Taster benannt), einen LDR und ein Poti.
Der ESP ist folgendermaßen programmiert:
Über den LDR und das Poti wird ein Schwellwert festgelegt welcher bei
Über oder Unerschreiten den Motor eine gewisse Zeit laufen lässt. Dieser
zieht eine Klappe nach oben. Da mir aufgefallen ist, dass beim
Runterlaufen die Klappe schneller unten ist wurde für die Fahrt nach
unten eine kürzere Zeit eingestellt. Deshalb gibt es im Programm zwei
Zeiten.
Der ESP geht dann in den Schlafmodus und wacht alle Minuten einmal auf,
schaut nach ob die Werte des LDR noch passen oder sich verändert haben
und geht wieder schlafen. Der Schalfmodus ist einfach um Strom zu
sparen, da das ganze über ein Akkupack betrieben wird. Zu erwähnen ist,
dass die Zeit auf Grund von Testzwecken momentan auf 5 Sekunden
eingestellt ist, später aber auf eine Minute verändert werden soll.Die
beiden Schalter sind dazu da, dass die Klappe manuell hoch oder runter
gefahren werden kann.
Nun kommt aber das Problem!
Der Schalter wird jedoch nur dann erkannt wenn der Controler aufwacht
und der Schalter gedrückt ist. Daher möchte ich, dass durch Drücken des
Schalters der Controller mittels Interrupt aufgeweckt wird, je nach
Schalter entweder die Klappe nach oben oder unten gefahren wird, und
danach der Controller wieder schlafen geht.
Der Part mit den Interrupts ist im Code noch nicht vorhanden. Ich habe
zwar schon vieles probiert, aber nichts davon funktioniert wirklich.
Könnt ihr mir hier weiterhelfen wo ich ansetzen soll?
Eines sei hier noch erwähnt, beim Controller wurde zwischen Pin D0 und
Pin RST eine fixe Brücke, (also mittels Draht miteinander verbunden)
gelegt. Das habe ich so im in diversen Beiträgen gelesen. Dies wird zum
Schlafen bzw. Aufwecken des Controllers benötigt. Für die Programmierung
des Contrllers muss ich die Brücke jedoch öffnen. Ihr wisst das aber
wahrscheinlich viel besser als ich.
Im Code sind noch Textausgaben die ich zu Testzwecken verwendet habe,
sollen euch aber nicht weiter stören.
Ich hoffe hier die entsprechenden Antworten zu erhalten und bedanke mich
vorab recht herzlich für eure Beiträge Codeergänzungen bzw. Hinweise.
LG Christian
P.S.: Hier noch der bis dato funktionierende Code:
Christian schrieb:> Daher möchte ich, dass durch Drücken des> Schalters der Controller mittels Interrupt aufgeweckt wird
Das geht nicht. Du kommst beim ESP8266 aus dem Deep-Sleep Modus nur mit
einem Reset heraus.
Ok, danke euch beiden.
Dachte man könnte den Controller auch mittels Tastendruck wie oben
beschrieben auch aufwecken lassen. Aber wenn das nicht geht muss ich das
wohl oder übel akzeptieren.
Werde nun einen eigenen Taster platzieren der den Contrller mittels RST
aufweckt.
Vielen Dank nochmal
Du müsstest mit deinem Tastendruck den Resetpin UND einen Eingangspin
bedienen. Am Eingangspin benötigst du dann einen ausreichend
dimensionierten Tiefpass um direkt nach dem Aufwachen überprüfen zu
können, ob und welcher Taster gedrückt wurde.