Hallo Leute, könnt ihr mir helfen, ich lese und probiere seit Stunden, bekomme aber diese einfache Aufgabe nicht gelöst:
Prinzipiell soll ein Pin einen linken Blinker anschalten, ein zweiter Pin soll den rechten Blinker einschalten; sind beide Pins ohne Signal, soll das Standlicht leuchten.
Versuchsaufbau an einem Nano von Elegoo.
Die LEDs sind WS2812b in einem Stripe.
Aktuell leuchtet nur eine LED als Standlicht (statt 2) und egal welcher PIN auf LOW gezogen wird- die eine LED wird bunt, aber nicht orange und schon gar nicht blinkend.
1
#include<Adafruit_NeoPixel.h>
2
#ifdef __AVR__
3
#include<avr/power.h>
4
#endif
5
6
#define PIN 4 //Linke LED //die beiden PINs für die LED-Stripes
7
#define PIN 5 //Rechte LED
8
9
#define LINKSPIN A4 //die beiden PINs für das LOW-Signal
10
#define RECHTSPIN A5
11
intSensor1=0;
12
intSensor2=0;
13
14
#define NUMPIXELS 10 //Anzahl der LEDs in dem Stripe
ich kenne diese lib nicht, bin aber sicher das du sie für jeden stripe instanzieren kannst.
ie
#define PIN_4 //Linke LED //die beiden PINs für die LED-Stripes
#define PIN_5 //Rechte LED
die digitalWrite() auf 4 bzw 5 in deinen funktionen, was sollen die machen?
entweder ist da eine neopixel dran oder eine normale LED.
zeichnung wär nötig zur klärung.
Ich möchte die Gelegenheit benutzen, daran zu erinnern, daß, wenn man mit fertigen Modulen und Bibliotheken am Besten so vor geht, indem man die HW und SW genauso wie der Entwickler als "Referenzdesign" erstmalig so in Betrieb nimmt. Im Falle dieses Versuchs, alles diesbezüglich von Adafruit dokumentiert sorgfältig durchzugehen.
Schritt eins ist immer die mitgelieferten Beispiele zu testen und erst danach mit eigenen Exkursionen zu beginnen. Erst wenn die Anordnung wie beschrieben (ordnungsgemäß) funktioniert, dann selber mit eigenen Adaptionen anzufangen.
Zweitens schlage ich vor die Modul Drahtverbindungen als Stromlaufplan wie in den Anschlußbestimmungen auf Papier zu zeichnen oder ECAD herzustellen, so daß man einen guten Überblick hat und etwaige Schaltfehler leichter und schneller erkennen kann.
Steckbrett Aufbauten sollten erst auf Papier geplant werden. Auch hilft es mit fertig konfektionierten Drahtbrücken Kits mit verschiedenen Längen anstatt mit wild abgeschnittenen Drähten zu verdrahten. Man sollte sich nach Möglichkeit Gedanken über sachgerechte Anordnung der Komponenten und Verdrahtung machen. Dann erst aufbauen und verdrahten. Nicht einfach loslegen. Systematisch vorgehen.
Drittens, wenn es schon erstmalig nicht funktionieren sollte, ausschalten. Dokus durchgeben, jede Verbindung auf Herz und Nieren auf Probleme zu untersuchen.
Bei fremden Bibliotheken nach augenscheinliche erfolgreiche Berichte im Internet suchen.
Bei TWI/I2C IMMER nachprüfen ob die Module die vorschriftsmäßigen Pullup Rs aufweisen. Meist funktionieren Werte im Bereich von 2-5KOhm.
Man wird nicht glauben wollen, wie leicht sich der Fehlerteufel einschleichen kann. Das passiert auch alten Hasen. Immer prüfen und wissen - nicht glauben. Im Falle des Falles ist ALLES verdächtig.
Hier im Forum wurde schon oft gepredigt, uC minimalistisch ausreichend Hersteller Vorschriften gemäß zu beschalten. Vernünftig platzierte und geeignete Abblock Cs sind nie ein Luxus.
Im Datenblatt immer alle Herstellervorgaben bezüglich Betrieb einhalten.
Wenn man das alles beachtet, erspart man sich oft viel Leid und Frust.
Seriell?
Ein Stripe alleine funktioniert wie gewünscht, ich scheitere an "zwei Outputs", also ich finde einfach keine Lösung, zwei Outputs anzusprechen, ich hab alle möglichen Anweisungen mal in das Void geschrieben, mal in den Loop, mal am Anfang, mal am Ende- keine Ahnung was wo an falscher Stelle steht, ich bin grad erst am Verstehen 😉.
Seriell?
Ein Stripe alleine funktioniert wie gewünscht, ich scheitere an "zwei
Outputs", also ich finde einfach keine Lösung, zwei Outputs
anzusprechen, ich hab alle möglichen Anweisungen mal in das Void
geschrieben, mal in den Loop, mal am Anfang, mal am Ende- keine Ahnung
was wo an falscher Stelle steht, ich bin grad erst am Verstehen 😉.
Edit: Während ich hier auf die erste Antwort reagiere, bekomme ich bereits neue Antworten- danke für so viel Input.
Ja es sind 2 Stripe im Versuchsaufbau mit je 10 LED.
Die Adafruit-Bibliothek ist eine Standard-Bib für alle digitalen LEDs, auf der Arduino-Benutzeroberfläche integriert.
geht nicht! der letzte #define gewinnt, PIN ist somit 5.
und somit wird die class pixels mit "PIN 5" initialisiert
Ahh ok, ich hab mir schon den Kopf zerbrochen, zumal ich den Pins nicht mal Namen zuordnen kann, das es dann immer zu Fehlern kommt (also "#define PIN 4" geht, #define Links 4" geht nicht).
Hier könnt ihr Projekte, Schaltungen oder Codeschnipsel vorstellen.
Projekte bitte nur mit Code oder Schaltplan posten (falls ihr nur
Fotos vorstellen möchtet, bitte in "Zeigt her eure Kunstwerke").
Bitte hier keine Fragen posten.
Ist vermutlich nötig, das in "einfachem Deutsch" neu zu formulieren.
die digitalWrite() auf 4 bzw 5 in deinen funktionen, was sollen die
machen?
Ich vermute stark er will damit die Pullups aktivieren. Keine Ahnung ob das bei der Arduino Lib so auch geht.
Solange es nicht verprüft wird und nur auf das Datenregister geschrieben wird...vielleicht.
Ich kenne das aber auch eher so:
Das war die Lösung, einen Herzlichen Dank dafür. Für jede LED an einem PIN muss ich eine eigene Formel schreiben, auf diese Idee wäre ich nie gekommen :D
Ja es soll ein Wisch-Licht sein, also jede LED durchzählen, die KLEINER
ALS 11 ist. Das ist praktisch, wenn man nicht alle LEDs ansprechen will.
Was dir donvido sagen will ist, 0bis 10 sind aber schon bereits 11 Pixel. Du hast die 0 nicht meitgezählt, das ist ja das erste Pixel.
p.s. Das ist ein sehr beliebter Fehler, macht garantiert jeder mal. Du bemerkst es ja gar nicht, das dann noch eine 11. LED angesteuert wird. Die Daten fallen einfach am Ende hinten raus und kommen nirgends an.
Für jede LED an einem
PIN muss ich eine eigene Formel schreiben, auf diese Idee wäre ich nie
gekommen :D
du kommst aber auch nicht auf die Idee alle 20 LEDs mit einem Pin zu bedienen, für linken Blinker LED 0-9 und für rechten Blinker LED 10-19
Geht alles in einem Stripe, man muss nur die Daten passend rausschieben, inklusive LED Fading / Nachleuchten.
ich lese und probiere seit Stunden,
bekomme aber diese einfache Aufgabe nicht gelöst
Wie kommst du zu dem Urteil, dass die Aufgabe einfach zu lösen ist, wenn du es selber nicht in annehmbarer Zeit hin bekommst.
Wieso maßt du dir bei diesem Stand deiner Fähigkeiten an, dies beurteilen zu können?
Wenn ich mich recht erinnere ist das ganz viel rot mit ganz wenig blau dazu; kein Wunder, daß das nicht orange wird.
pixels.Color(250,128,0)
Das sollte in Richtung orange gehen; wenn dabei eine ganz andere Farbe rauskommt müßtest Du die Konstante NEO_GRB in der Initialisierung anpassen, dann haben die einzelnen Pixel eine andere Farbreihenfolge. Aber bei pixels.Color(R, G, B) ist die Reihenfolge der Farbanteile immer rot, grün, blau.
du kommst aber auch nicht auf die Idee alle 20 LEDs mit einem Pin zu
bedienen,
Doch, die Idee hatte ich schon, aber dann würde ich es mir noch schwerer machen, da die Blinker ja gespiegelt funktionieren sollen (beim wischen wichtig, von innen nach außen zu leuchten und würden beide Blinker in einer Linie hängen, müsste ich einen Rückwärtszähler für den zweiten Blinker einbauen und soweit bin ich noch nicht)
Wenn ich mich recht erinnere ist das ganz viel rot mit ganz wenig blau
dazu; kein Wunder, daß das nicht orange wird.
Das ist ein RBG-Stripe, also 250 Rot, 10 Grün.
Das Problem des "wilden Blinkens und Leuchtens" ändert sich zu "korrekte Anzeigeweise", wenn ich den Minuspol des Stripe anfasse und so mit mir erde- dieses Phänomen habe ich auch noch nicht verstanden- Stripe und Nano sind miteinander geerdet.
Die Farben sind im Video kaum erkennbar, aber der obere Stripe mit 10 LEDs blinkt korrekt in Organge, der kleine Stripe darunter mit nur 3 LED blinkt stets in zufälligen Farben, bis ich die Lötstelle mit dem Finger berühre, dann blinkt er auch wie gewünscht.
Das macht der zweite kurze Stripe mit 3 LEDs ebenfalls.
Der Nano läuft über 5V USB, der Stripe über ein 12V-Netzteil.
Ok, Arduino GND hängt also am GND des 4. Stripe, und am GND vom USB.
Wieviel Potentialeifferenz hast du zwischen USB GND und 4. Stripe GND? Wird es stabiler, wenn du den Arduino aus +12V und dem GND am 4. Stripe versorgst?
Wieviel Potentialdifferenz hast du zwischen GND vom 4. Stripe und GND vom 1. Stripe? Denn (merke!) bei hohen Strömen machen Kabel Spannungsabfall!
Ich habe nach Fotos vom Aufbau gefragt, insbesondere dem Verlauf der
Stromversorgung.
Das habe ich ja mit dem Zeichnung realisiert, denn in real sind die Leitungen natürlich länger und ich wüsste nicht, wie ich das filmen sollte, so dass man noch durchblickt
Das habe ich ja mit dem Zeichnung realisiert, denn in real sind die
Leitungen natürlich länger und ich wüsste nicht, wie ich das filmen
sollte, so dass man noch durchblickt
Dann bleibt als nur zu raten.
An deinen GND Leitungen fällt Spannung ab, welche das Daten-Signal verzerrt. Du musst an jeder Lichterkette zwei GND Leitungen verlegen, eine zur Stromversorgung und eine für das Daten-Signal. Siehe http://stefanfrings.de/ws2812/index.html
Ich habe die Stripe, die Probleme machen, ausgetauscht- jetzt läuft es. Vielleicht mal zu stark geknickt. Die Stripe befinden sich in einem vergossenem Kunststoffschlauch, kann deshalb die Leiterbahnen nicht überprüfen. Danke für eure Hilfe. Gruß Micha