MAX7219 Matrix Library

Moin,

ich habe mir mal just for fun 4 Stück von diesen 4-fach MAX7219 Led Matrix Modulen bestellt:

Die habe ich nun an einen nodeMCU angeschlossen.

Nun bin ich auf der Suche nach einer einfachen Library, bei den ich die Pixel einzeln ansteuern kann.

Hat da jemand einen Tipp?

Am Ende möchte ich die 4 Module übereinander anordnen, so dass ich eine X / Y Matrix von 32x32 Pixel habe. Und dann möchte ich da vielleicht sowas wie "Pong" drauf programmieren.

Ich habe schon alle möglichen Libraries in der IDE durch, aber bisher können die alle nur Texte und nicht einzelne Pixel ansteuern.

Lieben Gruß,
Chris

Da wirst Du nicht viel Fertiges finden. Schau Dir mal dieses 8x8-Zeichenprogramm an, das könnte evtl. als Basis für weiterführende Experimente dienen.

Gruß Tommy

Hallo Tommy,

ich habe mir das mal angesehen und auch die Library installiert.
Allerdings ist diese von 2012 und offensichtlich nicht mehr kompatibel mit der aktuellen IDE / nodeMCU :frowning:

Any other idea?

Danke und lieben Gruß,
Chris

Dann nimm sie als Anregung und baue Dir selbst mit dem Datenblatt eine Lib.

Gruß Tommy

Tja……. leider habe ich kein abgeschlossenes Programmierstudium sondern bin blutiger Anfänger in der Beziehung. Außerdem hab ich dank Familie auch keine Zeit da so tief einsteigen zu können. Ich möchte ein bisschen Fun haben und kein Programmierer werden. Also weitersuchen…

themanfrommoon:
Tja...…. leider habe ich kein abgeschlossenes Programmierstudium ...

Und dann traust Du Dich, hier Fragen zu stellen? :wink:

Nicht einfach aber gut finde ich MAX72xx LED Matrix Display Library eventuell zusammen mit Library for modular scrolling LED matrix text displays

Schöne Erklärung Tutorial – Arduino and the MAX7219 LED Display Driver IC

Ergebnis war der MP3-Player.

Und dann traust Du Dich, hier Fragen zu stellen?

Ja, ich weiß, ich bin unwürdig :slight_smile:

Die MD_MAX72XX und MD_Parola habe ich inzwischen auch schon gefunden.
Leider krieg ich die Beispiele irgendwie nicht zum Laufen?!
Die Pins sind korrekt, weil sie mit einem anderen Beispiel funktionieren.
Aber irgendwo anders klemmt es noch?!

Es gehen einfach immer nur alle LEDs von allen 4 Modulen an. Das wars?!

Ich glaube man muss da noch die Hardware einstellen.
const MD_MAX72XX::moduleType_t HARDWARE_TYPE = MD_MAX72XX::FC16_HW;
Ich hab schon alle Varianten ausprobiert, läuft aber immer noch nicht.
Hat jemand einen Tipp?

Lieben Gruß,
Chris

Für mich mal so zwischendurch:

LED Matrix Tool
Online tool to design fonts or images for an LED Matrix.

https://gurgleapps.com/tools/matrix

Trotzdem bin ich noch nicht weiter mit der MD_MAX72XX Library. Die Matrix macht nur alle Lampen an, aber sonst nix :frowning:

probiere es mal so

#define HARDWARE_TYPE MD_MAX72XX::FC16_HW         // < Use FC-16 style hardware module.

damit sollte dann die MD_ und deinen Modulen funktionieren. Besser dann muss es funktionieren.

Edit:
ich glaube es lohnt sich zu googeln:

und einige andere Projekte!

Hi

Such Mal in der IDE nach MAX7219 Panel - in einer der LIBs gibt's (unter Anderem) das Beispiel 'Mad Fly' - dort kannst Du für jedes 8x8-Modul die Position und die Ausrichtung angeben.
Da bei Dir bereits 4 Modul 'am Stück' sind, werden wohl diese 4 Module die gleiche Ausrichtung aufweisen - dem Arduino ist Das sonst eigentlich egal.
Davon ab - auf eBay sind die 4-fach-8x8-Dot-Matrix-Module für 4Eu zu haben.

MfG

themanfrommoon:
Es gehen einfach immer nur alle LEDs von allen 4 Modulen an. Das wars?!

Ich habe nur ein Modul. Nach dem Einschalten leuchten alle Punkte.

themanfrommoon:
Leider krieg ich die Beispiele irgendwie nicht zum Laufen?!

Das Beispiel Parola_HelloWorld läuft sofort, allerdings spiegelverkehrt und 90° gedreht mit meiner Hardware. "FC16_HW" zeigt die Buchstaben richtig, allerdings auch 90° gedreht. Bei "GENERIC_HW" steht die Schrift kopf. Parola verwendet halt andere Module.

PS: Ich bekomme ein paar Warnungen.

Hi

Meine nennt sich <Max72xxPanel.h> .
Dort kann ich für jedes 8x8-er Modul einzeln angeben, WO und WIE Es liegt.

matrix.setPosition(1, 2, 3); // The first display is at <0, 0>
  1. te Zahl - Modul-Nummer - fortlaufend, hier das 2.te Modul (Nummer 1, bei 0 beginnend)
    2.te Zahl - X-Position, hier 3.te Modul von Links
    3.te Zahl - Y-Position, hier 4.te Modul von Unten
 matrix.setRotation(0, 2);

Hiermit wird das Modul ‘0’ (also das aller Erste) ‘auf den Kopf’ gedreht - 0 wäre ‘bleibt so’, jede Zahl ‘dreht’ das Display um 90° (ob links/recht herum, müsste man schauen).
So kannst Du beliebig viele 8x8er DOT-Matrix-Module aneinander reihen und zu JEDEM einzeln angeben, WO Dieses zu Liegen kommt und wie rum Dieses liegt.
In der Lib wird dann geprüft, auf welcher DOT-Matrix der von Dir gewählte Punkt (in X/Y) liegt und dieser Punkt gesetzt.
Auch bei beliebigem Text, Den Du ‘irgendwohin schreibst’.

MfG

Die Lib kannte ich noch nicht. Danke für die Info, klingt vielversprechend.

Gruß Tommy

Moin,

ja cool, jetzt kommen wir der Sache schon sehr nahe :slight_smile:

Aber leider läuft es noch nicht ganz.

Ich habe folgendes verbunden:

CLK - CLK
SD1 - DIN
D5 - CS
GND nodeMCU - Display - 5V Netzteil
VCC - 5V Netzteil

Und das Sketch bisher so abgeändert:

#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
int pinCS = 14; // Attach CS to this pin, DIN to MOSI and CLK to SCK (cf http://arduino.cc/en/Reference/SPI )
int numberOfHorizontalDisplays = 1;
int numberOfVerticalDisplays = 4;
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
int pinRandom = A0;
int wait = 20; // In milliseconds

void setup() {
  matrix.setIntensity(4); // Set brightness between 0 and 15
  // Adjust to your own needs
  matrix.setPosition(0, 0, 0); // The first display is at <0, 0>
  matrix.setPosition(1, 1, 0); // The second display is at <1, 0>
  matrix.setPosition(2, 2, 0); // The third display is at <2, 0>
  matrix.setPosition(3, 3, 0); // And the last display is at <3, 0>
  //  ...
  matrix.setRotation(0, 2);    // The first display is position upside down
  matrix.setRotation(3, 2);    // The same hold for the last display
  randomSeed(analogRead(pinRandom)); // Initialize random generator
}
int x = numberOfHorizontalDisplays * 8 / 2;
int y = numberOfVerticalDisplays * 8 / 2;
int xNext, yNext;

void loop() {
  matrix.drawPixel(x, y, HIGH);
  matrix.write(); // Send bitmap to display
  delay(wait);
  matrix.drawPixel(x, y, LOW); // Erase the old position of our dot
  do {
    switch ( random(4) ) {
      case 0: xNext = constrain(x + 1, 0, matrix.width() - 1); yNext = y; break;
      case 1: xNext = constrain(x - 1, 0, matrix.width() - 1); yNext = y; break;
      case 2: yNext = constrain(y + 1, 0, matrix.height() - 1); xNext = x; break;
      case 3: yNext = constrain(y - 1, 0, matrix.height() - 1); xNext = x; break;
    }
  }
  while ( x == xNext && y == yNext ); // Repeat until we find a new coordinate
  x = xNext;
  y = yNext;
}

Dazu muss ich sagen, dass ich einige Beispiele zum Laufen bekommen habe, also die Hardware funktioniert.
Leider hatte ich vorher aber noch keine Library gefunden bei der man die Pixel einzeln ansteuern kann.
Da kommt mir die <Max72xxPanel.h> also genau recht :slight_smile:

Aber bisher läufts nicht.
Ich habe vorsichtshalber erstmal nur 4 Module angeschlossen.
Bisher kommt aber nur unregelmäßiges zappeln.

Irgendeine Idee was da noch falsch sein kann?

Lieben Gruß,
Chris

.....wer suchet, der findet :slight_smile:

anders verdrahten!

CLK - D5 14
DIN - D7 13
CS - D6 12

...und im Sketch den CS Pin auf 12 setzen, natürlich

schon läufts :slight_smile:

Gesunde. Ich kenne diese Art. Hier müssen Sie das PAROLA überschreiben. Geben Sie dort das Wort ICSTATION ein und es wird funktionieren. Es wird ein Spiegelbild geben.

FC16 ICSTATION

German

was_ich_so_tippte:
Gute :slight_smile:
Es ist wenig hilfreich, wenn Du versuchst, Deine Posts ins Deutsche zu übersetzen.
Da kommt wirklich nur Mist bei heraus.
Ähnlich wird es Dir mit diesem Text hier ergehen, Den ich, via Google, ins polnische übersetzen ließ.

Zumindest gehe ich, aufgrund Deiner Posts, davon aus, daß Du polnisch sprichst.
Bei den englischen Posts benutzt Du "Healthy" als erstes Wort, in den Deutschen "Gesunde".
Beides sieht mir nach einer direkten Übersetzung aus.

MfG

polski

was_google_daraus_machte:
Dobrze :slight_smile:
Nie jest to zbyt pomocne, gdy próbujesz tłumaczyć swoje posty na język niemiecki.
To tylko bzdura.
To samo stanie się tutaj z tym tekstem, który przetłumaczyłem na polski przez Google.

Przynajmniej zakładam, że ze względu na twoje posty mówisz po polsku.
W przypadku angielskich postów jako pierwszego słowa używaj słowa "Healthy", w języku niemieckim "Gesunde".
Oba wyglądają jak bezpośrednie tłumaczenie.

pozdrowienia

Blos ist atilka25 kein Pole sondern Slowake.

Grüße Uwe

uwefed:
Blos ist atilka25 kein Pole sondern Slowake.

kannst du ihn fürs deutsche Forum sperren? seine englischen Posts sind auch kaum lesbar.

slovenský

shitty_translation_from_internet:
Good :slight_smile:
Nie je veľmi užitočné, ak sa pokúsite preložiť svoje príspevky do nemčiny.
To je len blbosť tam.
To isté sa stane s vami tu s týmto textom, ktorý som preložil do poľštiny prostredníctvom spoločnosti Google.

Aspoň predpokladám, že kvôli vašim príspevkom hovoríte po poľsky.
V anglických príspevkoch používate ako prvé slovo "Healthy", v nemčine "Gesunde".
Obaja vyzerajú ako priamy preklad.

pozdravy