Wollte mir mit einem ESP8266 NodeMCU einen Schalter fürs GästeWlan bauen. Soweit so gut schalten lässt es sich auch.... aber sobald ich einen Taster drücke läuft das ding in einer endlos schleife und wechselt zwischen an und aus.
ich hab mir den Sketch mal angesehen , blicke leider nicht ganz dürch was da passieren soll.
Also es gibt zwei Taster ein / aus und eine LED zur Anzeige des Status ob ein oder aus ist. Dann gibt es zwei fertige functionen gwlanon() gwlanof() die mit Wechsel des status einmal aufgerufen werden sollen.
bau dir ein paar Serial.print () ein damit du sehen kannst was passiert.
Mit dem Komma in der IF hatten wir 'die Tage' doch schon Mal - allerdings ergab die dortige Erklärung in meinem Kopf keinen Sinn (oder so), finde den Thread aber auch nicht wieder ...
es wird sich der letzte Zustand nicht gemerkt. Der Code reagiert auf jede Eingangsänderung vom Tasterpin. Du musst immer nur ein erneutes "gedrückt" auswerten. Nicht jede die Pegeländerung am Pin. Wenn du die Taster entprellst kannste das alles mit einem Taster erschlagen. Dann wird der Taster zum Schalter.
Die Wertzuweisung im loop, in den if-Abfragen machen keinen Sinn: tasteD1 = LOW; tasteD0 = LOW;
Da der Wert durch digitalRead() eh wieder neu gesetzt wird und der zuvor gesetzte Wert keinen Unterschied macht.
else
{
tasteD0 = LOW;
}
und
else
{
tasteD1 = LOW;
}
kannst du dir übrigens sparen, wenn beide Schalter nicht auf HIGH sind, sind die auf LOW, daher macht die Wertzuweisung keinen Sinn, davon mal ab gesehen, dass der Schleifendurchlauf den Wert mit digitalRead wieder überschreibt.
Falls ich hier falsch liegen, sagt es, bin auch noch am lernen.^^
ich hab da mal was rausgesucht von meinen ersten Gehversuchen und ein bischen angepasst. Es wurde ja schon gesagt das Du alles mit einem Taster machen kannst,( toggeln)
Deine Funktionen gwlanon gelanoff hab ich zum testen in zwei print funktionen gepackt, aber das siehst du ja selbst. Die Namen der Variablen sind zwar anders als bei dir aber das wird nicht das Problem sein.
Heinz
/*
Taster toggelt eine LED ein und aus.
bei Statuswechsel wird je eine Funktion aufgerufen
Hardware UNO
*/
const byte taster = 3;
const byte led = 13;
bool flag, swich, state;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(taster, INPUT_PULLUP);
pinMode(led, OUTPUT);
}
void loop() {
swich = !digitalRead(taster); // Taster einlesen
if (swich && !flag) { // pos Flanke erkennen
flag = true; // Flankenmerke setzten
state = !state; // status toggeln
if (state)gwlanon(); // Funktion on afrufen
else gwlanoff(); // Funktion off aufrufe
delay(50);// entprellen
}
if (!swich) {
flag = false; // reset flankenmerker
delay(50); // entprellen
}
digitalWrite(led, state);// led an /aus
}
void gwlanon() {
Serial.println ("Status ein");
}
void gwlanoff() {
Serial.println("Status aus");
}
Mit dem Komma in der IF hatten wir 'die Tage' doch schon Mal - allerdings ergab die dortige Erklärung in meinem Kopf keinen Sinn (oder so), finde den Thread aber auch nicht wieder ...
MfG
stimmt ich kann mich auch erinnern weiss aber auch nicht mehr in welchem Zusammenhang das war.
Besten dank... funktioniert fast perfekt nur wenn ich jetzt einmal eingeschaltet habe dauert es ewig bis ich wieder ausschalten kann... obwohl ich nirgendwo ein so langen delay angegeben habe :o
Edit: hab gerade herausgefunden das ich anscheind die bessere Masse bin.... wenn ich das kabel von dem Pin kurz berühre schaltet er sofort hin und her -.-
@gicko redest du von meinem code ? kann nicht sein.
ich denke du hast den Taster falsch angeschlossen. Der taster muss zwischen pin3 und 0V.
Wenn Du ihn zwischen Pin und plus hast benötigst du einen externen Widerstand 2-10K vom pin nach 0V und im Setup muss in der Anweisung pinMode das PULLUP weg. Zus. muss in der Zeile eingang einlesen das invertieren weg. Aber standard ist gegen Masse schalten.
das geht so nicht die dicke Rille in dem steckbrett in der Mitte ist isoliert da gehts es nicht zum schalter, mit dem kleinen Buton ist das so eine Sache ich weiss auch nie wie das mit den 4 Anschlüssen ist ( messen ) , lass erst mal den Taster raus und steck den Draht direkt in die gleiche senkrechte linie in der der andere Draht steckt wenn du schliessen willst.
Das liegt bzw. muss an D0 liegen hab es jetzt mal umgeschrieben und gesteckt. Extra das Multimeter für den Taster rausgeholt Den Taster auf D3 gelegt und FREUDE!!!
Jetzt funktioniert es! Keine Ahnung was mit auf D0 liegt.
Nebenbei: Die LED wird Dir SO ebenfalls nicht lange überleben - oder der Arduino-Pin stirbt - LEDs IMMER mit einer Strombegrenzung - im einfachsten Fall einem Vorwiderstand.
Nebenbei: Die LED wird Dir SO ebenfalls nicht lange überleben - oder der Arduino-Pin stirbt - LEDs IMMER mit einer Strombegrenzung - im einfachsten Fall einem Vorwiderstand.
MfG
hatte ich völlig übersehen ich hatte mich nur auf den Taster fixiert