Hallo Ulli
Es ist richtig die Dinge klarzustellen um etwaige Fehler die andere durch die aufgezeigten Lösungen mit den Ungenauigkeiten machen könnten zu verhindern.
In diesem Fall muß man aber selbst genauer als der zu korrigierende Beitrag sein.
In Deiner Antwort ist es nicht der Fall:
"void" bedeutet, daß eine Funktione keine Wert zurückgibt. Das hat nichts mit dem Daten-Typ einer Variablen zu tun.
Es ist besser sich an die technisce Standartsprache beim programmieren zu halten: "loop()" ist kein Programmteil sondern eine Funktion.
In der Arduinoprogrammierumgebung wird setup() einmal am Anfang der Abarbeitung des Sketches aufgerufen und loop() immer wieder sobald die Funktion fertig abgearbeitet worden ist.
In die setup-Funktion kommen alle Funktionen und Programmteile hinein, die einmal am Anfang ausgeführt werden sollen. Also zB Initialisation von externer HW, Einschaltbild auf Display, Wert zuweisen von Variablen, falls sie noch nicht vorher mit einem Wert geladen wurden. Es kann jede x-beliebige Funktion aufgerufen werden und jede Bedingung enthalten sein.
In die loop-Funktion kommt alles rein was immer wieder ausgeführt werden soll; also das meiste unseres Sketches.
Der Vorschlag Variablen immer vor und auserhalb der setup-Funktion ist nicht immer Zielführend. Das gilt für Kostanten ( jene die mit "#define" deklariert werden). Der Compiler ersetzt die Konstant-Variable vor dem kompilieren mit dem Wert. ZB ich definire "#define Ausgang 3" dann ersetzt der Kompiler "Ausgang" mit "3". Das hat den Vorteil Ramspeicher für die Variablen zu sparen. Achtung: er ersetzt "AusgangLED" auch und es kommt "3LED" dabei raus; Das kann manchmal Probleme geben wenn Du "3LED" als Variable bereits verwendest. Zweites Achtung: #define wird ohne "=" und Strichpunkt am Ende geschrieben!!!
In C und C++ gibt es globale und locale Variablen.
Locale Variablen werden innerhalb von Funktionen definiert
zB:
funktionXY()
{
int Z = 1;
...
}
Diese Variable , in unserem Fall "Z", existiert nur innerhalb dieser Funktion "funktionXY()". Außerhalb oder innerhalb einer anderen Funktion gibt es sie nicht oder wenn es dort noch eine Variable "Z" gibt, ist es nicht die gleiche Variable wie die in der Funktion "funktionXY()".
Das kann zu scheinbar unerklärbaren Programmfehler führen, wenn man das nicht weiß.
Globale Variablen sind jene Variablen, die außerhalb jeder Funktion vor "setup()" definiert wurden. Diese gibt es in allen Funktionen und in allen Funktionen kann man auf sie zugreifen.
Nun zur Frage von currymuetze
Du kannst in der Funktion setup() die LED abhängig von der Zeit an oder ausschalten:
...
setup()
{
...
Lampe = 0; // Lampe ist aus
if (Stunde >21 || Stunde < 7) // wenn es später als 21h59 oder früher als 7h00 ist, also Nacht, dann leuchtet die Lampe
{
Lampe =1;
}
...
}
Grüße Uwe