Im zweiten Teil des Weihnachtsprojekts statten wir das Gerät mit einem MP3-Player-Modul, einem Verstärker und zwei Mini-Lautsprechern aus. Außerdem wird eine WS2812B-LED-Anzeige hinzugefügt, um Glückwunschbotschaften anzuzeigen. Auf Wunsch können auch Bilder hinzugefügt werden. Dazu muss der Sketch geändert werden. Zuletzt fügen wir vier Ventilatoren hinzu, um den Effekt eines Schneesturms zu erzielen. Dazu müssen kleine Federstückchen aus einem Staubwedel hinzugefügt werden, da diese wenig wiegen und sich mit einem leichten Luftstrom im Inneren der Urne bewegen.
Wenn gewünscht, kann die transparente Urne weggelassen werden, wodurch das gesamte Projekt anders aussieht, auch wenn die Ventilatoren nicht verwendet werden. Beginnen wir mit der Entwicklung dieses zweiten Teils des Projekts.
Die für das gesamte Projekt erforderlichen Materialien sind:
-
1x Doppel-H-Brücken-Gleichstrommotor-Steuerungsmodul AZ-L298N
-
1x PAM8403 Digitaler Mini-Audioverstärker 2x 3 Watt DC 5V-Platine mit Potentiometer
-
1x 4-Kanal-Relaismodul 5 V mit Optokoppler-Low-Level-Trigger
-
2x DC-bürstenloser Lüfter-Kühlkörper-Trennschnittstelle 3,3 V 5 V
-
1x 5 Kohm potentiometer
Die erforderliche Software ist:
● Arduino IDE
● Adafruit GFX library (Arduino Adafruit_GFX.h)
● Adafruit NeoPixel library (Arduino Adafruit_NeoPixel.h)
● SoftwareSerial library (SoftwareSerial.h)
● Adafruit_NeoMatrix library (Adrafruit_NeoMatrix.h)
● DFPlayer Mini library from DFRobot (DFRobotDFPlayerMini.h)
● SPI.h library (included in the Arduino IDE)
● 001.mp3
● 002.mp3
● 003.mp3
● snow_cube_animated_part_2.ino
Die Zeichnungen der Figuren sind:
● Zug.jpg
Schaltplan und Beschreibung der im zweiten Teil des Projekts verwendeten Module

Zeichnung 2 – Schneewürfelzeichnung Teil 2
Projektmontage
Um die Projektstruktur zu vervollständigen, wurde eine Rückwand hinzugefügt, um die WS2812B-Matrix mit 256 LEDs und die gesamte Elektronik auf dieser Rückseite der Platte zu installieren. Für die Installation der LED-Platte und einer durchscheinenden Platte (in diesem Fall ein weißes Blatt Papier) wurden Schienen angebracht, in die die Ränder der LED-Platte und der durchscheinenden Platte eingeführt werden. Die Abmessungen der neu hinzugefügten Platte sind in der folgenden Abbildung dargestellt. Außerdem wurde die Zeichnung des unteren Teils der Plattform der Ventilatoren und der Wellen hinzugefügt.

Abbildung 1 – Abmessungen des WS2812B-Panels

Bild 2 - WS2812B Panel
Beschreibung des Sketches
Nachdem die Halterung für die Installation der WS2812B-LED-Matrix und der elektronischen Komponenten angebracht wurde, beginnen wir mit der Analyse des Sketches. Zu Beginn eines jeden Sketches müssen zunächst die für die Verwendung der Module erforderlichen Bibliotheken eingefügt werden. In diesem Fall sind drei Bibliotheken erforderlich, um das LED-Panel in diesem Projekt zu verwenden. Die folgenden drei Bibliotheken sind erforderlich, um Text anzuzeigen. Die Bibliothek Adafruit_GFX.h wird benötigt, um primitive Grafiken wie Linien, Kreise usw. anzuzeigen. Da unser LED-Panel ein LED-Raster ist, müssen wir auch die Bibliothek Adafruit_NeoMatrix.h einbinden, um eine Gruppe von LEDs auf dem Panel steuern zu können. Die letzte Bibliothek, die wir einbinden, ist Adafruit_NeoPixel.h, die erforderlich ist, um die drei internen LEDs jeder LED zu steuern.
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
Die folgenden Bibliotheken müssen hinzugefügt werden: <SoftwareSerial.h>, die es dem Mikrocontroller ermöglicht, jeden digitalen Pin für die serielle Kommunikation zu aktivieren. Dies ist erforderlich, um das MP3-Wiedergabemodul und die serielle Konsole zur Anzeige von Meldungen beim Start verwenden zu können. <DFRobotDFPlayerMini.h> ist die Bibliothek, die die für die Verwendung des MP3-Player-Moduls erforderlichen Funktionen aktiviert.
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
Als nächstes muss ein Objekt implementiert werden, um das MP3-Wiedergabemodul zu verwenden. Dazu wird das Objekt mySoftwareSerial aus der Bibliothek <SoftwareSerial.h> implementiert, um dem Mikrocontroller die digitalen Pins anzugeben, die für die serielle Kommunikation mit dem Modul verwendet werden sollen. In diesem Projekt wird der digitale Pin 15 des Mikrocontrollers zum Empfangen von Daten vom MP3-Modul und der digitale Pin 14 zum Senden von Daten an das MP3-Modul verwendet. Um die Methoden und Steuerbefehle des MP3-Moduls zu verwenden, wie z. B. die Lautstärke einstellen oder die Wiedergabe einer MP3-Datei starten, wird das Objekt myDFPlayer aus der Bibliothek <DFRobotDFPlayerMini.h> erstellt.
SoftwareSerial mySoftwareSerial(15, 14);
DFRobotDFPlayerMini myDFPlayer;
In der nächsten Zeile wird eine erste Konstante mit der Anzahl der LEDs (256) der LED-Matrix WS2812B erstellt und eine zweite, um anzugeben, dass die Datenleitung der Matrix an Port 16 des Mikrocontrollers angeschlossen wird. Diese beiden Konstanten benötigen wir, um mit der LED-Matrix arbeiten zu können.
#define NUM_LEDS 256
#define PIN 16
Um das Modul mit 4 Relais steuern zu können, muss der Mikrocontroller wissen, an welche Ports die einzelnen Steuerleitungen des Relaismoduls angeschlossen sind. Dazu werden 3 Konstanten erstellt, deren Werte den Nummern der Ports entsprechen müssen, an die die Steuerleitungen des Relaismoduls angeschlossen werden.
#define FAN_1 17
#define FAN_2 18
#define FAN_3 19
Anschließend wird ein Objekt mit dem Namen matrix aus der Bibliothek Adafruit_NeoMatrix.h implementiert, um Text auf dem LED-Panel darzustellen. Die anzugebenen Argumente oder Parameter sind:
● Anzahl der LEDs in der Breite und Höhe des Panels (16 LEDs in der Breite und 16 LEDs in der Höhe) und der PIN des Mikrocontrollers, an den die Datenleitung des Panels angeschlossen ist.
● Position der LED Nummer 0 auf dem Bedienfeld (die Anzahl der LEDs beträgt 256, aber die Nummerierung beginnt bei 0 und endet bei 255). Auf dem Bedienfeld befindet sich die LED 0 unten rechts.
● Anordnung der LEDs in der Matrix und Fortlaufende Nummerierung: Die LEDs sind in Spalten angeordnet, sodass, wenn sich die LED Nummer 0 in der unteren rechten Ecke befindet, die LED Nummer 1 die oberste ist. Wenn die LED Nummer 15 (erste Spalte und letzte LED) erreicht ist, befindet sich die nächste LED (Nummer 16) links davon, d. h. die Nummerierung verläuft wie bei einer Schlange im Zickzack.
● Die Anordnung und Verkabelung der drei internen LEDs, die interne Anordnung ist grün, rot und blau (NEO_GRB). Der letzte Parameter ist die Arbeitsfrequenz (800 KHz).
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT +
NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
NEO_GRB + NEO_KHZ800);
Anschließend muss die Variable x erstellt werden, in der zunächst die Anzahl der LEDs gespeichert wird, die das Panel in der Breite hat. Dieser Wert wird mit dem Befehl matrix.width() ermittelt. Diese Daten wurden zuvor bei der Erstellung des Objekts matrix eingegeben. Diese Variable wird in einer Bedingung if verwendet, um die Anzahl der Spalten zu zählen, die nach links verschoben werden müssen, um eine Meldung auf dem Panel darzustellen. Diese Bedingung befindet sich innerhalb einer Schleife do-while. Die Methode zur Darstellung des Textes wird später erläutert.
int x = matrix.width();
Después se implementa el objeto picture de la librería Adafruit_NeoPixel.h con el número de LEDs del panel, pin de conexión al microcontrolador, la disposición y cableado de los tres LEDs internos, esta disposición interna es LED verde, rojo y azul (NEO_GRB). El último valor de los argumentos es la frecuencia de trabajo (800 KHz). Este objeto y definiciones de colores posteriores son necesarios si se quiere representar imágenes en el panel LED, pero no son necesario si solo se representará texto.
Adafruit_NeoPixel picture(NUM_LEDS, PIN, NEO_GRB + NEO_KHZ800);
Es wird eine Reihe von Farben definiert, auch wenn nicht alle verwendet werden.
uint32_t p_red = picture.Color(150,0,0);
uint32_t p_green = picture.Color(0,150,0);
uint32_t p_blue = picture.Color(0,0,150);
uint32_t p_yellow = picture.Color(150,150,0);
uint32_t p_purple = picture.Color(150,0,150);
uint32_t p_light_blue = picture.Color(0,150,150);
uint32_t p_white = picture.Color(150,150,150);
uint32_t p_maroon = picture.Color(150,51,0);
uint32_t p_black = picture.Color(0,0,0);
Die im ersten Teil des Projekts erstellten Zeilen, die die Definition der Mikrocontroller-Pins darstellen, an die die Kontakte des Moduls L298N angeschlossen werden, das jeden Motor steuert, bleiben unverändert.
#define enable_Santa_motor 7
#define connection_1_Santa_motor 5
#define connection_2_Santa_motor 6
#define enable_train_motor 2
#define connection_1_train_motor 3
#define connection_2_train_motor 4
Die Konstanten für die sechs LEDs werden ebenfalls beibehalten, denen die Nummer des Ports des Mikrocontrollers zugewiesen wird, an den sie angeschlossen werden.
#define led_house_1 8
#define led_house_2 9
#define led_house_3 10
#define led_house_4 11
#define led_house_5 12
#define led_house_6 13
Nachdem die Bibliotheken hinzugefügt und die für diesen zweiten Teil des Projekts erforderlichen Variablen definiert wurden, müssen die Anfangsbedingungen der hinzugefügten Module initialisiert und festgelegt werden. Dies erfolgt in der Methode setup(), womit die Beschreibung des darin enthaltenen Codes beginnt.
Zunächst müssen die Parameter des LED-Panels initialisiert und konfiguriert werden, damit es Text anzeigen kann. Das Panel muss durch Initialisierung des Objekts matrix mit matrix initialisiert werden. begin(); Der Text muss seine Anzeige auf der rechten Seite des Panels beginnen und auf der linken Seite enden, indem Sie den Befehl matrix verwenden. setTextWrap(false) verhindert, dass der Text, der auf der linken Seite erscheint, wieder auf der rechten Seite erscheint. Die Helligkeit der LEDs wird mit dem Befehl matrix.setBrightness(7) auf einen Wert von 7 eingestellt, um den Text anzuzeigen. Dies ist eine geringe Helligkeit. Die Anfangsfarbe des Textes wird mit dem Befehl matrix.setTextColor(matrix.Color(Red, Green, Blue)) , da sowohl die rote als auch die grüne LED mit den Werten 0 vollständig ausgeschaltet sind und die blaue LED mit dem Wert 254 eingeschaltet ist.
matrix.begin();
matrix.setTextWrap(false);
matrix.setBrightness(7);
matrix.setTextColor(matrix.Color(0, 0, 254));
Wenn Sie Grafiken auf dem LED-Panel darstellen möchten, initialisieren Sie das Objekt picture mit picture. begin(), um Bilder auf dem LED-Panel anzuzeigen, wenn dies gewünscht wird. In diesem Projekt wurde dies nicht gewählt, aber es wird in dieser Methode initialisiert, und wenn Sie Bilder anzeigen möchten, müssen Sie nur den erforderlichen Code für das anzuzeigende Bild in der Methode loop() hinzufügen. Es endet mit einer Pause von 2 Sekunden.
picture.begin();
delay(2000);
Als nächstes muss das MP3-Wiedergabemodul initialisiert werden und seine Kommunikation mit dem Mikrocontroller über mySoftwareSerial.begin(9600), wobei 9600 die Datenübertragungsgeschwindigkeit in Baud ist. Außerdem wird die Kommunikation mit dem Serial Monitor über Serial.begin (115200) mit einer Geschwindigkeit von 115200 Baud (die Geschwindigkeit muss unten rechts im Serial Monitor ausgewählt werden, wenn die Konsole geöffnet wird), damit die Meldungen zum Initialisierungsstatus oder zu Fehlern des MP3-Moduls angezeigt werden können. Mit der Zeile Serial.println („Christmas 2025: Snow ball”) wird eine Meldung an die serielle Konsole gesendet. Um diese Meldung anzeigen zu können, ist es sehr wichtig, den Wert für die Geschwindigkeit in der seriellen Konsole zu ändern.
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Serial.println ("Christmas 2025: Snow ball");
Als Nächstes muss im Code die Initialisierung des MP3-Moduls überprüft werden. Dazu wird eine bedingte Anweisung if verwendet. In der Anweisung if wird der Code innerhalb der geschweiften Klammern ausgeführt, sofern die Bedingung seines Parameters wahr ist. In diesem Fall wird überprüft, ob das MP3-Modul aus irgendeinem Grund nicht initialisiert wurde. Die negierte Initialisierung wurde mit dem Symbol ! geschrieben. Dieses Symbol wird als Negationsmethode verwendet, sodass, wenn das Modul nicht initialisiert wird, die Bedingung wahr ist und der Code innerhalb der geschweiften Klammern ausgeführt wird und die serielle Konsole meldet, dass die Verbindungen und das Einlegen der microSD-Karte überprüft werden sollen. Wenn das MP3-Wiedergabemodul korrekt initialisiert wird, ist die Bedingung nicht erfüllt und der oben beschriebene Code wird nicht ausgeführt. Die Methode setup () weiter ausgeführt, um über die serielle Konsole mit der Zeile Serial.println(F("Correct DFPlayer initialization.")) zu melden, dass das MP3-Wiedergabemodul korrekt initialisiert wurde.
Serial.begin(115200);
Serial.println ("Christmas 2025: Snow ball");
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println(F("Error initializing mp3 module:"));
Serial.println(F("1. Please check the connections!"));
Serial.println(F("2. Please insert the microSD memory!"));
while(true){
delay(0);
}
}
Serial.println(F("Correct DFPlayer initialization."));
Nach dem Initialisierungscode des MP3-Moduls erfolgt die Konfiguration der Pins des Mikrocontrollers, die zur Steuerung der Motoren verwendet werden. Sie müssen als Ausgangssignal-Pins mit pinMode(pin_number, OUTPUT) konfiguriert werden, da sie Signale an die Pins des Steuermoduls L298N senden müssen.
pinMode(enable_Santa_motor,OUTPUT);
pinMode(connection_1_Santa_motor,OUTPUT);
pinMode(connection_2_Santa_motor,OUTPUT);
pinMode(enable_train_motor,OUTPUT);
pinMode(connection_1_train_motor,OUTPUT);
pinMode(connection_2_train_motor,OUTPUT);
Die Pins des Mikrocontrollers, an die die LEDs für die Innenbeleuchtung der Häuser angeschlossen werden, müssen ebenfalls als Ausgangssignal-Pins konfiguriert werden, da sie Spannung liefern müssen, damit die LEDs leuchten.
pinMode(led_house_1,OUTPUT);
pinMode(led_house_2,OUTPUT);
pinMode(led_house_3,OUTPUT);
pinMode(led_house_4,OUTPUT);
pinMode(led_house_5,OUTPUT);
pinMode(led_house_6,OUTPUT);
Um die Programmierung der Methode setup() abzuschließen, müssen nur noch die Ports des Mikrocontrollers konfiguriert werden, an die das Relaismodul angeschlossen wird, das das Ein- und Ausschalten der Lüfter steuert. Diese müssen Ausgänge sein und der Anfangszustand muss hoch sein, wobei 5 Vdc an das Relaismodul gesendet werden.
pinMode(FAN_1, OUTPUT);
digitalWrite(FAN_1, HIGH);
pinMode(FAN_2, OUTPUT);
digitalWrite(FAN_2, HIGH);
pinMode(FAN_3, OUTPUT);
digitalWrite(FAN_3, HIGH);
Nachdem die Ausgangsbedingungen aller Module und Komponenten des Projekts konfiguriert wurden, muss nun die Methode loop() programmiert werden, damit das gesamte System die gewünschten Bewegungen, Töne und Lichtmeldungen ausführt. In der ersten Zeile wird die Lautstärke der Tonwiedergabe mit myDFPlayer.volume(20) auf einen Wert von 20 von 30 eingestellt, woraufhin die Datei mit dem Namen 001.mp3 mit myDFPlayer.play (001) abgespielt. Diese Datei muss auf der im MP3-Wiedergabemodul eingelegten microSD-Karte gespeichert sein und gibt den Zugpfeifenton genau dann wieder, wenn der Zug losfährt. Mit der Zeile delay(1700) wird die Zeit zwischen der Vorbereitung der Audiodatei und ihrer Wiedergabe eingestellt.
myDFPlayer.volume(20);
myDFPlayer.play(001);
delay(1700);
Als nächstes wird die Bewegung des Zuges programmiert, wobei mit der Zeile analogWrite(pin_number, value) die Geschwindigkeit des Motors mit einem analogen Wert eingestellt wird, dessen Maximalwert 244 beträgt. Für die Drehrichtung des Motors werden die beiden mit digitalWrite(pin_number, state) definierten Zeilen verwendet. Sollte sich der Motor entgegen der gewünschten Drehrichtung drehen, kann dies entweder durch Ändern des Status dieser beiden Zeilen oder durch Vertauschen der Kabel zwischen dem Modul L298N und dem Motor behoben werden.
analogWrite(enable_train_motor,128);
digitalWrite(connection_1_train_motor,HIGH);
digitalWrite(connection_2_train_motor,LOW);
Para encender los LED, hay que cambiar el estado del pin al que están conectados. Normalmente, cuando se aplica voltaje a una placa microcontroladora o se reinicia, el estado inicial de los puertos suele ser bajo (LOW), es decir, no entregan voltaje, por lo que es necesario cambiar el estado a alto (HIGH) para obtener un voltaje de salida de 5 Vcc. Esto se realiza con el comando digitalWrite(pin_number, STATE). Después de encender cada LED, se realiza una pausa de 1 segundo.
digitalWrite(led_house_1, HIGH);
delay(1000);
digitalWrite(led_house_2, HIGH);
delay(1000);
digitalWrite(led_house_3, HIGH);
delay(1000);
digitalWrite(led_house_4, HIGH);
delay(1000);
digitalWrite(led_house_5, HIGH);
delay(1000);
digitalWrite(led_house_6, HIGH);
delay(1000);
Wenn alle Häuser innen beleuchtet sind, soll der Weihnachtsmann beginnen, durch das Dorf zu ziehen, aber zuvor soll das Klingeln der Rentierglöckchen zu hören sein, wofür die Lautstärke der Tonwiedergabe mit myDFPlayer auf einen Wert von 25 von 30 eingestellt wird. volume(25), anschließend wird die Datei mit dem Namen 002.mp3 mit myDFPlayer. play(002). Diese Datei muss auf der im MP3-Wiedergabemodul eingelegten microSD-Karte gespeichert sein und gibt den Klang der Glöckchen wieder. Mit der Zeile delay(800) wird die Zeit zwischen der Vorbereitung der Audiodatei und ihrer Wiedergabe eingestellt.
myDFPlayer.volume(25);
myDFPlayer.play(002);
delay(800);
Dann beginnt Santa, sich um das Dorf zu drehen, wenn die Zeile analogWrite(pin_number, value) ausgeführt wird. Die Geschwindigkeit des Motors wird mit einem analogen Wert eingestellt, dessen Maximalwert 244 beträgt, wie bereits im ersten Teil erwähnt. war die Geschwindigkeit zu hoch, aber wenn der Wert dieser Variablen unter 128 liegt, dreht sich der Motor nicht, weshalb man sich für den Einbau eines 5-Kohm-Potentiometers entschieden hat. In der positiven Polaritätsleitung, die vom Modul L298N zum Motor führt, wird durch Einstellen des Wertes dieses Potentiometers die gewünschte Geschwindigkeit eingestellt. Für die Drehrichtung des Motors werden die beiden mit digitalWrite(pin_number, state) definierten Leitungen verwendet. Falls sich der Motor von Santa entgegen der gewünschten Richtung dreht, kann dies entweder durch Ändern des Status dieser beiden Leitungen oder durch Vertauschen der Kabel vom Modul L298N zum Motor behoben werden. Mit der Zeile delay(2000) wird eine Pause von 2 Sekunden bis zur Ausführung der nächsten Codezeile eingelegt.
analogWrite(enable_Santa_motor,128);
digitalWrite(connection_1_Santa_motor,HIGH);
digitalWrite(connection_2_Santa_motor,LOW);
delay(2000);
Anschließend wird die Lautstärke der Tonwiedergabe mit myDFPlayer.volume(15) auf einen Wert von 15 von 30 eingestellt, um die Audiodatei mit dem Namen 003.mp3 mit myDFPlayer. play(003) eingestellt. Diese Datei muss auf der im MP3-Player-Modul eingelegten microSD-Karte gespeichert sein und spielt eine Weihnachtsmelodie ab.
myDFPlayer.volume(15);
myDFPlayer.play(003);
Die folgenden drei Zeilen ändern den Status der Ports, an die das Relaismodul angeschlossen ist, von „hoch“ auf „niedrig“, wodurch das Relaismodul die drei Relais aktiviert und die Ventilatoren mit Spannung versorgt werden und sich zu drehen beginnen und Luft in die Urne einleiten, wodurch sich die Daunenflocken in alle Richtungen bewegen sollten.
digitalWrite(FAN_1,LOW);
digitalWrite(FAN_2,LOW);
digitalWrite(FAN_3,LOW);
Anschließend wird die nächste Codezeile show_message_az() ausgeführt. Diese Zeile ist ein Aufruf zur Ausführung der Methode mit diesem Namen, wodurch der in dieser Methode enthaltene Code ausgeführt wird. Nach Abschluss der Ausführung kehrt das Programm zurück, um die Zeile delay (3000) ausgeführt, um eine Pause von 3 Sekunden einzulegen, bevor die nächste Codezeile loop() ausgeführt wird.
show_message_az();
Wenn die Methode show_message_az() aufgerufen wird, wird diese ausgeführt, und innerhalb ihrer geschweiften Klammern befindet sich eine Schleife do-while, die ausgeführt wird, solange die Bedingung while wahr ist. Wie wir uns erinnern, wurde die Variable x ursprünglich mit der Anzahl der LEDs initialisiert, die das Panel in der Breite hat, also 16. Diese Schleife wird so lange ausgeführt, bis die Bedingung while den Wert x von -109 erreicht, was die letzte Ausführung ist, da -109 größer als -110 ist (es handelt sich um negative Zahlen), wird der Befehlsblock do ausgeführt.
void show_message_az() {
do {
…
…
…
} while (x > -110);
}
Innerhalb der Schleife do ist die erste auszuführende Anweisung das Ausschalten aller LEDs des Panels mit der Anweisung matrix.fillScreen(0). Mit der zweiten Anweisung wird die Textfarbe mit matrix.setTextColor(matrix.Color(254, 0, 0)) auf Rot eingestellt, mit matrix. setCursor(x, 5) wird der Cursor in Spalte 16 (d. h. die erste Spalte wird um 16 Positionen nach links verschoben) und Zeile 5 gesetzt, anschließend wird der Text, der im Panel angezeigt werden soll, mit matrix. print(F(" From AZ-Delivery ")). Die nachfolgende Bedingung if ist ein Zähler, der bei 16 beginnt und bis zum Wert -110 reicht. Er wird verwendet, um den Wert des Cursors x (die Spalten) zu verringern und so den Text anzuzeigen und den Eindruck einer Bewegung zu vermitteln. Er verringert sich um eine Einheit und führt die nächste Anweisung aus, nämlich matrix.show(), die die entsprechenden LEDs dieser Position zum Leuchten bringt. Mit delay(35) wird eine Pause von 35 Millisekunden eingelegt, da dies das Ende der Schleife ist. Anschließend wird die Überprüfung while ausgeführt, die besagt, dass die Schleife von vorne beginnt, solange der Wert von x größer als -110 ist. Zusammenfassend lässt sich sagen, dass die Farbe des Textes konfiguriert, die Spalten verschoben und die entsprechenden LEDs für die Anzeige jedes Teils der Buchstaben des Textes eingeschaltet werden und mit dem delay von 35 Millisekunden der Eindruck einer Bewegung des Textes vermittelt wird.
matrix.setTextColor(matrix.Color(254, 0, 0));
matrix.setCursor(x, 5);
matrix.print(F(" From AZ-Delivery "));
if(--x < -110) {
x = matrix.width();
}
matrix.show();
delay(35);
Nach Abschluss dieser Methode wird zur nächsten Anweisung zurückgekehrt, von der aus der Aufruf erfolgte, wodurch eine Wartezeit von 3 Sekunden ausgeführt wird.
delay(3000);
Mit den Aufrufen der Methoden show_message_germany() und show_message_spanish() werden diese Methoden ausgeführt, die der zuvor erläuterten Methode show_message_az() ähneln.
Wenn Sie neben Text auch Bilder in Ihrem Weihnachtsblogbeitrag 2022 „3. Advent: Animierte LED-Weihnachtsdeko – UPDATE” anzeigen möchten, finden Sie hier eine Anleitung, wie Sie Bilder sowohl auf dem AZ-MEGA2560-Board als auch auf dem AZ-ATmega328-Board anzeigen können.
Dieses Projekt kann auch ohne Ventilatoren und ohne die transparente Urne durchgeführt werden. Die Optik ist dann zwar anders, aber es entsteht dennoch ein einzigartiges Gefühl.
Wir von AZ-Delivery Vertriebs GmbH wünschen Ihnen frohe Weihnachten, ein erfolgreiches neues Jahr und viel Spaß mit Ihrer Familie.






