Hmmm, mit dem Taster schaltest du ja deine "Beleuchtungssequenz" in der LOOP immer eine Pos. weiter (prgNr++;)
Den Taster kannst du logo nicht mit dem LDR ersetzen.
Wenn ich das so richtig erkenne, sind deine Programme 1-4 die gleichen wie 5-6, mit dem Unterschied, das bei 5-8 Logo + Innenbeleuchtung dazu kommen.
#0 macht gar nix ?
Eigentlich müsstet du mit der folgenden Änderung nur noch von 0 bis 4 schalten ?!
Allerdings blicke ich nicht wirlich durch die Beschreibung deiner Programmliste mit zugehöriger Auflistung der Lampen und der Schaltfolge in deinem Array - wann wird was denn nun wann hell ?
Das passt irgendwie nicht zusammen ..... oder ?!
Lampe 8 ist Kabine und 9+10 ist Logo ? Die gehen nur bei Programm 5-8 an ? (Also wenn dunkel ?!)
Du müsstest jetzt einfach nur in prgwechsel(byte nr) zusätzliche Abfragen einbauen, ob Programm 5-8 gewählt ist, ob grade Lampe 8, 9 oder 10 abgefragt/geschaltet wird und ob es dunkel oder hell ist.
Um deine "Programmstruktur" beizubehalten, müsste prgwechsel(byte nr) in etwa so aussehen:
void prgwechsel(byte nr)
{
Serial.print("prgNr: ");
Serial.print(prgNr);
Serial.print(" IOs:");
for (byte j = 0; j < anzahlLeds; j++)
{
byte val = programme[nr][j]; // Wert HIER holen
if ((nr >= 5) && (nr <= 8)) // Programm 5 - 8 ?
{
if ((j <= 8) && (j <= 10)) // Lampe 8 - 10 ?
{
val = istDunkel; // true/1, sonst false/0
}
}
digitalWrite(LED_AUSGAENGE[j], val); // LED schalten
Serial.print(" ");
Serial.print(programme[nr][j]);
}
Serial.println();
}
In der LOOP() brauchst dun noch eine Abfrage des LDR-Spannungsteilers.
Dazu noch 2 Konstanten für Tag / Nacht und die globalen var "istDunkel" und "lux".
In etwa so:
word lux = 0;
boolean istDunkel = false;
const wirdDunkel = 400:
const wirdHell = 500;
void loop()
{
lux = analogRead(0); // LDR-Teiler abfragen
if (lux <= wirdDunkel) // Vergleichen 1.
{ istDunkel = true); // ... Licht an
if (lux >= wirdHell) // Vergleichen 2.
{ istDunkel = false); // ... Licht aus
// ggf. hier Ausgabe der Daten via SERIELL zu testen
....
}
Die Werte für "wirdDunkel" und "wirdHell" hängen von den Spannungsteiler-Werten und der Beleuchtungsstärke am LDR ab und müssen experimentell ermittel werden.
Könnte passen bei LDR-07 mit 4K7
Das doppelte IF deswegen, damit es eine Hyterese gibt - sonst flackerts im Rumpf an der Lichtschwelle.
Das ist nicht getestet, nur so nach Gefühl -> ausprobieren !