Hallo mascha1902
Das erinnert mich an die Schaukästen in Museen.
Hier kommt ein einfaches Beispiel in der Umsetzung in klassenloser OPP.
Die Portadressen für die Leuchtkörper werden hier festgelegt:
constexpr byte LedPins[] {9, 10, 11};
Die Portadressen für die Taster werden hier festgelegt:
constexpr byte ButtonPins[] {A1,A2,A3,A0};
Die Namen für die Tasten werden hier definiert:
enum Input {One, Two, Three, Main};
Wobei Main der Name für den "Hauptschalter" ist.
So kannst du einfach die Anzahl der Taster und der dazugehörigen Leuchtkörper nach belieben ändern ohne das Programm ändern zu müssen. Viel Spass beim Spielen.
/* BLOCK COMMENT
ATTENTION: This Sketch contains elements of C++.
https://www.learncpp.com/cpp-tutorial/
Many thanks to LarryD
https://europe1.discourse-cdn.com/arduino/original/4X/7/e/0/7e0ee1e51f1df32e30893550c85f0dd33244fb0e.jpeg
https://forum.arduino.cc/t/mehere-schalter-zusammen-verwenden/1010652
Tested with Arduino: Mega[x] - UNO [ ] - Nano [ ]
*/
#define ProjectName "Mehrere Schalter zusammen verwenden "
// HARDWARE AND TIMER SETTINGS
// YOU MAY NEED TO CHANGE THESE CONSTANTS TO YOUR HARDWARE AND NEEDS
constexpr byte ButtonPins[] {A1,A2,A3,A0}; // portPin o---|button|---GND
constexpr byte LedPins[] {9, 10, 11}; // portPin o---|220|---|LED|---GND
#define OutPutTest
constexpr unsigned long OutPutTestTime {1000};
// CONSTANT DEFINITION
enum Input {One, Two, Three, Main};
// VARIABLE DECLARATION AND DEFINITION
unsigned long currentTime;
// -- objects -----------------------------------------
struct BUTTONLED {
const byte ButtonPin;
int stateOld;
const int LedPattern[sizeof(LedPins)];
unsigned long duration; // memory for interval time
unsigned long stamp; // memory for actual time
};
BUTTONLED buttonLeds[]
{
{ButtonPins[Main],false,{LOW,LOW,LOW},20,0},
{ButtonPins[One],false,{HIGH,LOW,LOW},20,0},
{ButtonPins[Two],false,{LOW,HIGH,LOW},20,0},
{ButtonPins[Three],false,{LOW,LOW,HIGH},20,0},
};
// -------------------------------------------------------------------
void setup() {
Serial.begin(9600);
Serial.println(F("."));
Serial.print(F("File : ")), Serial.println(__FILE__);
Serial.print(F("Date : ")), Serial.println(__DATE__);
Serial.print(F("Project: ")), Serial.println(ProjectName);
pinMode (LED_BUILTIN, OUTPUT); // used as heartbeat indicator
// https://www.learncpp.com/cpp-tutorial/for-each-loops/
for (auto ButtonPin : ButtonPins) pinMode(ButtonPin, INPUT_PULLUP);
for (auto LedPin : LedPins) pinMode(LedPin, OUTPUT);
#ifdef OutPutTest
// check outputs
for (auto LedPin : LedPins) digitalWrite(LedPin, HIGH), delay(OutPutTestTime);
for (auto LedPin : LedPins) digitalWrite(LedPin, LOW), delay(OutPutTestTime);
#endif
}
void loop () {
currentTime = millis();
digitalWrite(LED_BUILTIN, (currentTime / 500) % 2);
for (auto &buttonLed:buttonLeds)
{
if (currentTime-buttonLed.stamp>=buttonLed.duration)
{
buttonLed.stamp=currentTime;
int stateNew=!digitalRead(buttonLed.ButtonPin);
if (buttonLed.stateOld!=stateNew)
{
buttonLed.stateOld=stateNew;
if (stateNew)
{
int element=0;
for (auto LedPin : LedPins) digitalWrite (LedPin,buttonLed.LedPattern[element++]);
}
}
}
}
}
Ich wünsche einen geschmeidigen Abend und viel Spass beim Programmieren in C++.