#include <TimerOne.h>
#include <Adafruit_NeoPixel.h>
#define TASTER_PIN 3
#define RING_PIN 2
#define SENSOR_PIN A0
#define POTI_PIN A1
Adafruit_NeoPixel LEDRing(16, RING_PIN, NEO_GRB + NEO_KHZ800);
volatile bool buttonpressed = false; //FLAG FÜR EIN bUTTONCHANGE
volatile int debounceCounter = 0;
void setup() {
pinMode(TASTER_PIN, INPUT_PULLUP);
Timer1.initialize(1000); // 1000 µs = 1 ms
Timer1.attachInterrupt(debounceTaster);
LEDRing.begin();
for (int i = 0; i < 16; i++) {
LEDRing.setPixelColor(i, 0, 0, 0);
}
LEDRing.show();
}
void loop() {
static int zaehlwert = 0;
if (buttonpressed) {
buttonpressed = false;// Flag zurücksetzen
zaehlwert ++ ;
}
if (zaehlwert % 2 == 1) {
int luxWert = map(analogRead(SENSOR_PIN), 0, 1023, 1023, 0);
brightnessLEDRing(luxWert);
int potiWert = analogRead(POTI_PIN);
int voltWert = 44 - (potiWert * (44 - 12) / 1023.0);
rudderIndicator(voltWert);
} else {
for (int c = 0; c < 16; c++) {
LEDRing.setPixelColor(c, 0, 0, 0);
}
LEDRing.show();
}
}
void brightnessLEDRing(int a) {
int brightness = map(a, 0, 1023, 255, 0);
LEDRing.setBrightness(brightness);
LEDRing.show();
}
void rudderIndicator(int b) {
if (b >= 12 && b < 28) {
int numLEDs = map(b, 28, 12, 0, 8);
for (int i = 0; i < 8; i++) {
if (i < numLEDs) {
LEDRing.setPixelColor(8 + i, 0, 255, 0);
} else {
LEDRing.setPixelColor(8 + i, 0, 0, 0);
}
}
for (int i = 0; i < 8; i++) {
LEDRing.setPixelColor(7 - i, 0, 0, 0);
}
} else if (b > 28 && b <= 44) {
int numLEDs = map(b, 28, 44, 0, 8);
for (int i = 0; i < 8; i++) {
if (i < numLEDs) {
LEDRing.setPixelColor(7 - i, 255, 0, 0);
} else {
LEDRing.setPixelColor(7 - i, 0, 0, 0);
}
}
for (int i = 0; i < 8; i++) {
LEDRing.setPixelColor(8 + i, 0, 0, 0);
}
}
LEDRing.show();
}
void debounceTaster() {
bool aktuellerStatus = digitalRead(TASTER_PIN);
static bool letzterStatus = HIGH;
if (aktuellerStatus != letzterStatus) {
debounceCounter++;
if (debounceCounter >= 10) {
letzterStatus = aktuellerStatus; // Aktualisiere stabilen Status
debounceCounter = 0; // Zähler zurücksetzen
if (letzterStatus == LOW) {
buttonpressed = true; // Markiere Änderung
}
}
} else {
debounceCounter = 0; // Zähler zurücksetzen, wenn keine Änderung
}
}