#include <Adafruit_NeoPixel.h> // Bibliothek für Pixelring
#include <TimerOne.h> // Bibliothek für Timer1 Interrupt
#define voltMax 4.4
#define voltMin 1.2
#define TASTERPIN 12
#define PIXELPIN 7
#define BRIGHTPIN A0 // Pin für Helligkeitssensor
#define POTIPIN A1 // Pin für Potentiometer
volatile bool buttonstate = false;
volatile bool buttonpressed = false;
volatile bool debounced = false;
Adafruit_NeoPixel ledRing(16, PIXELPIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(9600);
pinMode(TASTERPIN, INPUT_PULLUP);
pinMode(PIXELPIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(TASTERPIN), buttonISR, FALLING);
Timer1.initialize(50000); // Timer für 50 ms (Entprellzeit)
Timer1.attachInterrupt(timerISR);
ledRing.begin(); // Pixelring initialisieren
ledRing.show(); // Alle LEDs ausschalten
}
void buttonISR() {
buttonpressed = true; // Taster wurde gedrückt
Timer1.start(); // Timer starten für Entprellung
}
void timerISR() {
if (digitalRead(TASTERPIN) == LOW) {
debounced = true; // Taster wurde entprellt erkannt
}
Timer1.stop(); // Timer anhalten
}
void voltConversion(int potiRead) {
float voltWert = voltMax - (potiRead * (voltMax - voltMin) / 1023.0);
Serial.print("Analogwert: ");
Serial.print(potiRead);
Serial.print(" -> Spannung: ");
Serial.println(voltWert, 2);
setPixelRingSide(voltWert); // LEDs basierend auf Spannung setzen
// Aktion abgeschlossen
}
void setPixelRingSide(float voltage) {
int numLEDs = map(voltage, voltMin, voltMax, 0, 8); // Spannung auf 0–8 LEDs abbilden
numLEDs = constrain(numLEDs, 0, 8); // Grenzen sicherstellen (0–8)
if (voltage <= (voltMax + voltMin) / 2) {
// Linke LEDs rot, rechte aus
for (int i = 0; i < 8; i++) {
if (i < numLEDs) {
ledRing.setPixelColor(i, ledRing.Color(255, 0, 0)); // Rot
} else {
ledRing.setPixelColor(i, ledRing.Color(0, 0, 0)); // Aus
}
}
for (int i = 8; i < 16; i++) {
ledRing.setPixelColor(i, ledRing.Color(0, 0, 0)); // Rechte LEDs aus
}
} else {
// Rechte LEDs grün, linke aus
for (int i = 8; i < 16; i++) {
if (i < 8 + numLEDs) {
ledRing.setPixelColor(i, ledRing.Color(0, 255, 0)); // Grün
} else {
ledRing.setPixelColor(i, ledRing.Color(0, 0, 0)); // Aus
}
}
for (int i = 0; i < 8; i++) {
ledRing.setPixelColor(i, ledRing.Color(0, 0, 0)); // Linke LEDs aus
}
}
ledRing.show(); // Änderungen anzeigen
}
void loop() {
int potiWert = analogRead(POTIPIN);
int brightness = analogRead(BRIGHTPIN) / 4; // Helligkeitswert (0-255)
ledRing.setBrightness(brightness); // Pixelring-Helligkeit anpassen
voltConversion(potiWert); // Spannung berechnen und LEDs setzen
}