Moin Also ich habe vor dem ws2812b (oder anderen Stripes oder Bauteilen) per DIPSchalter diverse Programme zuzuweisen
Im Beispiel ein Knightrider lauflicht für die WS2812
Nun die eigentliche Frage geht das einfacher als in meinem Beispiel (für dessen Sinnvolle und richtige Funktion ich natürlich nicht bürge ^^)
#include <Adafruit_NeoPixel.h>
#define PIN 10
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);
int wc = 0;
int t;
void setup()
//Dipschalter eingänge
{
pinMode(2, INPUT);
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
pinMode(9, INPUT);
strip.begin();
strip.show();
}
void loop() {
if ( digitalRead(2) == digitalRead(6) && digitalRead(3) == digitalRead(7) && digitalRead(4) == digitalRead(8) && digitalRead(5) == digitalRead(9) ) //Schalterstellung für programm einlesen
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel(wc));
t = i - 1;
if (t < 0) t = strip.numPixels() - 1;
strip.setPixelColor(t, strip.Color( 0, 0, 0));
strip.show();
delay(50);
}
for (int i = strip.numPixels() - 1; i >= 0; i--) {
strip.setPixelColor(i, Wheel(wc));
t = i + 1;
if (t >= strip.numPixels()) t = 0;
strip.setPixelColor(t, strip.Color( 0, 0, 0));
strip.show();
delay(50);
}
wc++;
if (wc > 255) wc = 0;
}
uint32_t Wheel(byte WheelPos) {
if (WheelPos < 85) {
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
} else if (WheelPos < 170) {
WheelPos -= 85;
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
} else {
WheelPos -= 170;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
}
Ich frage halt jedesmal die Stellung pro funktion ab . Das geht zwar aber bei 12 oder 13 Funktionen is das halt sehr viel Schreibarbeit .Grad bei 8 oder 16 Bit ^^
Geht das einfacher/kürzer.
Würde auch gern bei Dip bleiben und keine Drehschalter Potis oder irgendwelche Wiederstandsänderungsgeschichten benutzen .
LG und Danke im Vorraus .