Du hast gefragt....
const int led_Pin[] = { 13 }; //Pin Nummern für Led
Wenn Du Pindefinitionen machst, dann nimm byte als Variablengröße. Ein int braucht 2 bytes. Und ein Pin kann nicht negativ werden ![]()
Siehe auch nächster Ausschnitt.
Mach sowas nicht:
pinMode(taster_Pin[0], INPUT_PULLUP);
pinMode(taster_Pin[1], INPUT_PULLUP);
bzw.
tasterCheck(0);
tasterCheck(1);
Wenn Du Aufzählungen hast, dann zähle auch.
const byte tasterNums = sizeof(taster_Pin) / sizeof(taster_Pin[0]);
[...]
for (byte b = 0; b < tasterNums; b++)
{
pinMode(taster_Pin[b], INPUT_PULLUP);
}
Wenn Du die Pins als byte deklarierst, kannst Du ggfls. auf die Berechnung aus sizeof(Elemente)/sizeof(Element[0] verzichten und nur das einfache sizeof() nehmen ![]()
Hier hat sich ein Fehler eingeschlichen:
if (taster_Status[taster_Nr] == LOW)
{
letzteSchaltungMs[0] = millis(); //solange der Taster gedrückt wird, wir diesert Wert angepasst
taster_Gedrueckt[taster_Nr] = HIGH; //solange der Taster gedrückt wird, wir diesert Wert angepasst
}
Die letzteSchaltungMs muss zum taster passen.
Und im weiteren Verlauf natürlich auch darauf richtig auswerten.
Die Funktion mit zwei if-Abfragen, in der die zweite das selbe macht wie die erste macht es unübersichtlich und rechenintensiv.
Wenn dann reicht ein else if und Du kannst auf die &&-Verknüpfung verzichten.
if (modus < 6)
{
modus++;
}
else
{
modus = 1;
}
Das gewöhne Dir garnicht erst an. Wenn, dann bekommst Du es nur schwer wieder weg und Du wirst ständig daran scheitern, wenn Du mit Elementen arbeitest. Schönes Beispiel: Das erste Element in einem Array ist immer das mit der Nummer 0.
Auch funktioniert darum die for-Schleife oben im setup so schön. Du hast 2 Elemente, prüfst aber auf < 2. das erste Element ist 0 das zweite 1.
Wenn Du Zähler nutzt, fange nicht an Deine eigenen Konventionen einzubringen.
Das macht es für Aussenstehende ungleich schwerer den Code dann zu verstehen.
Das hier:
if ((aktuelleMs - letzerWechselMs) > wechsel)
wirft Dir der Compiler mit einer Warnung vor die Füsse.
Bitte stelle die IDE mal anders ein. (DATEI-Voreinstellungen)
Dann siehst Du, das der Wertebereich nicht passt...
Das:
if (led_Status[0] == LOW)
{
led_Status[0] = HIGH;
}
else
{
led_Status[0] = LOW;
}
digitalWrite(led_Pin[0], led_Status[0]);
geht auch kürzer:
digitalWrite(led_Pin[0], !digitalRead(led_Pin[0]));
Das zum switch/case spar ich mir.... ![]()
Aber das mit dem status:
void lichtmodus1()
{
digitalWrite(led_Pin[0], LOW);
led_Status[0] = LOW;
}
void lichtmodus2()
{
digitalWrite(led_Pin[0], HIGH);
led_Status[0] = HIGH;
}
kannst Du vollständig weglassen - an jeder anderen Stelle auch.
Wenn der led_Status[x] die led abbilden soll, dann kannst Du den ledPin abrufen.
Das vermeidet dann auch Missverständnisse... Du veränderst led_Status[0] an den unterschiedlichsten Stellen im Code.
Und es spart eine Variable...
Zu den magischen Zahlen war auch schon gesagt.
Von daher wars für mich erstmal.
