Hallo Liebe Arduino Geminde,
Aufbau:
Ich habe mir eine LED Matrix (17x17) mit den WS2812B Led’s gebaut.
Diese Steuere ich über ein 5V/20A Netzteil an. Die Led’s werden über 3 Punkte eingespeist
Erste einspeisung beim ersten Strip zweite beim 6 und die Dritte einspeisung über den 12 Strip.
Der Arduino Nano wird ebenfalls über das Netzteil mit Spannung versorgt und der Datenbus geht vom
DataPin 5 auf die Leds (wurde vorher mit nem 330er Widerstand versehen zum Schutz der Led’s)
Außerdem habe ich einen Raspberry 3 B+ wo ich das Programm Glediator verwende (falls nicht bekannt es ist ein Steuerprogramm extra für LED Matrixen). Der Raspi wurde über die Serielle USB schnittstelle direkt mit dem Nano an dem Mini USB anschluss verbunden.
Der Port des Nanos wird erkannt im Programm.
Problem:
Glediator bietet auf der Website einen Arduino Code an womit der Arduino die Daten von dem Programm
verarbeiten und es and die Led’s übertragen kann.
Blöd nur das der Code nur für die WS2811/WS2812 Gedacht ist und dieser auf meinem Arduino nicht läuft.
Nach ein wenig Suchen habe ich ein Video gefunden der wo er ebenfalls mit den WS2812B arbeitet einen
Code verwendet der für die Led’s funktioniert.
Gemacht getan, Led’s blinken so wie es sollen.
Dann habe ich ein wenig mit dem Programm rumgespielt aber mein Problem ist das ich eine Art Störfrequenzen auf die Led’s bekomme. Soll heißen wenn ich beispielsweise einen Text über die Matrix Laufen lasse, das willkürlich die Leds in unterschidlichsten Farben aufblitzen und wieder aus gehen (Led’s die ich garnicht ansprechen will)
Nun weiß ich nicht ob es an meinem Code liegt (da ich mit C/C++ noch nicht so vertraut bin was die Ansteuerung von direkter Hardware angeht) oder möglicherweise an dem Netzteil (welches direkt neben den Led’s liegt) und durch ein Enstehendes Magnetfeld dementsprechend Störfrequenzen auf irgend eine Art und Weise überträgt.
Mein Code sieht wie folgt aus:
#include <FastLED.h>
#define NUM_LEDS 289
const int dataline = 6;
CRGB leds[NUM_LEDS];
void setup() {
Serial.begin(1000000);
LEDS.addLeds<WS2812B, dataline>(leds, NUM_LEDS);
for (int p=0;p < NUM_LEDS;p++){
leds[p] = CRGB::Black;
FastLED.show();}
}
int serialReadBlocking(){
while(!Serial.available()) {}
return Serial.read();
}
void loop() {
while (serialReadBlocking() != 1) {}
for (long i=0; i < NUM_LEDS; i++) {
leds[i].r = serialReadBlocking();
leds[i].g = serialReadBlocking();
leds[i].b = serialReadBlocking();
}
FastLED.show();
}
Ich bin dankbar für jede Idee,
mfg Arzeg