Liebes Forum,
ich bin noch recht neu in der Arduinowelt, weshalb ich um etwas Nachsicht bitte.
Basierend auf diesem Tutorial (https://www.arduinoplatform.com/arduino-digital-analog/creating-multiple-button-states-with-arduino/) wollte ich weitere 3 LEDs mit einem weiteren Button steuern. Einfach 3 LEDs mit einem Button bekomme ich. Nach dem selben Strickmuster wollte ich eben noch 3 weitere LEDs mit einem weiteren Button steuern.
Die Schaltung habe ich schon hinbekommen (einfach die 3 LEDs an weitere PINs angeschlossen) und den Code angepasst - dachte ich. Wenn ich den Button für die ersten 3 LEDs drücke reagieren praktisch für beide LED-Reihen die LEDs simulatan; soll heißen: drücke ich den Button leuchten beide grüne LEDs, beim zweiten drücken beide gelbe und beim drücken beide rote. Ich möchte jedoch den ersten Satz LED mit Button 1 und den zweiten Satz LED mit Button 2 steuern.
Ich werde hier noch wahnsinnig. Wo liegt der Fehler? Kann das jemand erklären oder mir erläutern, wo der Fehler liegt?
Anbei noch der Code:
// Sketch: Multiple states of the button
// Define the pins being used
int pinLEDBtn01[ ] = {13,12,11};
int pinLEDBtn02[] = {10,9,8};
int ButtonPins[] = {2,3};
int ButtonStates[] = {0,0,0};
//int Button01 = 2;
//int Button02 = 3;
int i;
int j;
// variables to hold the new and old switch states
boolean oldSwitchState = LOW;
boolean newSwitchState = LOW;
byte state = 0;
void setup()
{
Serial.begin(9600);
for (int i = 0; i < sizeof(pinLEDBtn01); i++){
pinMode(pinLEDBtn01[i],OUTPUT); digitalWrite( pinLEDBtn01[i], LOW);
for (int j = 0; j < sizeof(ButtonPins); j++){
pinMode(ButtonPins[i],INPUT);
// for(int i = 0; i < 3; i++){
// pinMode( pinLEDBtn01[i],OUTPUT); digitalWrite( pinLEDBtn01[i], LOW);
// pinMode( pinLEDBtn02[i],OUTPUT); digitalWrite( pinLEDBtn02[i], LOW);
// pinMode(Button01, INPUT);
// pinMode(Button02, INPUT);
}
}
}
void loop()
{
newSwitchState = digitalRead(ButtonPins[i]);
if ( newSwitchState != oldSwitchState )
{
// has the button switch been closed?
if ( newSwitchState == HIGH )
{
// increase the value of state
state++;
if (state > 3) {
state = 0;
}
for (int i = 0; i < 3; i++){
if (digitalRead(ButtonPins[i])==HIGH) ButtonStates[i]=1;
else ButtonStates[i]=0;
}
for (int i = 0; i < 3; i++){
if (ButtonStates[i] == 1) digitalWrite(pinLEDBtn01[i],HIGH);
else digitalWrite(pinLEDBtn01[i],LOW);
}
// turn all LEDs off. Doing it this way means we do not need to care about the individual LEDs
// simply turn them all off and then turn on the correct one.
digitalWrite(pinLEDBtn01[0], LOW);
digitalWrite(pinLEDBtn01[1], LOW);
digitalWrite(pinLEDBtn01[2], LOW);
digitalWrite(pinLEDBtn02[0], LOW);
digitalWrite(pinLEDBtn02[1], LOW);
digitalWrite(pinLEDBtn02[2], LOW);
// Turn on the next LED
// Because the value of state does not change while we are testing it we don't need to use else if
if (state == 1) {
digitalWrite(pinLEDBtn01[0], HIGH);
}
if (state == 2) {
digitalWrite(pinLEDBtn01[1], HIGH);
}
if (state == 3) {
digitalWrite(pinLEDBtn01[2], HIGH);
}
if (state == 1) {
digitalWrite(pinLEDBtn02[0], HIGH);
}
if (state == 2) {
digitalWrite(pinLEDBtn02[1], HIGH);
}
if (state == 3) {
digitalWrite(pinLEDBtn02[2], HIGH);
}
}
oldSwitchState = newSwitchState;
}
}
Danke!
[EDIT] Sketch in Code Tags verfrachtet. Uwe[EDIT]