/*
Getraenkeerkennung mit ATtiny85
================================
Hardware:
PB2 (Pin 7, ADC1) – Spannungsteiler LDR / 10 kΩ
PB1 (Pin 6) – Leucht-LED (weiß, beleuchtet Getränk), Vorwiderstand 100 Ω
PB0 (Pin 5) – Status-LED (grün), Vorwiderstand 330 Ω
Funktionsprinzip:
Der LDR sitzt in einem dunklen Gehäuse. Die weiße Leucht-LED strahlt das
Getränk an. Je nach Farbe (Cola = dunkel / Fanta = orange-hell) fällt
unterschiedlich viel Licht auf den LDR → der ADC-Wert ändert sich.
Fanta → Status-LED dauerhaft AN
Cola → Status-LED blinkt
Schwellenwert:
Muss einmalig kalibriert werden (Seriell-Monitor oder Potentiometer).
Standardwert: 512 (Mitte des ADC-Bereichs 0-1023).
Bei Wokwi: LDR-Helligkeit per Schieberegler anpassen, um Cola/Fanta zu simulieren.
*/
// ---- Pin-Definitionen ----
const uint8_t PIN_LDR = A1; // PB2, ADC1
const uint8_t PIN_LED_LIGHT = 1; // PB1 – Leuchtdiode
const uint8_t PIN_LED_STATUS = 0; // PB0 – Statusanzeige
// ---- Konfiguration ----
const int SCHWELLE = 512; // ADC-Schwellenwert (0–1023)
const uint16_t MESSUNGEN = 20; // Anzahl Messungen für Mittelwert
const uint16_t BLINK_AN = 200; // ms LED an bei Blinken (Cola)
const uint16_t BLINK_AUS = 300; // ms LED aus bei Blinken (Cola)
const uint16_t MESS_PAUSE = 50; // ms zwischen Einzelmessungen
// ---- Hilfsfunktion: ADC-Mittelwert ----
int adcMittelwert() {
long summe = 0;
for (uint16_t i = 0; i < MESSUNGEN; i++) {
summe += analogRead(PIN_LDR);
delay(MESS_PAUSE);
}
return (int)(summe / MESSUNGEN);
}
void setup() {
pinMode(PIN_LED_LIGHT, OUTPUT);
pinMode(PIN_LED_STATUS, OUTPUT);
// Leucht-LED dauerhaft an (beleuchtet Getränk)
digitalWrite(PIN_LED_LIGHT, HIGH);
// Kurze Startsequenz: Status-LED dreimal kurz blinken
for (uint8_t i = 0; i < 3; i++) {
digitalWrite(PIN_LED_STATUS, HIGH);
delay(80);
digitalWrite(PIN_LED_STATUS, LOW);
delay(120);
}
// Wartezeit damit sich der LDR stabilisiert
delay(500);
}
void loop() {
int adcWert = adcMittelwert();
/*
Interpretation:
Fanta ist orange-transparent → reflektiert mehr Licht → LDR niederohmig
→ Spannungsteiler: Ausgang HOCH → ADC-Wert HOCH (> SCHWELLE)
Cola ist dunkelbraun → schluckt mehr Licht → LDR hochohmig
→ Spannungsteiler: Ausgang NIEDRIG → ADC-Wert NIEDRIG (< SCHWELLE)
Hinweis: je nach LDR-Verschaltung (LDR nach VCC oder GND) kann die
Logik umgekehrt sein – Schwelle und Vergleich dann anpassen.
*/
if (adcWert > SCHWELLE) {
// --- FANTA erkannt → Status-LED dauerhaft AN ---
digitalWrite(PIN_LED_STATUS, HIGH);
delay(200); // kurze Pause vor nächster Messung
} else {
// --- COLA erkannt → Status-LED blinkt ---
digitalWrite(PIN_LED_STATUS, HIGH);
delay(BLINK_AN);
digitalWrite(PIN_LED_STATUS, LOW);
delay(BLINK_AUS);
}
}