Halloween 2024 - Teil 2 - Die gruselige Türklingel - AZ-Delivery

Dies ist ein Projekt, dass Sie leicht an verschiedene Anlässe anpassen können. Es handelt sich um eine Türklingel. Sie kann z.B. verwendet werden, um Weihnachtsbesucher zu begrüßen, indem die Außenseite der Box mit weihnachtlichen Elementen dekoriert wird, die Sounddateien geändert werden und ein Weihnachtsmann erscheint. In diesem Fall wird wir sie für Halloween angepasst.

Mit der gruseligen Türklingel wollen wir ein wenig Spannung erzeugen, wenn der Klingelknopf gedrückt wird. Wir werden Geräusche wiedergeben, ein Auge wird auf einem runden TFT-Bildschirm erscheinen und eine freundliche Fledermaus mit leuchtend roten Augen wird erscheinen, wenn sich die Türen öffnen, während im Hintergrund Musik läuft. Kinder im Haus könnten bei der Konstruktion helfen. Wie bei jedem unserer Projekte ist dies eine allgemeine Idee, die der Inspiration dienen soll. Sie haben alle Freiheiten, es zu ändern und es für Ihren Zweck anzupassen.

Beginnen wir mit unserem neuen Projekt.

Benötigte Hardware und Materialien

Benötigte Software

Schaltung und Beschreibung der verwendeten Module

Download Schaltplan

Um mit der Türklingel zu interagieren, müssen wir das Knopfmodul KY-004 drücken. Zuerst wir die Sounddatei 001.mp3 vom Mini MP3 Player DFPlayer Master Modul abgespielt.

Wir müssen einen 1K Ohm Widerstand am mp3 Player Modul verwenden, um die Spannung in der Kommunikationsleitung anzupassen.

Anschließend wird im runden Bildschirm GC9A01 1.28-Zoll Round LCD TFT ein Auge gezeichnet und die Sounddatei 002.mp3 abgespielt. Danach wird eine dritte Sounddatei 003.mp3 abgespielt und die beiden kleinen Türen werden durch den Antrieb des MG90S-Servomotors geöffnet, wodurch die Stütze der Figur bewegt wird und diese wiederum die Bewegungen der Türen ausführt. Wenn die Figur herauskommt, wird ihr Auge mit Hilfe der beiden roten LEDs (an die wir zwei Widerstände von 330 Ohm angeschlossen haben) rot beleuchtet und die Sounddatei 004.mp3 wird wiedergegeben. Wenn diese letzte mp3-Datei ihre Wiedergabe beendet, wird erneut die Sounddatei 003.mp3 wiedergegeben, der Servomotor wird wieder gestartet, die Figur beegt sich und die Tür schließt sich. Dann schalten wir die roten LEDs aus. Die oben beschriebenen Module und Komponenten werden mit dem AZ-ATmega328-Board Mikrocontroller gesteuert. Das gesamte Set wird mit dem MB102 Breadboard Power Supply versorgt. Es bietet neben dem 5 VDC einen 3,3 VDC Ausgang, der für die Versorgung des TFT-Bildschirms benötigt wird. Alle anderen Komponenten nutzen die 5VDC. Die Türklingel wird so lange abgespielt, bis der Klingelknopf erneut gedrückt wird

Montage

Ich habe für die Bauteile 3 mm dickes Balsaholz verwendet und einen schlichten Kasten gebaut. Die Montage des Mechanismus für das Öffnen der beiden kleinen Türen und das Verlassen der Figur ist etwas schwieriger, da wir nur einen einzigen Servomotor für die Bewegungen verwenden.

An den Servomotor wurde eine Stange angebracht, um ihm einen größeren Bewegungsspielraum zu erhalten. Um die Stange mit dem Träger der Figur zu verbinden, habe ich eine Klammer verwendet, wie man sie zum Verbinden von Papieren verwendet. Ich musste sie nur gerade biegen und durch die Löcher führen. Um das Öffnen und Schließen der Türen zu betätigen, habe ich ebenfalls Klammern auf die gleiche Weise verwendet. Ich habe eine Stange an jeder Tür installiert, die mit dem Mechanismus der Figur verbunden wird. Auf diese Weise ändert der Servomotor seine Position und mit Hilfe der Stange der Vorschub auf den Mechanismus der Figur ausgeübt. Dieser wiederum wird mit Hilfe der beiden Stangen die Bewegung auch auf die Türen übertragen. Diese Türen sind mit Scharnieren befestigt. Der Mechanismus der Figur schiebt bei jeder Vorwärtsbewegung die Türen und bei der Rückwärtsbewegung zieht er sie zu.

Der hintere Teil der Figur ist ein Keil, der in den Schlitz passen muss. Damit führen und verbessern wir die Rückzugsbewegung des Mechanismus. Wahrscheinlich ist dies der Teil, der die meiste Geduld erfordert, da die notwendigen Anpassungen für das richtige Funktionieren vorgenommen werden müssen.

Ich habe die Zeichnungen und Abmessungen der Teile beigefügt. Mit Balsaholz können die Bauteile für einen Prototypen schnell zugeschnitten undangepasst werden. Sie können auch einen 3D-Drucker oder andere Materialien verwenden.


Download Bauteile

Beschreibung des Sketches

Um die Module in einem Arduino-Projekt zu verwenden, müssen die erforderlichen Bibliotheken immer im Abschnitt zur Definition der globalen Variablen (am Anfang des Sketches) implementiert werden. In diesem Projekt müssen wir die Bibliotheken für die serielle Kommunikation mit den Modulen, für die Verwendung des TFT-Bildschirms, für die Verwendung des MP3-Moduls und die Servomotor-Bibliothek installieren. Einige dieser Bibliotheken müssen der Arduino-IDE hinzugefügt werden. Entweder manuell, oder über den Bibliotheksverwalter. Suchen Sie dort nach dem Namen der Bibliothek.

Die erste Bibliothek, die hinzugefügt werden muss, ist "SPI.h", sie ermöglicht die Kommunikation mit Geräten an der SPI-Schnittstelle. Die nächste Bibliothek ist "Adafruit_GFX.h". Sie ist die Haupt-Grafikbibliothek für Displays und wird uns mit den notwendigen Methoden zum Zeichnen von primitiven Grafiken (Punkte, Linien, Kreise, etc.) versorgen. Die dritte Bibliothek ist "Adafruit_GC9A01A.h". Sie bietet die notwendige Konfiguration und Unterstützung für den zu verwendenden GC9A01A Display-Treiber. Mit der Bibliothek <SoftwareSerial.h> aktivieren Sie die Funktionalität für den Mikrocontroller, um jeden digitalen Pin für die serielle Kommunikation zu aktivieren. Dies ist notwendig, um das MP3-Player-Modul verwenden zu können. <DFRobotDFPlayerMini.h> ist die Bibliothek, die für die Verwendung des MP3-Moduls erforderlichen Funktionen ermöglicht. Die letzte Bibliothek ist <Servo.h>. In dieser Bibliothek befinden sich die Konfiguration und die notwendigen Methoden für die Positionsänderung des Servomotors.

#include "SPI.h".
#include "Adafruit_GFX.h".
#include "Adafruit_GC9A01A.h".
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
#include <Servo.h>

Die nächsten beiden Zeilen des Sketches sind die Definitionen von zwei Ganzzahl-Variablen, die später verwendet werden, um ein Objekt des TFT-Bildschirms zu implementieren.

#define tft_screen_DC 7
#define tft_screen_CS 10

Für jedes Modul oder jede Komponente wird anschließend ein Objekt instanziiert. So muss für die Verwendung des MP3-Player-Moduls das Objekt mySoftwareSerial aus der Bibliothek <SoftwareSerial.h> implementiert werden, um dem Mikrocontroller die digitalen Pins anzugeben, die für die serielle Kommunikation des Moduls verwendet werden. In diesem Projekt wird der digitale Pin 5 zum Empfang und der digitale Pin 6 zum Senden von Daten an das MP3-Modul verwendet. Um die Steuermethoden und -befehle des Moduls zu nutzen, wie z. B. das Einstellen der Lautstärke oder das Starten der Wiedergabe einer mp3-Datei, wird das Objekt myDFPlayer aus der Bibliothek <DFRobotDFPlayerMini.h> erstellt.

SoftwareSerial mySoftwareSerial(5, 6);
DFRobotDFPlayerMini myDFPlayer;

Für das GC9A01A-Display wird das tft-Objekt der Bibliothek "Adafruit_GC9A01A.h" implementiert, wobei dem Mikrocontroller mitgeteilt werden muss, an welche Pins die TFT-Display-Leitungen angeschlossen werden. Die Pins DC und CS sind die Pins 7 und 10, die oben als Variablen deklariert wurden.

Adafruit_GC9A01A tft(tft_screen_CS, tft_screen_DC);

Um den Servomotor zu verwenden, wird das Objekt Servo mit dem Namen servo_door der Bibliothek <Servo.h> implementiert.

Servo servo_door;

Für die Klingeltaste wird kein Objekt benötigt, da das Modul einfach ein Schalter ist und nur den Zustand seiner Signalleitung von High-Pegel auf Low-Pegel geändert wird. Daher wird zunächst die Variable ring_button mit dem Wert 4 erstellt. Er ist der digitale Pin, an den die Signalleitung des Schalters angeschlossen wird und die Variable ring_call, um den Zustand des Signals zu speichern, entweder High-Pegel mit 5 VDC oder Low-Pegel mit 0 VDC. Diese beiden Variablen werden später verwendet.

int ring_button = 4;
int ring_call;

Schließlich wird die Variable bat_eyes mit dem Wert 2 erstellt. Dahinter verbirgt sich der Pin 2 des Mikrocontrollers, an den die LEDs der Augen der Figur angeschlossen sind.

int bat_eyes = 2;

Wenn andere Pins verwendet werden sollen, müssen sie nur in diesem ersten Abschnitt geändert werden, da wir später innerhalb des Sketches nur die Variablen verwenden. Auf diese Weise vermeiden wir viele Fehler, da wir nicht den gesamten Code überprüfen müssen.

Nachdem die Bibliotheken implementiert, die Objekte der Module erstellt und die notwendigen Variablen angelegt wurden, muss die Anfangskonfiguration der Module und der Zustand der Komponenten definiert werden, was in der Methode setup() geschieht. Das erste, was in dieser Methode gemacht wird, ist die Initialisierung des MP3-Moduls und seine Kommunikation mit dem Mikrocontroller mit mySoftwareSerial.begin(9600), 9600 ist die Datenübertragungsgeschwindigkeit in Baud, die Kommunikation mit dem seriellen Monitor wird auch mit Serial.begin(115200) mit einer Geschwindigkeit von 115200 Baud initialisiert (wir müssen die Geschwindigkeit im unteren rechten Teil des Bildschirms des seriellen Monitors auswählen, wenn wir ihn öffnen), hier werden die Meldungen des Initialisierungsstatus oder Fehler des MP3-Moduls erscheinen.

mySoftwareSerial.begin(9600);
Serial.begin(115200);

Das nächste, was im Code definiert werden muss, ist die Überprüfung der Initialisierung des mp3-Moduls, wofür eine bedingte if-Anweisung verwendet wird. In der if-Anweisung wird der Code innerhalb der geschweiften Klammern ausgeführt, wenn die Bedingung des Parameters wahr ist. In dieser Bedingung wird geprüft, ob das mp3-Modul aus irgendeinem Grund nicht korrekt initialisiert wurde. Die Initialisierungsbedingung wurde negiert, indem am Anfang das Symbol ! geschrieben wurde. Dieses Symbol wird als Negation verwendet. WENN das Modul also NICHT initialisiert ist, ist die Bedingung wahr und der Code wird ausgeführt, um der seriellen Konsole mitzuteilen, dass die Anschlüsse und das Einlegen der microSD-Karte in das Modul überprüft werden soll. Wenn das MP3-Player-Modul korrekt initialisiert ist, ist die Bedingung nicht erfüllt und der oben erläuterte Code wird nicht ausgeführt. Die setup()-Methode wird weiterhin ausgeführt, um die serielle Konsole mit der Zeile Serial.println(F("Correct DFPlayer initialization.")) zu informieren, dass das MP3-Player-Modul korrekt initialisiert wurde.

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.")); 

Wenn die Initialisierung des MP3-Moduls korrekt ist, wird anschließend der runde TFT-Bildschirm initialisiert. Zuerst wird mit dem Code Serial.println("GC9A01A initialization.") über den seriellen Monitor informiert, dass die Initialisierung des Bildschirms beginnt. Dann wird tft.begin() ausgeführt. Dies ist die Initialisierungsmethode des Bildschirms selbst, ein Timeout von 3 Sekunden wird mit delay(3000) für seine korrekte Initialisierung programmiert und schließlich wird mit der Methode des tft-Objekts fillScreen(GC9A01A_BLACK) der Bildschirm so konfiguriert, dass alle Pixel schwarz sind.

Serial.println("GC9A01A initialization.");
tft.begin();
delay(3000);
tft.fillScreen(GC9A01A_BLACK);

Für die anfängliche Konfiguration des Servomotors muss zunächst mit servo_door.attach(3) der digitale Pin 3 des Mikrocontrollers festgelegt werden, an den die Signalleitung des Servomotors angeschlossen wurde. Mit der Codezeile servo_door.write(1) wird die Anfangsposition des Servomotors in Grad festgelegt, damit die Türen geschlossen bleiben, wenn der Summer initialisiert wird. Dieser Wert ist ein Richtwert und muss bei der Installation des Servomotors, der die Fledermaus bewegt, angepasst werden, damit die Fledermaus richtig funktioniert und die Türen geöffnet und geschlossen werden können.

servo_door.attach(3);
servo_door.write(1);

Für die anfängliche Konfiguration der LEDs, also der Augen der Figur, muss als erstes der digitale Pin als Ausgang konfiguriert werden, dies wird mit pinMode (bat_eyes, OUTPUT) gemacht. Wenn sich die Fledermaus in der Box befindet, sollten ihre Augen nicht leuchten, also sollte dieser Pin keine Spannung liefern. Dies geschieht, indem der Status des Pins mit digitalWrite (bat_eyes, LOW) auf Low-Pegel gesetzt wird, d.h. mit 0 VDC.

pinMode (bat_eyes, OUTPUT);
digitalWrite (bat_eyes, LOW);

Um die Startkonfiguration des Türklingelprojekts abzuschließen, wird mit pinMode (ring_button, INPUT) der digitale Pin 4 des Mikrocontrollers als Eingang konfiguriert. So wird erkannt, dass sich der Zustand des Signals ändert, wenn der Taster gedrückt und die dazugehörige Aktion ausgeführt wird, die später in der Methode loop() folgt.

pinMode (ring_button, INPUT);

Es folgt die Implementierung der loop()-Methode, die kontinuierlich läuft und darauf “wartet”, dass die Klingeltaste gedrückt wird, um dann die passenden Aktionen auszuführen.

Die Methode behinnt mit dem Auslesen des Klingeltastensignals mittels digitalRead(ring_button), wobei zu beachten ist, dass dieser Messwert einen HIGH-Pegel (unbetätigte Taste), oder einen LOW-Pegel (betätigte Taste) haben kann. Er wird in der Variablen ring_call gespeichert, die im Variablendefinitionsblock erstellt wurde.

ring_call = digitalRead(ring_button);

Es folgt eine if-else-Anweisung, um mit if (ring_call == HIGH) zu prüfen, ob die Variable HIGH ist. Das bedeutet, dass der Taster nicht gedrückt wurde. Dieser Teil ist leer, also wird nichts weiter ausgeführt und loop() wird fortgesetzt.

if (ring_call == HIGH) {
  // Action when the pushbutton is not pressed
} else {
  .. .. .. ..
  .. .. .. ..
  .. .. .. ..
}

(Es ist auch möglich, diese If-Anweisung ohne Else-Zweig zu schreiben, indem man nur abfragt, ob ring_call == LOW ist.)

Wurde der Taster betätigt, ist der Wert der Variablen LOW und somit wird die else-Anweisung und damit deren Inhalt ausgeführt. Es wird dann die Lautstärke der Tonwiedergabe mit myDFPlayer.volume(15) auf einen Wert von 15 (max. 30) eingestellt. Dann wird die Datei 001.mp3 mit myDFPlayer.play(001) abgespielt, die auf der im MP3-Player-Modul eingelegten microSD-Karte gespeichert sein muss und den Klang einer Glocke wiedergibt. Dann wird mit delay(11000) eine Pause von 11 Sekunden eingelegt, damit die Datei vollständig abgespielt wird, bevor die nächste Zeile des Sketches ausgeführt wird.

myDFPlayer.volume(15);
myDFPlayer.play(001);
delay(11000);

Es folgt ein Aufruf der Methode show_eye(), um ein Auge auf dem runden TFT-Bildschirm anzuzeigen. Wenn dieser Methodenaufruf erfolgt wird mit tft.fillCircle(120, 120, 120, GC9A01A_WHITE) ein Kreis mit dem Augapfel in weißer Farbe gezeichnet. Um einen Kreis auf den Bildschirm zu zeichnen, müssen die Werte der Parameter mit tft.fillCircle(Wert Mittelpunkt Kreis X-Achse, Wert Mittelpunkt Kreis Y-Achse, Radius des Kreises, Farbe des Kreises) aufgerufen werden. Um den Mittelpunkt des Kreises zu positionieren, muss der Cursor bei Pixel 120 auf der X-Achse und 120 auf der Y-Achse gesetzt werden, der dritte Wert ist der Radius des Kreises in Pixeln (120) und der letzte Wert ist die Farbe der Pixel (GC9A01A_WHITE). Der runde Bildschirm des GC9A01A hat eine Auflösung von 240 x 240 Pixeln, so dass sich der Mittelpunkt des Kreises genau in der Mitte des Bildschirms befinden wird. Die nächste Anweisung, tft.fillCircle(120, 120, 63, GC9A01A_BLACK), zeichnet einen schwarzen Kreis mit demselben Bezugspunkt als Mittelpunkt und einem Radius von 63 Pixeln. Die folgende Anweisung tft.fillCircle(120, 120, 58, GC9A01A_YELLOW), zeichnet die Iris in gelber Farbe, der Wert des Mittelpunkts des Kreises ist derselbe und der Radius etwas kleiner, als der des vorherigen Kreises, so dass beim Zeichnen des gelben Kreises eine schwarze Trennlinie zwischen dem Augapfel und der Iris vorhanden ist. Der nächste Aufruf zeichnet die Pupille in schwarzer Farbe mittels eines Kreises mit demselben Wert des Kreismittelpunkts und einem Radius von 20. Der letzte zu zeichnende Kreis wird ein kleiner weißer Kreis im oberen rechten Bereich der Pupille sein. In diesem Fall ist der Wert des Kreismittelpunkts anders.

Nachdem das Auge gezeichnet wurde, werden noch rote Adern in Form von Linien mit den Anweisungen tft.drawLine(X Achse Start, Y Achse Start, X Achse Ende, Y Achse Ende, Farbe) umgesetzt. Die letzte Zeile der show_eye()-Methode ist yield(). Mit dieser Anweisung werden die zuvor implementierten Grafiken angezeigt, die Methode verlassen und zu der Zeile zurückgekehrt, die unmittelbar auf den Aufruf der show_eye()-Methode folgt, d.h., es folgt eine halbe Sekunde Pause delay(500). Die yield()-Anweisung wird innerhalb von Prozessen verwendet, die "genug" Zeit für die Ausführung benötigen.

Nach dem Timeout von einer halben Sekunde wird die Sounddatei 002.mp3 abgespielt. Dazu wird die Lautstärke der Soundwiedergabe mit myDFPlayer.volume(15) auf einen Wert von 15 eingestellt. Dann wird die Sounddatei mit dem Namen 002.mp3 mit myDFPlayer.play(002), (diese Datei und alle Sounddateien müssen auf der im MP3-Player-Modul eingelegten microSD-Karte gespeichert sein) und der Sound "I see you" abgespielt. Anschließend wird mit delay(6000) eine Pause von 6 Sekunden eingelegt, damit die Sounddatei vollständig abgespielt wird, bevor die nächste Zeile des Sketches ausgeführt wird.

myDFPlayer.volume(15);
myDFPlayer.play(002);
delay(6000);

Nach dem Abspielen der vorherigen Sounddatei sollten die Türen geöffnet, der Klang der Bewegung einer alten Tür mit der Sounddatei 003.mp3 wiedergegeben und die Fledermaus hinausbewegt werden. Dafür wird ebenfalls die Lautstärke der Soundwiedergabe mit myDFPlayer.volume(15) auf 15 eingestellt und die Sounddatei 003.mp3 mit myDFPlayer.play(003) mit dem Geräusch der Bewegung der Tür abgespielt, eine Pause von 1 Sekunde wird mit delay(1000) gemacht. Die Position des Servomotors wird sich ändern, indem der Positionswert in Grad (45) mit servo_door.write(45) geändert wird. Wenn sich die Achse des Servomotors dreht, wird er den Holzstab vorwärts bewegen, der mit der Fledermaushalterung verbunden ist. Da diese Halterung mit den Türen verbunden ist, werden sich diese wiederum öffnen und die Fledermaus wird sich vorwärts bewegen, bis sie den Kasten verlässt.

myDFPlayer.volume(15);
myDFPlayer.play(003);
delay(1000);
servo_door.write(45);

Sobald die Fledermaus aus dem Kasten ist, müssen die roten LEDs leuchten. Dazu muss der Zustand des digitalen Pins, an dem die LEDs angeschlossen sind, auf HIGH geändert werden.

digitalWrite (bat_eyes, HIGH);

Wenn die Fledermaus vollständig ausgefahren ist, wird ein kurzes Lied, das als Sounddatei 004.mp3 gespeichert ist, für ein paar Sekunden abgespielt. Zuerst wird die Lautstärke der Soundwiedergabe mit myDFPlayer.volume(20) auf 20 gestellt, dann wird die Datei 004.mp3 mit myDFPlayer.play(004) abgespielt, danach wird mit delay(6000) eine Pause von 6 Sekunden eingelegt, damit die Sounddatei komplett abgespielt wird, bevor die nächste Zeile des Sketches ausgeführt wird.

myDFPlayer.volume(20);
myDFPlayer.play(004);
delay(6000);

Wenn das Lied zu Ende ist, wird die Fledermaus wieder im Kasten verschwinden und die Türen werden sich schließen. Um diese Aktionen auszuführen, wird die Lautstärke der Wiedergabe wieder auf 15 mit myDFPlayer.volume(15) eingestellt. Dann wird die Datei mit Namen 003.mp3 mit myDFPlayer.play(003) wiedergegeben. Das ist wieder das Geräusch der Bewegung einer alten Tür. Eine Pause von 1 Sekunde wird mit delay(1000) eingelegt und mit der Zeile servo_door.write(1) der Servomotor in seine anfängliche Position gebracht. Damit wandert die Figur in den Kasten und die Türen schließen sich.

myDFPlayer.volume(15);
myDFPlayer.play(003);
delay(1000);
servo_door.write(1);

Danach werden noch die LEDs der Fledermausaugen ausgeschaltet:

digitalWrite (bat_eyes, LOW);

Nun wird das Bild des Auges auf dem runden TFT-Bildschirm entfernt. Dazu werden alle Pixel mit tft.fillScreen(GC9A01A_BLACK) auf schwarz gesetzt. Die letzte Zeile des Codes ist die yield()-Anweisung. Die Ausführung der loop() startet nun von vorn und “wartet” erneut darauf, dass der Klingelknopf betätigt wird.

tft.fillScreen(GC9A01A_BLACK);
yield();

Mit diesem Projekt könnte bereits die Klingel für Grusel sorgen. Sie können es auch für andere Gelegenheiten umbauen und umgestalten.

 

 

(wenn Sie die Videos nicht sehen können, überprüfen Sie bitte die Cookie-Einstellungen Ihres Browsers)

Wir wünschen Frohes Halloween.

hier noch einmal die Links zu den vergangenen Halloween-Beiträgen:

 

Für arduinoProjekte für anfänger

2 comentarios

Andreas Wolter

Andreas Wolter

@Thomas: die Audiodateien werden in der loop() im else-Zweig nacheinander abgespielt:
001
002
003
004
003

testen Sie doch bitte mal auf dem Computer, ob die MP3 auch den korrekten Inhalten haben und eventuell umbenennen.
Ansonsten könnten sie die Nummern im Quellcode so vertauschen, dass die Reihenfolge wieder passt.

Grüße,
Andreas Wolter
AZ-Delivery Blog

thomas

thomas

Ich habe das Projekt wie im Blog beschrieben, aufgebaut und die doorbell_sketch.ino verwendet. Leider werden die Audiodateien in falscher Reihenfolge abgespielt, die Delay-Zeiten scheinen zu stimmen. Wo könnte der Fehler liegen? Ansonsten ein nettes Projekt für mich als Anfänger.

Deja un comentario

Todos los comentarios son moderados antes de ser publicados