Hallo an alle
Ich möchte in meinen Gang eine Neo Pixel Streifen an der Decke installieren.
Es ist Neo Pixel Streifen mit WS2811 Treibern im Betrieb.
Es gibt 3 Taster,
Taster 1 Led laufen von Links nach Rechts.
Taster 2 Led laufen von Rechts nach links.
Taster 3 Led sollen nur Punktweisen leuchten.
Und jetzt das Problem, wenn ich im Code bei NUMPIXELS 100 eintrage bleibt
der Letzte 3 er Block des Neo Pixel Streifen aus.
Trage ich im Code bei NUMPIXELS 101 ein geht er an.
Das gilt für Taster 1 und 2
Bei Taster 3 sollen ja nur Punktweise Leds aufleuchten.
Wenn ich bei :
Hast du es auch verstanden? Oder einfach nur kopiert?
Magische Nummern:
Ein im Quellcode eines Programms auftauchender Zahlenwert (auch englisch „hard coded value“ genannt), dessen Bedeutung sich nicht unmittelbar erkennen lässt – seine Bedeutung ist somit „magisch“. Derartige Magische Zahlen sind zu vermeiden und durch gut benannte Konstantendefinitionen zu ersetzen, deren Namen, Bedeutung und Herkunft klar angegeben ist. Aus: Magische Zahl (Informatik) – Wikipedia
Hallo wwerner
Also wie ich es verstanden habe spreche ich mit der Nummer 99 den letzen Led Controller an. Weil der Neo Pixel Streifen hat 100 Controller der erste beginnt mit 0 und der letze ist dann der 99 zigste, Wenn ich es falsch verstanden habe bitte ich um Berichtigung von dir.
Das klapp ja alles soweit wie ich mir das Vorstelle.
Nur was ich nicht verstehe ist wenn ich bei
"#define NUMPIXELS 100" eintrage bleibt der letze Block aus.
Trage ich 101 ein geht der letze Block mit an.
Und Trage ich hier 99 ein geht der letze Block mit an.
Du liest das Potenzial an einem PIN den du im Setup mit einem PullUp ausstattest. Durch den PullUp ist das Potenzial an dem Pin ohne Einfluss von außen HIGH. Über einen Taster kannst du das Potenzial auf GND ziehen. Sprich bei gedrückten Taster hättest du am Pin ein LOW.
Jetzt fragst du in deinem Code im Loop ob der PIN HIGH ist und führst eine Funktion aus.
Also wird die Funktion immer ausgeführt, solange du den Taster nicht drückst. Laut Beschreibung im Eingangspost, liest es sich, das etwas ausgeführt werden soll, wenn der Taster gedrückt wird, und nicht, wenn er nicht gedrückt wird.
Problem 2 (schon erwähnt # 8):
Falsche Logik beim digitalRead() der Schalter-Pins
Problem 3:
Du solltest Dich entscheiden, ob die Grenzen der zu setzenden Pins in setA(), setB(), setC() oder aber in setd() angegeben werden sollen.
Mögliche Abhilfe: i <= ed in setd() - was Dein eigentlich beschriebenes Problem mit der 100 und der 101 löst.
Problem 4:
Ausschalten des letzten Pixels in setA() und setB() funktioniert nicht, weil hinter dem pixels.clear() jeweils ein pixels.show() fehlt.
Zum Anschauen etwas langsamer und mit nur 30 Lämpchen:
Das hatten wir schon - wenn Du als Maximum NUMPIXELS - 1 an die Funktion setd() übergibst, musst Du darin in der for-Schleife auch bis dahin zählen lassen (i <= ed) und nicht einen Pixel vorher aufhören (i < ed):
void setd(int st, int ed)
{
pixels.clear();
for (int i = st; i <= ed; i++) { // For each pixel...
pixels.setPixelColor(i, pixels.Color(0, 255, 0 ));
//delay(5);
}
pixels.show();
}
Das folgende ist etwas unklar - gleichzeitig oder nacheinander?
Hier ist die Lösung, wo gleichzeitig von der Mitte nach außen gearbeitet wird:
Hallo wno158
Danke für die schnelle Antwort.
Jetzt habe ich es verstanden,mit dem " (i <= ed) "
Da wäre ich nie draufgekommen. Ich habe erst die Woche mit den
Neo Pixel Streifen angefangen für meinen Flur zu Programmieren.
Nochmal danke für die vielen Antworten.
Gruss Stefan
Hallo wwerner
Das mit dem Programmieren klappt ja schon ganz gut. Aber das mir den Neo Pixeln habe ich erst diese Woche Angefangen. Und das war mir bis jetzt neu , ist aber interesant was man damit machen kann.Werde es auf jedenfall weiter ausbauen.
GrussStefan