#include <Adafruit_NeoPixel.h>
#define RINGPIN 4
#define onOffButtonPin 2
#define POTI A0
#define lightDOPin A1
#define RED 0xFFFF0000
#define GREEN 0xFF00FF00
#define WHITE 0xFFFFFFFF
volatile bool umschalter = 1;
unsigned long lastMillis = 0;
Adafruit_NeoPixel ring(16, RINGPIN);
void setup() {
pinMode(lightDOPin, INPUT);
pinMode(POTI, INPUT);
pinMode(onOffButtonPin, INPUT_PULLUP);
pinMode(RINGPIN, OUTPUT);
attachInterrupt(digitalPinToInterrupt(onOffButtonPin), entpreller, LOW);
Serial.begin(9600);
ring.begin();
}
void entpreller() {
const unsigned long debounceDelay = 50;
if (millis() - lastMillis > debounceDelay) {
umschalter = !umschalter;
lastMillis = millis();
Serial.println("1"); //nur zum test. Kann Rausgenommen werden
}
}
void controlRing(int ruderLage, int Helligkeit) {
ring.clear();
if (ruderLage < 8) { //Ruder nach links
ring.fill(RED, ruderLage, 9 - ruderLage);
//ring.fill(color, first, count) -> color=selbsterklärend,
//first = erster pixel der angesprochen wird, count = anzahl Pixel
} else if (ruderLage > 8) { //ruder nach rechts
ring.fill(GREEN, 8, ruderLage - 7);
} else { //wenn ruder in der mitte ist
ring.fill(WHITE, 8, 1);
}
ring.setBrightness(Helligkeit);
ring.show(); //updated den Ring
}
void loop() {
int ruderLage = map(analogRead(POTI), 246, 900, 1, 15);
/* "Mapt" die Werte des Potis (0 bis 1023) auf einen dementsprechenden wert
des Rings (1 bis 15). Das selbe gleich mit dem Photosensor*/
int Helligkeit = map(analogRead(lightDOPin), 1016, 8, 50, 255);
//50 statt 1 da sonst bei totaler Dunkelheit das licht aus wäre.
if (umschalter) {
controlRing(ruderLage, Helligkeit); //setzt die Farben und Helligkeiten
} else {
ring.clear(); // macht den ring dunkel
ring.show();
}
}