Probleme mit Void und if. Brauche Hilfe!

Hallo zusammen

Ich habe folgendes Problem:

Ich habe eine Zeitschaltuhr Programmiert alles soweit so gut nur leider habe ich das Problem das void Relais2 und RGB nicht Funktioniert. Das Relai 2 wird nicht geschaltet und bei RGB ist der Programmteil nach else die ganze Zeit aktiv.Warum? Ich komm einfach nicht dahinter.Kann einer Helfen?

void loop()
{
 tft.setTextColor(ST7735_BLACK, ST7735_YELLOW); // Schrieftfarbe
 tft.setCursor (85, 35);//X Y Achse
 sensors.requestTemperatures(); // Send the command to get temperatures
 tft.println(sensors.getTempCByIndex(0));
 float h = dht.readHumidity();
 // Read temperature as Celsius (the default)
 float t = dht.readTemperature();
 // Read temperature as Fahrenheit (isFahrenheit = true)
 float f = dht.readTemperature(true);
 // Compute heat index in Fahrenheit (the default)
 float hif = dht.computeHeatIndex(f, h);
 // Compute heat index in Celsius (isFahreheit = false)
 float hic = dht.computeHeatIndex(t, h, false);
 tft.setTextColor(ST7735_BLACK, ST7735_YELLOW); // Schrieftfarbe
 tft.setCursor (95, 20);//X Y Achse
 tft.print(h);
 digitalUhrAnzeige();
 Relais1();
 Relais2();
 RGB();
}
void digitalUhrAnzeige()
{
 lcd2.clear();
 lcd2.setCursor(4, 0); // positionieren LCD-Cursor, 1. Zeile, 1. Spalte
 printZiffernGenulltOhnePunkt(hour()); // rufen Subroutine auf
 printZiffernGenulltmitPunkt(minute()); // rufen Subroutine auf
 lcd2.print(" "); // fuegen Freizeichen ein
 lcd2.setCursor(4, 1);
 printZiffernGenulltOhnePunkt(day()); // rufen Subroutine auf
 lcd2.print("."); // fuegen Freizeichen ein
 printZiffernGenulltOhnePunkt(month()); // rufen Subroutine auf
 lcd2.print(".");
 printZiffernGenulltOhnePunkt(year());
}
void printZiffernGenulltOhnePunkt(int zahl) // definieren Subroutine
{
 if (zahl < 10) // wenn kleiner als 10 ...
 {
   lcd2.print("");  // fuehrende 0 einfuegen
 }
 lcd2.print(zahl); // Ausgabe auf LCD
}
void printZiffernGenulltmitPunkt(int zahl) // definieren Subroutine
{
 lcd2.print(":"); // trennende ":" einfuegen
 if (zahl < 10) // wenn kleiner als 10 ...
 {
   lcd2.print('0');
 }
 lcd2.print(zahl);
}
void Relais1() { // Tageslicht
 if (hour() >= 11 && hour() < 19)
 {
   digitalWrite(Relay_1, LOW);
   tft.setTextColor(ST7735_GREEN, ST7735_YELLOW); // Schrieftfarbe
   tft.setCursor (80, 50); //X Y Achse
   tft.print("AN");
 }
 else
 {
   digitalWrite(Relay_1, HIGH);
   tft.setTextColor(ST7735_RED, ST7735_YELLOW); // Schrieftfarbe
   tft.setCursor (80, 50); //X Y Achse
   tft.print("AUS");
 }
}

void Relais2() { // uV
 if (hour() >= 12 && hour() < 22)
 {
   digitalWrite(Relay_2, LOW);
   tft.setTextColor(ST7735_GREEN, ST7735_YELLOW); // Schrieftfarbe
   tft.setCursor (80, 65); //X Y Achse
   tft.print("AN");
 }
 else
 {
   digitalWrite(Relay_2, HIGH);
   tft.setTextColor(ST7735_RED, ST7735_YELLOW); // Schrieftfarbe
   tft.setCursor (80, 65); //X Y Achse
   tft.print("AUS");
 }
}
//________________

//__________________________________________________________________________________________
void RGB() {
 if (hour() > 19  && hour() < 00 )
 {
   tft.setTextColor(ST7735_BLUE, ST7735_YELLOW); // Schrieftfarbe
   tft.setCursor (120, 80);//X Y Achse
   tft.print("BLAU");
   strip.setPixelColor(0, 0, 0, 255);
   strip.setPixelColor(1, 0, 0, 255);
   strip.setPixelColor(2, 0, 0, 255);
   strip.setPixelColor(3, 0, 0, 255);
   strip.setPixelColor(4, 0, 0, 255);
   strip.setPixelColor(5, 0, 0, 255);
   strip.setPixelColor(6, 0, 0, 255);
   strip.setPixelColor(7, 0, 0, 255);
   strip.setPixelColor(8, 0, 0, 255);
   strip.show();
 }
 else
 {
   tft.setTextColor(ST7735_BLACK, ST7735_YELLOW); // Schrieftfarbe
   tft.setCursor (120, 80);//X Y Achse
   tft.print("AUS1");
   strip.setPixelColor(0, 0, 0, 255);
   strip.setPixelColor(1, 0, 0, 255);
   strip.setPixelColor(2, 0, 0, 255);
   strip.setPixelColor(3, 0, 0, 255);
   strip.setPixelColor(4, 0, 0, 255);
   strip.setPixelColor(5, 0, 0, 255);
   strip.setPixelColor(6, 0, 255, 0);
   strip.setPixelColor(7, 0, 255, 0);
   strip.setPixelColor(8, 0, 255, 0);
   strip.show();
 }
}

if (hour() > 19 && hour() < 00 )

ist nie true, schätze ich mal.

Ein “Problem mit Void” ist, dass void nur der Datentyp des Ergebnis einer Funktion ist, und “nichts” bedeutet.

ist nie true, schätze ich mal.

Das heißt?
if (hour() > 19 && hour() < 0 )
??

Die Stunde kann nicht gleichzeitig größer als 19 und kleiner als 0 sein

Die Stunde kann nicht gleichzeitig größer als 19 und kleiner als 0 sein

Warum??

Bei Relais1 ist:

if (hour() >= 11 && hour() < 19)

und es funktioniert Perfekt!

und Relai 2 soll ab 19 uhr bis 00 Uhr schalten.

Ist das jetzt dein Ernst? Wie kann eine Zahl größer als 19 und kleiner als 0 sein? Das geht nicht mal mit imaginären Zahlen :p Das sind ganz normale ganze Zahlen. Dass das eine Uhrzeit sein soll, weißt nur du. Nicht der Controller.

Größer als 11 und kleiner als 19 geht natürlich

ja du hast recht sorry :)

aber warum Schaltet jetzt das Relai2 nicht? Hast du ne idee

Höchstwahrscheinlich... weil hour() gar keinen Wert > 12 liefert? Zum Bleistift bei amerikanischen Uhren die nur 00...11:59:59 "pm" oder "am" liefern, aber niemals 13 oder 19 Uhr?

dann müsste ja die uhrzeit am LCD auch 12 format haben oder nicht? Dargestellt wird die Uhr im 24 Stundenformat.

Du solltest dir die einzelnen Zeiten mal im Serielle Monitor anzeigen lassen. Damit findet man sehr schnell Fehler, die sich eingeschlichen haben.

Evtl. hast du ja auch einen Fehler in der Deklaration gemacht, die fehlt hier komplett.

Wenn du den Sketch in Code-Tags (Schaltfläche #) gesetzt hättest, wäre dieser besser lesbar. Das kannst du auch noch nachträglich in deinem ersten Post machen.

Hab den Fehler gefunden! Jetzt nicht Lachen

Pin am Nano ist def.

:/

andy06m: Hab den Fehler gefunden! Jetzt nicht Lachen

Pin am Nano ist def.

:/

Was hat denn der Pin mit der if-Anweisung zu tun?