Mit einem LED Matrix Display, beispielsweise 8×8 LEDs mit MAX7219 Treiber, kann man nicht nur Laufschriften anzeigen und kleine Animationen darstellen. Man kann die 64 Pixel auch als Zeichenfläche benutzen.
Ich habe dazu 2 Potentiometer zur Ansteuerung der X- und Y-Achsen und einen Pushbutton (als Radiergummi) an den Arduino angeschlossen und mit Hilfe der MaxMatrix Library mit wenigen Zeilen Code zum Leben erweckt.
Hier das Video:
Die im Video angesprochenen Links:
- Die MaxMatrix Library gibts beim Entwickler Marcelo Moraes, beispielsweise über seinen Artikel auf instructables.com (aber etwas umständlich als einzelne Files zum Download), oder besser und einfacher über einen Blogeintrag des Arduino Stammtisch Hannover hier: http://arduino-hannover.de/2013/10/03/mein-paket-ein-max7219-dot-matrix-led-bausatz/ – einfach runterscrollen bis „Beispielcode für den Arduino“ und auf das Arduino-Icon klicken. Im Text gibts auch eine kleine Installationsanleitung.
- Ein 8×8 LED Display gibts günstig bei Ebay oder Amazon. Dort einfach nach „MAX7219“ suchen. Soweit ich das beurteilen kann scheinen sich die einzelnen Angebote (außer im Preis) nicht groß zu unterscheiden.
- Wenn meine Erklärung des Pulldown-Widerstandes mehr Fragen als Antworten hinterlässt, bitte hier schauen: http://www.rn-wissen.de/index.php/Pullup_Pulldown_Widerstand
Und noch der Programmcode:
// MaxMatrix-Library einbinden. Infos siehe http://www.makerblog.at/?p=237
#include <MaxMatrix.h>
// Pushbutton an Digitalpin 2
const int buttonPin = 2;
const int aXPin = 5;
const int aYPin = 4;
// Zustand des Buttons (1=gedrückt, 0=offen)
int buttonState = 0;
// Anbindung des LED Displays
int data = 8;
int load = 9;
int clock = 10;
int maxInUse = 1;
// Ein Objekt vom Typ MaxMatrix wird erzeugt
MaxMatrix m(data, load, clock, maxInUse);
// Setup-Funktion, wird nur einmal beim Programmstart aufgerufen
void setup() {
m.init(); // Display-Objekt initialisieren
m.setIntensity(15); // Helligkeit auf Maximalwert setzen
pinMode(buttonPin, INPUT); // Pin für den Pushbutton auf Input setzen
Serial.begin(9600); // Serielle Kommunikation mit dem PC starten
}
// Loop Funktion wird während der Laufzeit endlos wiederholt
void loop() {
// Zustand des Pushbuttons abfragen und merken
buttonState = digitalRead(buttonPin);
// Analogwerte der beiden Potentiometer einlesen (10bit, 0-1023)
int ax = analogRead(aXPin);
int ay = analogRead(aYPin);
// Den Zahlenbereich 0-1023 auf die 8 Spalten des Displays mappen (0-7).#
// Man würde hier
// int x = map(ax,0,1023,0,7);
// erwarten, aber die Variante mit 1024 und 8 funktioniert besser
int x = map(ax,0,1024,0,8);
int y = map(ay,0,1024,0,8);
// Zu Testzwecken die gemessenen und gemappten Werte seriell ausgeben
Serial.print(ax);
Serial.print("-");
Serial.print(ay);
Serial.print(" = ");
Serial.print(x);
Serial.print("-");
Serial.println(y);
// setDot(x,y,state) des MaxMatrix-Objekts schaltet die LED an der Position
// ein oder aus.
// Zuerst LED auf buttonState setzen, d.h. wenn der Radiergummi-Button
// nicht gedrückt ist, wird die LED zuerst ausgeschaltet. Ist der Radiergummi
// gedrückt, wird die LED zuerst eingeschaltet (da buttonState = 1)
m.setDot(y,x,buttonState);
// Etwas warten
delay(15);
// Und die LED auf NICHT buttonState setzen. Bei gedrücktem Radiergummi also
// auf NICHT 1, also 0 setzen und damit auschalten, bei nicht aktivem
// Radiergummi auf NICHT 0, also 1.
// Nach dieser Zeile ist die LED also im gewünschten Zustand.
m.setDot(y,x,!buttonState);
// Wieder etwas warten und alles wieder von vorne.
delay(15);
}
Code-Sprache: Arduino (arduino)
Pingback: 2D Arm mit 2 Servos | Makerblog.at
Es geht nich auf den Arduino.
Danke für den Kommentar, ich sehe dass der Sourcecode im Blog-Eintrag nicht vollständig ist und der -Teil beim Speichern von WordPress verschluckt wird. Vielen Dank für den Hinweis, ich werde das asap anpassen.
Zu deinem Problem:
Am einfachsten ist der Fehler zu finden, wenn du die einzelnen Parameter über die Serial.print-Ausgabe im Terminal der Arduino-IDE kontrollierst, z.B.
// Analogwerte der beiden Potentiometer einlesen (10bit, 0-1023)
int ax = analogRead(aXPin);
int ay = analogRead(aYPin);
Serial.println(ax);
Serial.println(ay)
Interessant sind vor allem die von den Potis eingelesenen Werte ax und ay. Bewegen sich diese wirklich zwischen 0 und 1023 oder eventuell in einem kleineren Bereich (wegen des kleineren Potis), dann müsstest du die min/max-Werte in der Map-Funktion anpassen. Andere Fehlerquellen gibt es direkt nicht, sofern die Schaltung selbst funktioniert.
wo kann man die maxmatrix library runterladen, weil alle links die ich ausprobiere funktionieren nicht
könnte das jemand erklären
thx lg
Colin
Hier findest du die Library als ZIP von github: https://github.com/Arduinobymyself/Matrix16x8/archive/master.zip
Die Idee ist gut – schade ist nur, dass der Link vom 24.1.17
https://github.com/Arduinobymyself/Matrix16x8/archive/master.zip
nur folgende Dateien liefert:
8×8 Code Maker….xls
MAX7219_8.ino
MAX7219_9.ino und MaxMatrix.rar
Es fehlt (auch bei den anderen Links) die include-Datei MaxMatrix.h
Wie kommt man daran?
Hi,
beim Instructables-Artikel des MaxMatrix-Autors sind die 3 benötigten Files der Library über Google Docs nach wie vor verlinkt:
http://www.instructables.com/id/16×8-LED-dot-matrix-with-MAX7219-module/
Von da hab ich sie damals genommen, die Links funktionieren mW noch.
lg, Adi
Hi,
Ich beginne gerade erst damit ein Arduino zu verwenden und kennen mich deshalb noch nicht so mit der nötigen Materie aus.
Deshalb frage ich wie ich diese 3 files in die library einfügen kann?
Hallo Mike, im Verzeichnis /libraries in deinem /Arduino-Ordner (unter /Dokumente oder wo auch immer, abhängig von deinem Betriebssystem) ein Unterverzeichnis /MaxMatrix anlegen und in dieses alle 3 Files von den Google Docs abspeichern. Dann kann die Library im Beispielsketch eingebunden werden.
bei mir funktionirt es nicht auf meinem arduino uno und mega 2560 es könnte an der Library ligen weil ich sie nicgt habe und bei allen links wo man diese sich holen kann funktionirt es auch nicht entweder ungültige Library oder es sind .rar dateien drinnen kann mir jeman helfen
Welche Typen Potenziometer wurden denn hier verwendet? Also welche Leistung müssen die abkönnen und in welchem Widerstandsbereich arbeiten die? :)
Bin noch ein Neuling. Wenn du mir Produktnummern nennen könntest, das wäre super!
funktioniert auch 2021 noch tadellos, dankeschön.
Hoffentlich gibt es bald wieder neue videos.
schöne Grüße