If / else MOSFET ESP8266

Hallo zusammen,

ich habe folgende Feststellungen gemacht und benötige Erklärung

  1. if/else if -Funktion
    Der Code führt die else if-Funktion nicht aus, wenn ich es durch if-Funktion ersetze dann funktioniert es. Syntax??
  byte Hour_L=now.hour();
   //Serial.println(Hour_L);
  
  if(Hour_L >= HourT || Hour_L < HourN)
  {
        digitalWrite(RelayL, LOW);
  }

   //else if (Hour_L < HourT|| Hour_L > HourN)
   if (Hour_L < HourT || Hour_L >= HourN)
  {
       digitalWrite(RelayL, HIGH);
  }

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 ...?

Logik!!

mach einen vollständigen Sketch, inkl. der 3 Variablen
probier es mit verschiedenen Test-Werten dann siehst du es.

[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();
}

Ich mag die Seite ESP8266 Pinout Reference: Which GPIO pins should you use?.

ok, es liegt am Pin D3 (boot fails if pulled LOW), kann ich es umgehen?

Anderen Pin wählen wäre naheliegend, oder?

und wenn alle I/O-Pins belegt sind?

Anderen Prozessor oder Porterweiterungen nutzen.

Gruß Tommy

ok, Stichpunkt "Porterweiterung" . Danke!

Ich nutze den ESP32, siehe ESP32 Pinout Reference: Which GPIO pins should you use?.

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.

Unser Moderator Uwe hat mir leider keine Glaskugel zugestanden, weshalb ich nicht sehen kann, was Du vorhast.

Jetzt bin ich wieder an allem Schuld.
Besorgt Euch Eure Kristallkugeln selbst. :innocent: :innocent:

Was ist mit GPIO16 ?

Ach Uwe, als Sammelbestellung bekommst Du Deine bestimmt umsonst dazu :wink:

Duck und wech.

Gruß Tommy

Gegenfrage zur Verteilung der bißher nicht abgeholten Kristallkugeln :wink: :wink:.
Wer besucht die Makerfaire Hannover?
Grüße Uwe

Auf jeden Fall ich, in Begleitung meiner besseren Hälfte, am Samstag.

Gruß eMeS

Dafür solltest Du ein eigenes Thema öffnen, dann bekämst Du mehr Antworten :wink:

Hallo,
ich habe es gelöst...ich verwende folgende Ausdrücke für die Umschaltung Tag/Nacht:

if (Stunde_H >= HourT && Stunde_H <= HourN)
 else if (Stunde_H < HourT || Stunde_H > HourN)

Vielen Danke!