2 MOSFET
Das Hochladen der Code schlägt fehl bzw.wird nicht ausgeführt (es wird keine Fehlermeldung angezeigt/gebracht), wenn der MOSFET angeschlossen ist. Wenn ich den Transistor nach dem hochladen verbinden, dann ist alles ok. (ESP NodeMCU 8266) Ich nehme an es läuft beim hochladen irgendwas schief. Pins D3 und GND ...?
[pingelig] Ist eine Bedingung, keine Funktion. [/pingelig]
Bei den zwei Bedingungen hat die letzte eine höhere Priorität als die erste. Praktisch gibt es einen kurzen LOW-Impuls auf dem Ausgang, der eventuell vom nächsten HIGH überschrieben wird. Bei einer LED siehst Du das nicht, nachfolgende Elektronik könnte irritiert werden, so wie "der Zähler zählt falsch".
Daher solltest Du Deine Wahrheitstabelle überdenken, da sie wohl nicht das tut, was Du erwartest. Alternativ könntest Du auch erst einen Merker setzen, den Du dann ausgibst.
Testprogramm mit ausbaufähiger Wahrheitstabelle:
void setup() {
Serial.begin(9600);
Serial.println("\nStart");
byte L, T, N;
L = 5;
T = 9;
N = 7;
vergleich(L, T, N);
L = 9;
T = 5;
N = 7;
vergleich(L, T, N);
L = 9;
T = 5;
N = 7;
vergleich(L, T, N);
L = 9;
T = 7;
N = 5;
vergleich(L, T, N);
L = 5;
T = 7;
N = 3;
vergleich(L, T, N);
Serial.println("Ende");
}
void loop() {}
void vergleich(byte HourL, byte HourT, byte HourN)
{
Serial.print(HourL); Serial.print('\t');
Serial.print(HourT); Serial.print('\t');
Serial.print(HourN); Serial.print('\t');
Serial.print(HourL >= HourT); Serial.print(' ');
Serial.print(HourL < HourN); Serial.print('\t');
// mit else
if (HourL >= HourT || HourL < HourN)
{
Serial.print("LOW 1"); Serial.print('\t');
}
else if (HourL < HourT || HourL >= HourN)
{
Serial.print("HIGH 1"); Serial.print('\t');
}
// ohne else
if (HourL >= HourT || HourL < HourN)
{
Serial.print("LOW 2"); Serial.print('\t');
}
if (HourL < HourT || HourL >= HourN)
{
Serial.print("HIGH 2");
}
Serial.println();
}
Man kann auch Pins tauschen. Vieleicht kann die Schaltung die Du an einem anderen Pin ansteuerst an D3 ohne probleme funktionieren. und so den MOSFET am anderen Pin anschließen.
Grüße Uwe
Danke für eine ausführliche Antwort. Ich habe mir die Tabelle angeschaut, mit der Priorität für die Bedienungen ist auch klar. Leider fehlt mir der Ansatz für die Umstrukturierung der Code bzw. Logik. Davor habe ich folgende Bedienung verwendet:
if (HourL == HourT)
else if (HourL== HourN)
Leider "fängt sich" das System nicht gleich, muss halt einmal durchlaufen.