#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Initialisierung des I2C-LCDs mit der I2C-Adresse 0x27 (das kann je nach Modul variieren)
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Pin-Definitionen für die Buttons
constexpr byte buttonPinYellow = 7;
constexpr byte buttonPinRed = 6;
constexpr byte buttonPinOrange = 5;
constexpr byte buttonPinBlue = 4;
// Pin-Definition für den Piezo-Lautsprecher
constexpr byte piezoPin {8};
// Pin-Definitionen für die LEDs
constexpr byte ledPinYellow {9};
constexpr byte ledPinRed {10};
constexpr byte ledPinOrange {11};
constexpr byte ledPinBlue {12};
// Variablen für die Farbauswahl
constexpr char *colors[] = {"Gelb", "Rot", "Orange", "Blau"};
constexpr byte buttonPins[] = {buttonPinYellow, buttonPinRed, buttonPinOrange, buttonPinBlue};
constexpr byte ledPins[] = {ledPinYellow, ledPinRed, ledPinOrange, ledPinBlue};
constexpr byte MAX_BUTTONS {sizeof(buttonPins) / sizeof(buttonPins[0])};
void setup() {
// Initialisiere das LCD
lcd.init();
lcd.backlight();
lcd.print("Waehle Farbe:");
// Initialisiere die Button-Pins als Input
for (byte i = 0; i < MAX_BUTTONS; i++) {
pinMode(buttonPins[i], INPUT_PULLUP);
}
// Initialisiere die LED-Pins als Output
for (byte i = 0; i < MAX_BUTTONS; i++) {
pinMode(ledPins[i], OUTPUT);
digitalWrite(ledPins[i], LOW); // LEDs aus
}
// Initialisiere den Piezo-Pin als Output
pinMode(piezoPin, OUTPUT);
}
void loop() {
for (byte i = 0; i < MAX_BUTTONS; i++) {
if (digitalRead(buttonPins[i]) == LOW) {
// Ton auf dem Piezo-Lautsprecher abspielen
tone(piezoPin, 1000, 200); // 1000 Hz Ton für 200 ms
// Zeige die entsprechende Farbe auf dem LCD an
updateLCD(colors[i]);
// Schalte die entsprechende LED ein und die anderen aus
updateLEDs(i);
// Warte, bis die Taste losgelassen wird, um Mehrfachauslösungen zu vermeiden
while (digitalRead(buttonPins[i]) == LOW) {
delay(50);
}
}
}
}
void updateLCD(const char color[]) {
lcd.clear();
lcd.print("Waehle Farbe:");
lcd.setCursor(0, 1);
lcd.print(color);
}
void updateLEDs(byte activeLed) {
for (byte i = 0; i < MAX_BUTTONS; i++) {
(i == activeLed) ? digitalWrite(ledPins[i], HIGH) : digitalWrite(ledPins[i], LOW);
}
}