#include <Adafruit_NeoPixel.h>
#include <TimerOne.h>
#define TASTERPIN 8
#define RINGPIN 2
#define SENSORPIN A0
#define POTIPIN A1
Adafruit_NeoPixel LEDRing(16, RINGPIN, NEO_GRB + NEO_KHZ800);
void brightnessLEDRing(int a) {
int brightness = map(a, 0, 1023, 255, 0); // Luxwerte invertiert auf Helligkeit mappen
LEDRing.setBrightness(brightness);
LEDRing.show();
}
void rudderIndicator(int b) {
for (int i = 0; i < 16; i++) {
LEDRing.setPixelColor(i, 0, 0, 0); // Turn off all LEDs
}
LEDRing.show();
if (b == 28) {
// If voltage is 2.8V, turn off all LEDs
LEDRing.show();
return;
}
if (b >= 12 && b < 28) {
int numLEDs = map(b, 28, 12, 0, 8); // Map to 0-8 LEDs
for (int i = 8; i < 8 + numLEDs; i++) {
LEDRing.setPixelColor(i, 0, 255, 0); // Green
}
} else if (b > 28 && b <= 44) {
int numLEDs = map(b, 28, 44, 0, 8); // Map to 0-8 LEDs
for (int i = 7; i > 7 - numLEDs; i--) {
LEDRing.setPixelColor(i, 255, 0, 0); // Red
}
}
LEDRing.show();
}
void setup() {
pinMode(TASTERPIN, INPUT_PULLUP);
Serial.begin(9600);
LEDRing.begin();
for (int i = 0; i < 16; i++) {
LEDRing.setPixelColor(i, 0, 0, 0); // Clear LED ring
}
LEDRing.show();
}
void loop() {
bool tasterstatus = digitalRead(TASTERPIN);
static bool vorherigerTasterstatus = HIGH;
static long lastDebounceTime = 0;
static int zaehlwert = 0;
if (tasterstatus != vorherigerTasterstatus && millis() - lastDebounceTime >= 50) {
lastDebounceTime = millis();
if (tasterstatus == LOW) {
zaehlwert ++;
Serial.println (zaehlwert);
}
}
if (zaehlwert % 2 == 1) {
int luxWert = map(analogRead(SENSORPIN), 0, 1023, 1023, 0);
brightnessLEDRing(luxWert);
int potiWert = analogRead(POTIPIN);
int voltWert = 44 - (potiWert * (44 - 12) / 1023.0);
rudderIndicator(voltWert);
}
if (tasterstatus == HIGH && vorherigerTasterstatus == LOW) {
for (int c = 0; c < 16; c++) {
LEDRing.setPixelColor(c, 0, 0, 0);
}
LEDRing.show();
}
vorherigerTasterstatus = tasterstatus;
}