Eine Anregung mit neun NeoPixeln:
#include <Adafruit_NeoPixel.h>
#define PIN 6
#define ANZAHLNEOPIXEL 9
Adafruit_NeoPixel strip = Adafruit_NeoPixel(ANZAHLNEOPIXEL, PIN, NEO_RGB + NEO_KHZ800);
const byte linksPin = A0, stoppPin = A1, rechtsPin = A2;
uint32_t aktMillis, tasterMillis;
bool linksAkt, stoppAkt, rechtsAkt, linksAlt, stoppAlt, rechtsAlt;
void setup() {
strip.begin();
stop();
strip.show();
pinMode(linksPin, INPUT); // Taste LINKS
digitalWrite(linksPin, HIGH); // interner pullup Widerstand
pinMode(stoppPin, INPUT); // Taste STOP
digitalWrite(stoppPin, HIGH); // interner pullup Widerstand
pinMode(rechtsPin, INPUT); // Taste RECHTS
digitalWrite(rechtsPin, HIGH); // interner pullup Widerstand
}
void loop() {
aktMillis = millis();
linksAlt = linksAkt;
stoppAlt = stoppAkt;
rechtsAlt = rechtsAkt;
if (aktMillis - tasterMillis >= 30) {
linksAkt = digitalRead(linksPin);
stoppAkt = digitalRead(stoppPin);
rechtsAkt = digitalRead(rechtsPin);
if (!stoppAlt && stoppAkt) {
stop();
} else if (!linksAlt && linksAkt) {
links();
} else if (!rechtsAlt && rechtsAkt) {
rechts();
}
}
}
// Funktion STOP
// zuerst alle Pixel aus, dann die mittleren 6 auf Rot
void stop() {
for (uint16_t j = 0; j < strip.numPixels(); j++) {
strip.setPixelColor(j, strip.Color(0, 0, 0));
}
for (uint16_t j = 3; j < 6; j++) {
strip.setPixelColor(j, strip.Color(150, 0, 0));
}
strip.show();
}
void links() {
for (uint16_t j = 0; j < strip.numPixels(); j++) {
strip.setPixelColor(j, strip.Color(0, 0, 0));
}
for (uint16_t j = 0; j < 3; j++) {
strip.setPixelColor(j, strip.Color(0, 150, 0));
}
strip.show();
}
void rechts() {
for (uint16_t j = 0; j < strip.numPixels(); j++) {
strip.setPixelColor(j, strip.Color(0, 0, 0));
}
for (uint16_t j = 6; j < 10; j++) {
strip.setPixelColor(j, strip.Color(0, 150, 0));
}
strip.show();
}