Mach ein Buzz Wire Spiel mit einem Arduino

In diesem lustigen Projekt lernen wir, wie man mit dem Arduino ein Buzz-Wire-Spiel macht. Viele der benötigten Teile können in einem Starter-Kit und rund um das Haus gefunden werden.

In diesem lustigen Projekt lernen wir, wie man mit dem Arduino ein Buzz-Wire-Spiel macht.  Viele der benötigten Teile können in einem Starter-Kit und rund um das Haus gefunden werden.
Werbung

In diesem lustigen Projekt lernen wir, wie man mit dem Arduino ein Buzz-Wire-Spiel macht. Viele der benötigten Teile können in einem Starterkit gefunden werden (Was ist in einem Starterkit enthalten? Was ist in einem Arduino Starterkit enthalten? [MakeUseOf erklärt] Was ist in einem Arduino Starterkit enthalten? [MakeUseOf Explains] Ich habe den Arduino Open- Source-Hardware hier auf MakeUseOf, aber Sie brauchen mehr als nur die tatsächliche Arduino, um etwas daraus zu bauen und tatsächlich zu beginnen. Arduino "Starter-Kits" sind ... Read More?) und um das Haus. Dieses Projekt verwendet einen Arduino, obwohl Sie fast jeden Mikrocontroller verwenden könnten, die Sie haben (sehen Sie sich diesen Vergleich zwischen $ 5 Mikrocontroller $ 5 Mikrocontroller: Arduino, Raspberry Pi Zero, oder NodeMCU? $ 5 Mikrocontroller: Arduino, Raspberry Pi Zero, oder NodeMCU? Früher war es so, dass man, wenn man einen Computer kaufen wollte, sein Haus umbuchen musste, um es zu bezahlen. Jetzt kann man einen für einen Abraham Lincoln besorgen. Lesen Sie mehr für etwas Inspiration).

Schau dir das Endergebnis an - es spielt sogar Musik:

Was du brauchst

Hier sind die wichtigsten Teile, die Sie für dieses Projekt benötigen:

  • 1 x Arduino UNO oder ähnlich.
  • 1 x Kleiderbügel aus Metall.
  • 2 x 220 Ohm Widerstände.
  • 1 x Steckbrett.
  • 1 x Piezo-Summer.
  • 2 x Krokodilklemmen.
  • Sortierter Schrumpfschlauch.
  • Stecker-Stecker-Anschlussdrähte.

Elenco TL-6 Alligator Bleisatz, 10-teilig, 14 Zoll Elenco TL-6 Alligator Bleisatz, 10-teilig, 14 Zoll Jetzt Kaufen bei Amazon $ 5, 59

Hier sind einige optionale Teile, um den Build zu verbessern:

  • 1 x zusätzlicher Piezo-Summer.
  • 1 x Dübelstange.
  • 1 x Quad Sieben-Segment-Anzeige.
  • 1 x 220 Ohm Widerstand.
  • 1 x Momentary-Taste.
  • Male-zu-Frau-Anschlussdrähte.
  • Holzbrett (für den Fall).
  • Sortierte Holzschrauben.

Fast jeder Arduino funktioniert, vorausgesetzt, es hat genug Pins. Werfen Sie einen Blick auf diese Einkaufsführer Arduino Einkaufsführer: Welcher Ausschuss sollten Sie bekommen? Arduino Einkaufsführer: Welches Board sollten Sie bekommen? Es gibt so viele verschiedene Arten von Arduino Boards da draußen, es wäre dir vergeben, wenn du verwirrt bist. Was sollten Sie für Ihr Projekt kaufen? Lassen Sie uns helfen, mit diesem Arduino Einkaufsführer! Lesen Sie mehr, wenn Sie nicht sicher sind, was Sie brauchen.

Der Bauplan

Arduino Buzzwire abgeschlossen

Obwohl das komplex aussehen mag, ist es ein ziemlich einfaches Projekt. Ich beginne mit dem Basisspiel und füge dann zusätzliche Komponenten hinzu, um die Komplexität zu erhöhen. Sie können nach Belieben auswählen, abhängig von den verfügbaren Komponenten.

Die Kernmechanik besteht aus einer Drahtform und einer Schlaufe an einem Griff. Der Spieler muss die Schleife um den Kurs führen, ohne dass sich beide berühren. Wenn sich die beiden berühren, ist die Schaltung abgeschlossen und der Summer ertönt. Es ist natürlich möglich, diese Schaltung ohne Mikrocontroller zu bauen, aber wo ist der Spaß daran (und wie sonst würdest du Monty Pythons "Flying Circus" Titellied hören)?

Der Kurs

Arduino Buzzwire-Kurs

Dies ist die Form, in der der Spieler seine Runde führen muss. Es ist die Grundlage des ganzen Spiels, also mach es gut! Ich entschied mich für einen kleinen Tropfen, gefolgt von einem großen Aufstieg. Biegen Sie einen Metallkleiderbügel in die gewünschte Form. Messingdraht oder Kupferrohr funktioniert genauso gut, obwohl ein Kleiderbügel am billigsten sein kann.

Sie müssen möglicherweise Handschuhe tragen und verwenden Sie eine Zange oder einen Hammer, um Dinge perfekt zu machen. Überschüsse mit Bolzenschneider abschneiden. Lassen Sie zwei vertikale Pfosten, um durch die Basis zu drücken. Sie möchten die abgeschnittenen Enden für die Sicherheit ablegen. Zum Schluss zwei Stücke Schrumpfschlauch abschneiden und wie folgt über die Enden legen:

Arduino Buzzwire Isolierung

Dies isoliert die Schleife vom Kurs und stellt einen Start / Ende oder eine Sicherheitszone bereit. Alternativ können Sie auch ein Band oder sogar einen Strohhalm verwenden, wenn Sie keinen Schrumpfschlauch haben.

Befestigen Sie nun ein Kabel an einem Ende des Kurses. Sie haben hier zwei Möglichkeiten: Sie können entweder löten oder eine Krokodilklemme verwenden. Eine Krokodilklemme ist die leichtere Option, aber das Löten ist eine zuverlässigere und langfristige Option. Stellen Sie sicher, dass Sie die Oberfläche des Kleiderbügels zuerst mit Schleifpapier aufrauhen und reichlich Flussmittel verwenden. (Nie zuvor gelötet? Lernen Sie hier, wie man lötet, mit diesen einfachen Tipps und Projekten Lernen Sie, wie man mit diesen einfachen Tipps und Projekten lötet Sind Sie ein bisschen eingeschüchtert durch den Gedanken an ein heißes Eisen und geschmolzenes Metall? Wenn Sie wollen Um mit der Elektronik zu arbeiten, müssen Sie lernen, zu löten. Lassen Sie uns helfen. Lesen Sie mehr.

Abhängig von der Größe des Lochs, das Sie im nächsten Schritt in die Basis bohren, müssen Sie das Kabel möglicherweise zuerst durch das Montageloch führen. Die Verwendung von zwei miteinander verdrillten Drähten erhöht die Haltbarkeit:

Arduino verdrillter Draht
Die Verwendung eines Bohrers hilft dabei sehr:

Drill Chuck Wire Twisting

Die Basis

Arduino Buzzwire Gehäuse

Es ist Zeit, die Basis zu erstellen. Dies dient dazu, den Kurs in einer aufrechten Position zu halten, sowie einen Platz zum Verankern der Elektronik bereitzustellen. Ich habe ein paar Kiefernholzabfälle benutzt, obwohl du alles benutzen kannst, was du im Haus hast - sogar eine Pappschachtel.

Schneiden Sie drei Stücke, um eine "n" -Form zu bilden. Einfach diese drei Teile zusammenschrauben (oder kleben). Denken Sie daran, zuerst ein Pilotloch in die Seitenteile zu bohren, um zu verhindern, dass sie sich aufspalten. Vielleicht möchten Sie die Schrauben versenken (vor allem, wenn Sie füllen und dann malen), und ich empfehle einen Senker-Bohrer. Wenn Sie kein Senkwerkzeug oder Bohrloch haben, ist ein Bohrer mit größerem Durchmesser geeignet.

Bohren Sie zwei Löcher weit genug auseinander, damit die Enden des Platzes hineinpassen. Senken Sie die Unterseite zum Verkleben ab.

Der Griff

Arduino Buzzwire Griff
Jetzt ist es Zeit, den Loop / Controller zu machen. Drehen Sie ein kleines Stück des Kleiderbügels an einem Ende, um eine Schleife mit einem kleinen Metallgriff zu bilden. Stellen Sie sicher, dass Sie die Schnittkante ablegen, und bedecken Sie sie gegebenenfalls mit Klebeband / Schaumstoff.

Arduino Buzzwire Schleife
Dies wird die andere Hälfte der Schaltung bilden - wenn diese Schleife den Kurs berührt, wird sie die Schaltung vervollständigen (genau wie ein Schalter). Löten Sie (oder verwenden Sie eine Krokodilklemme) ein anderes Kabel an die Unterseite, genau das gleiche wie zuvor für den Kurs.

Schneiden Sie einen kleinen Dübel für den eigentlichen Griff. Diese Metallschlaufe wird in diesen Griff eingesteckt. Wenn Sie keinen Dübel haben, können Sie mit einem Band- oder Scheibenschleifer ein Stück Vierkant-Weichholz abrunden (Sie könnten auch Sandpapier verwenden, aber das würde lange dauern).

Bohren Sie ein Loch durch diesen Griff. Dies muss groß genug sein, um die Metallschleife und den Draht durchzupassen:

Arduino Buzzwire Griffloch
Dies ist möglich, auf einer Säulenbohrmaschine zu tun, obwohl es schwierig ist. Eine Drehmaschine wird den Job perfekt machen:

Dowel Lathe Buzzwire Griff

Ja, mir ist klar, dass dies eine Metalldrehbank ist (für jeden Interessierten ist es eine Boley-Uhrmacherdrehbank aus den 1930er Jahren. Ich denke, es ist ein 3C, aber ich würde gerne von Ihnen hören, wenn Sie mehr darüber wissen).

Sie können auch einen Kugelschreiber mit entferntem Zentrum verwenden.

Verwenden Sie schließlich Heißkleber, um das Kabel und die Schlaufe im Griff zu befestigen. Heißkleber sorgt für eine starke (aber nicht dauerhafte) Halterung, daher ist es perfekt dafür geeignet.

Beenden

Führen Sie den Drahtverlauf in die Löcher in der Basis ein. Vergessen Sie nicht, zuerst den Loop / Controller hinzuzufügen. Verwenden Sie erneut Heißkleber, um den Verlauf an der Basis zu sichern, indem Sie die Senklöcher auf der Unterseite der Basis wie folgt füllen:

Arduino Buzzwire Löten

Die Rennbahn

Hier ist die vollständige Schaltung. Du musst deine nicht so komplex machen - lies weiter, wenn wir jeden Teil aufschlüsseln.

Arduino Buzzwire Voller Schaltkreis
Verbinden Sie zuerst die beiden Piezoelemente mit den digitalen Pins 10 und 11. Die Polarität spielt keine Rolle:

Arduino Piezoschaltung
Sie müssen nicht zwei Piezos verwenden - der einzige Grund, warum ich das getan habe, ist ein viel lauteres Summen, wenn die Drähte sich berühren. Verbinden Sie eine Seite mit dem digitalen Pin und die andere mit Masse.

Jetzt den Metallkurs einstecken und handhaben:

Arduino Buzzwire-Schaltung
Auch hier spielt es keine Rolle, in welcher Richtung diese beiden verdrahtet sind. Dieser Teil der Schaltung ist genau wie eine Taste oder ein Schalter - der Spieler vervollständigt die Schaltung, wenn die Schleife den Kurs berührt. Stellen Sie sicher, dass Sie beide Widerstände enthalten.

Ein Widerstand verbindet den Schaltkreis mit Masse (Pull-Down-Widerstand genannt), um sicherzustellen, dass er nicht "potentialfrei" ist (dies ermöglicht dem Arduino, den Schaltungswechsel zu erkennen). Der andere Widerstand schützt den Arduino. Wenn sich die beiden Teile berühren, geht + 5V in den digitalen Pin. Wenn dieser Widerstand nicht vorhanden wäre, würde es einen totalen Kurzschluss geben - Ihr Computer würde die USB-Buchse trennen, um zu viel Strom zu ziehen, wenn Sie Glück haben .

Verbinden Sie das Signalkabel (lila, im Diagramm) mit dem digitalen Pin 9.

Als nächstes verbinden Sie einen Druckknopf mit dem digitalen Pin 2:

Arduino Piezo Tastenschaltung

Schließen Sie schließlich das Sieben-Segment-LED-Display an:

Arduino Sieben-Segment-Schaltung
Dieses spezielle Modell stammt von Seeed. Dies verwendet einen TM1637, um vier Displays zu betreiben - das bedeutet, dass nur zwei digitale Pins benötigt werden. Verbinden Sie GND mit Arduino Masse und VCC mit Arduino + 5V. Verbinden Sie D10 mit Arduino Digital Pin 13 und CLK mit Digital Pin 12.

Der Code

Damit dieses Projekt funktioniert, benötigen Sie zwei zusätzliche Dateien. Die erste heißt pitches.h . Diese Datei bildet einfach Notennamen auf ihren Piezo-Wert ab. Dies macht es viel einfacher, eine Melodie zu schreiben, da Sie zum Beispiel einfach "NOTE_C3" statt "31" sagen können. Dies ist in der Public Domain und ist hier auf der Arduino-Website verfügbar. Befolgen Sie die Anweisungen, um eine neue Datei mit dem Namen pitches.h zu erstellen (alternativ fügen Sie den Code in Ihr vorhandenes Skript ein).

Als nächstes benötigen Sie eine Methode, um Noten / Melodien auf dem Piezo zu spielen. Dieser Text von Anthony DiGirolamo auf Github enthält den Code, den Sie benötigen. Kopiere alles zwischen "void buzz" und "}}" und füge es in deine Hauptdatei ein. Als Referenz hier ist es:

 void buzz(int targetPin, long frequency, long length) { /* Buzzer example function by Rob Faludi http://www.faludi.com https://gist.github.com/AnthonyDiGirolamo/1405180 */ long delayValue = 1000000/frequency/2; // calculate the delay value between transitions //// 1 second's worth of microseconds, divided by the frequency, then split in half since //// there are two phases to each cycle long numCycles = frequency * length/ 1000; // calculate the number of cycles for proper timing //// multiply frequency, which is really cycles per second, by the number of seconds to //// get the total number of cycles to produce for (long i=0; i< numCycles; i++){ // for the calculated length of time... digitalWrite(targetPin, HIGH); // write the buzzer pin high to push out the diaphragm delayMicroseconds(delayValue); // wait for the calculated delay value digitalWrite(targetPin, LOW); // write the buzzer pin low to pull back the diaphragm delayMicroseconds(delayValue); // wait again for the calculated delay value } } 

Die letzte Bibliothek, die Sie benötigen, ist die Sieben-Segment-Anzeige zu steuern - Sie können diesen Schritt überspringen, wenn Sie keinen verwenden. Diese Bibliothek heißt TM1637 und wurde von Seeed, der gleichen Firma, die das Treiberboard erstellt hat, erstellt.

Wechseln Sie in der Arduino-IDE zu "Bibliotheken verwalten" ( Skizze > Bibliothek einbeziehen > Bibliotheken verwalten ). Dadurch wird der Bibliotheksverwalter angezeigt. Warten Sie einige Sekunden, bis Sie das Update durchgeführt haben, und suchen Sie dann im Suchfeld oben rechts "TM1637". Zwei Bibliotheken werden gefunden - Sie wollen "TM1637" und nicht "TM1637Display". Wählen Sie und klicken Sie dann auf "Installieren".

Eine letzte Aufgabe mit dieser Bibliothek - sie ist nicht vollständig! So wie es steht, kann die Bibliothek nur die Zahlen 0-9 und die Buchstaben A-F anzeigen. Wenn dies alles umfasst, was Sie anzeigen möchten, können Sie diesen Schritt überspringen. Wenn nicht, müssen Sie den Code ändern. Entspannen Sie Sich! Dies ist nicht so schwer wie es klingt, und wenn Sie Code mit der Arduino IDE schreiben können, können Sie dies tun.

Öffnen Sie zuerst Ihren Bibliotheksordner. Dies wird in Ihrem Arduino-Ordner sein. Unter Mac OS X befindet sich dies in /Users/Joe/Documents/Arduino/Libraries . Öffnen Sie den Ordner TM1637 . Sie müssen die Datei TM1637.cpp bearbeiten - Sie können die andere Datei mit der Erweiterung .h sicher ignorieren. Öffnen Sie diese Datei in Ihrem bevorzugten Texteditor (für mich ist das Sublime Text 3), im Editor oder in der Arduino IDE.

Ändern Sie die dritte Codezeile davon:

 static int8_t TubeTab[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71};//0~9, A, b, C, d, E, F 

Zu diesem:

 static int8_t TubeTab[] = { /* defaults */ 0x3f, // 0 0x06, // 1 0x5b, // 2 0x4f, // 3 0x66, // 4 0x6d, // 5 0x7d, // 6 0x07, // 7 0x7f, // 8 0x6f, // 9 0x77, // A -- 10 0x7c, // b -- 11 0x39, // C -- 12 0x5e, // d -- 13 0x79, // E -- 14 0x71, // F -- 15 /* additional */ 0x174, // h -- 16 0x176, // H -- 17 0x138, // L -- 18 0x15, // M -- 19 0x137, // n -- 20 0x73, // P -- 21 0x67, // q -- 22 0x131, // r -- 23 0x78, // t -- 24 0x240 // - 25 }; 

Sie können diese Datei jetzt speichern und schließen. Nach jedem Element beschreibt der Kommentar, welches Zeichen das ist. Der nächste Teil des Kommentars ist der Index des Elements.

Es ist Zeit für den eigentlichen Code. Fügen Sie zunächst die beiden zuvor genannten Bibliotheken hinzu:

 #include #include 

Erstellen Sie nun das Anzeigeobjekt:

 TM1637 *_display = new TM1637(12, 13); 

Machen Sie sich keine Sorgen, wenn Sie die Syntax nicht verstehen - diese Zeile sagt dem Arduino, dass die Pins 12 und 13 an eine Sieben-Segment-Anzeige angeschlossen sind, und um sie entsprechend zu konfigurieren.

Das Lied wird in melody und tempo gespeichert. Diese enthalten alle Noten und die Notenlänge für die Musik. Wenn Sie die Musik ändern möchten, ändern Sie diese Arrays (obwohl es nicht so einfach ist, wie in die Notenwerte einzufügen, ist das Timing ein sehr wichtiger Teil der Musik). Die Variable songState speichert einfach die Position der zuletzt gespielten Note. Dies stellt sicher, dass die Melodie von Anfang bis Ende gespielt wird, anstatt inkonsistent herumzuspringen:

 int songState = 0; int melody[] = { NOTE_F4, ...} int tempo[] = { 8, ...} 

Beachten Sie, dass ich den Inhalt der Arrays entfernt habe, siehe unten für den vollständigen Code.

Dieser Code ist nicht blockierend - das bedeutet, dass der Arduino mehrere Aufgaben gleichzeitig ausführen kann. Werfen Sie einen Blick auf diese Erklärung Arduino Delay-Funktion, und warum sollten Sie es nicht verwenden Arduino Delay-Funktion, und warum sollten Sie es nicht verwenden Während delay () ist praktisch für grundlegende Demonstrationen wie Arduino funktioniert, sollten Sie wirklich nicht sein Verwenden Sie es in der realen Welt. Hier ist warum, und was Sie stattdessen verwenden sollten. Lesen Sie mehr für weitere Informationen. So werden die Timer eingerichtet:

 unsigned long previousMillis1 = 0; const long interval1 = 1500; 

Die Variable previousMillis1 wird zu einem späteren Zeitpunkt aktualisiert, um die aktuelle Uhrzeit zu speichern. Die Variable interval1 speichert die Wartezeit zwischen der Codeausführung - in diesem Fall 1, 5 Sekunden. Es ist als const definiert, was bedeutet, dass es konstant ist und sich niemals ändern wird - dies ermöglicht dem Arduino, den Code weiter zu optimieren.

In der setup() Funktion gibt es ein paar Dinge. Zuerst werden die Ein- und Ausgänge eingerichtet. Dies muss getan werden, damit der Arduino weiß, was mit jedem seiner Pins verbunden ist:

 pinMode(9, INPUT); // setup circuit pinMode(10, OUTPUT); // setup buzzer 1 pinMode(11, OUTPUT); // setup buzzer 2 pinMode(2, INPUT); // setup button 

Jetzt muss das Display konfiguriert werden:

 _display->set(5); // set brightness _display->point(false); // remove colon _display->init(); // start display 

Die Methoden set, point und init sind alle im _display Objekt enthalten. Anstelle eines Punktes wird ein Zeiger ("->") verwendet, um auf diese zuzugreifen. Erneut, mach dir keine Sorgen über die Syntax (obwohl, wenn du mehr erfahren möchtest, lies C ++ Pointer).

Die Hauptschleife hat zwei Spielmodi: Herausforderung und freies Spiel. Freispiel erlaubt es dem Spieler unbegrenzt oft zu spielen. Der Challenge-Modus setzt einen Timer für 20 Sekunden mit der showCountdown Methode. Es benutzt den Knopf, um den Timer zu starten und zu stoppen. Derzeit besteht die einzige Möglichkeit, Spielmodi zu ändern, darin, die Variable namens mode manuell zu bearbeiten. Sehen Sie, ob Sie eine weitere Schaltfläche hinzufügen können, um dies zu tun und den Code entsprechend zu ändern.

Die buzz Methode spielt die buzz Noten ab. Dies wird in Verbindung mit sing . Die sing-Methode durchläuft jede Note und spielt sie ab. Diese Methode wird regelmäßig aufgerufen, obwohl sie nur dann die nächste Note spielt, wenn genügend Zeit seit der letzten Wiedergabe verstrichen ist. Sobald das Lied das Ende erreicht hat, setzt es das Lied auf Vers 1 ( songState = 14 ) zurück. Sie können dies auf Null setzen, um den Song am Anfang zu starten. Der Grund dafür ist, die Einleitung zu überspringen. Die Einführung wird einmal nach dem Einschalten des Arduino gespielt und dann nicht mehr abgespielt.

Die Methoden showFree und showPlay schreiben einfach die Wörter "FrEE" und "PLAY" in das Display. Beachten Sie, dass das "r" in free in Kleinbuchstaben steht, wenn alle anderen Zeichen in Großbuchstaben geschrieben sind. Dies ist eine der Einschränkungen von sieben Segmentanzeigen. Sie können nicht jeden Buchstaben des Alphabets anzeigen, und einige der Zeichen, die sie anzeigen können, müssen gemischt sein.

Die toggleFreePlay Methode toggleFreePlay das Display zwischen "FREE" und "PLAY" ein. Auch dies geschieht nicht blockierend.

Eine andere nützliche Methode ist showNumber . Dies schreibt eine Zahl in die mittleren zwei Zeichen des Displays:

Arduino Buzzwire Anzeige

Das Display ist nicht schlau genug, um große Zahlen zu zeigen, es muss explizit gesagt werden, was zu tun ist. Diese Methode verwendet eine einfache Logik, um die entsprechende Zahl für jedes Zeichen anzuzeigen.

Die letzte verwendete Methode heißt showCountdown . Dies startet einen Zähler bei 20 und verringert ihn jede Sekunde um eins. Wenn diese Null erreicht, summt es dreimal, um anzuzeigen, dass die Zeit abgelaufen ist.

Hier ist der ganze Code zusammen:

 #include // include display library #include // include pitches TM1637 *_display = new TM1637(12, 13); // create display object, 12 = CLK (clock), 13 = D10 (data) // music int songState = 0; int melody[] = { NOTE_F4, NOTE_E4, NOTE_D4, NOTE_CS4, NOTE_C4, NOTE_B3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_A3, NOTE_AS3, NOTE_A3, NOTE_G3, NOTE_C4, 0, NOTE_C4, NOTE_A3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_A3, NOTE_F4, NOTE_C4, NOTE_C4, NOTE_A3, NOTE_AS3, NOTE_AS3, NOTE_AS3, NOTE_C4, NOTE_D4, 0, NOTE_AS3, NOTE_G3, NOTE_G3, NOTE_G3, NOTE_FS3, NOTE_G3, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_AS3, NOTE_A3, NOTE_A3, NOTE_A3, NOTE_AS3, NOTE_C4, 0, NOTE_C4, NOTE_A3, NOTE_A3, NOTE_A3, NOTE_GS3, NOTE_A3, NOTE_A4, NOTE_F4, NOTE_F4, NOTE_C4, NOTE_B3, NOTE_G4, NOTE_G4, NOTE_G4, NOTE_G4, 0, NOTE_G4, NOTE_E4, NOTE_G4, NOTE_G4, NOTE_FS4, NOTE_G4, NOTE_D4, NOTE_G4, NOTE_G4, NOTE_FS4, NOTE_G4, NOTE_C4, NOTE_B3, NOTE_C4, NOTE_B3, NOTE_C4, 0 }; int tempo[] = { 8, 16, 8, 16, 8, 16, 8, 16, 16, 16, 16, 8, 16, 8, 3, 12, 16, 16, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 4, 12, 12, 16, 16, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 4, 12, 12, 16, 16, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 4, 16, 12, 17, 17, 17, 8, 12, 17, 17, 17, 8, 16, 8, 16, 8, 16, 8, 1 }; // non blocking setup // free play unsigned long previousMillis1 = 0; // time words last changed const long interval1 = 1500; // interval between changing // music unsigned long previousMillis2 = 0; // time last changed const long interval2 = 100; // interval between notes int displayStatus = 0; // keep track of what's displayed int mode = 0; // keep track of game mode -- change to 0 or 1 for different modes bool countdown = false; unsigned long previousMillis3 = 0; // time last changed const long interval3 = 1000; // interval between countdown int count = 20; // challenge mode timer void setup() { // put your setup code here, to run once: pinMode(9, INPUT); // setup circuit pinMode(10, OUTPUT); // setup buzzer 1 pinMode(11, OUTPUT); // setup buzzer 2 pinMode(2, INPUT); // setup button _display->set(5); // set brightness _display->point(false); // remove colon _display->init(); // start display } void loop() { // put your main code here, to run repeatedly: if(mode == 0) { // challenge mode if(digitalRead(2) == HIGH) { delay(25); if(digitalRead(2) == HIGH) { countdown = true; // stop the countdown } else { countdown = false; // stop the countdown } } if(countdown) { showCountdown(); // advance countdown } } else { // free play toggleFreePlay(); } if(digitalRead(10) == HIGH) { delay(25); if(digitalRead(10) == HIGH) { while(digitalRead(10) == HIGH) { buzz(11, NOTE_B0, 1000/24); } } } else sing(); } void showCountdown() { // countdown the time remaining unsigned long currentMillis = millis(); // current time if (currentMillis - previousMillis3>= interval3) { previousMillis3 = currentMillis; --count; showNumber(count); if(count == 0) { // game over countdown = false; count = 20; // reset countdown // buzz 3 times buzz(11, NOTE_B0, 1000/24); delay(100); buzz(11, NOTE_B0, 1000/24); delay(100); buzz(11, NOTE_B0, 1000/24); } } } void showNumber(int number) { // show numbers (maximum 99) on display _display->display(0, 25); // write - to segment 1 _display->display(3, 25); // write - to segment 4 // write number to middle of display if(number == 10) { _display->display(1, 1); _display->display(2, 0); } else if(number>9) { _display->display(1, 1); int newVal = number - 10; _display->display(2, newVal); } else { _display->display(1, 0); _display->display(2, number); } } void toggleFreePlay() { // scroll between words without blocking unsigned long currentMillis = millis(); // current time if (currentMillis - previousMillis1>= interval1) { previousMillis1 = currentMillis; if(displayStatus == 1) showPlay(); else showFree(); } } void showPlay() { // write "PLAY" to the display _display->display(0, 21); // write P to segment 1 _display->display(1, 18); // write L to segment 2 _display->display(2, 10); // write A to segment 3 _display->display(3, 4); // write Y to segment 4 displayStatus = 2; } void showFree() { // write "Free" to the display _display->display(0, 15); // write F to segment 1 _display->display(1, 23); // write r to segment 2 _display->display(2, 14); // write E to segment 3 _display->display(3, 14); // write E to segment 4 displayStatus = 1; } void buzz(int targetPin, long frequency, long length) { /* Buzzer example function by Rob Faludi http://www.faludi.com https://gist.github.com/AnthonyDiGirolamo/1405180 */ long delayValue = 1000000/frequency/2; // calculate the delay value between transitions //// 1 second's worth of microseconds, divided by the frequency, then split in half since //// there are two phases to each cycle long numCycles = frequency * length/ 1000; // calculate the number of cycles for proper timing //// multiply frequency, which is really cycles per second, by the number of seconds to //// get the total number of cycles to produce for (long i=0; i = interval2) { previousMillis2 = currentMillis; int noteDuration = 1000 / tempo[songState]; buzz(10, melody[songState], noteDuration); int pauseBetweenNotes = noteDuration; delay(pauseBetweenNotes); // stop the tone playing: buzz(10, 0, noteDuration); ++songState; // start song again if finished if(songState>79) { songState = 14; // skip intro } } } 

Speichern Sie diese Datei als "buzzwire" ( Datei> Speichern unter ) und laden Sie sie dann auf Ihr Board hoch ( Datei> Hochladen ). Wenn Sie nicht sicher sind, wie Sie den Arduino hochladen, oder dieser Code ein wenig gruselig aussieht, werfen Sie einen Blick auf unseren Arduino Einsteigerhandbuch Erste Schritte mit Arduino: Ein Anfängerhandbuch Erste Schritte mit Arduino: Ein Anfängerhandbuch Arduino ist eine Open-Source-Anwendung Elektronik-Prototyping-Plattform basierend auf flexibler, einfach zu bedienender Hardware und Software. Es richtet sich an Künstler, Designer, Bastler und alle, die interaktive Objekte oder Umgebungen erstellen möchten. Weiterlesen . Alles gut, du solltest jetzt dein eigenes Buzz-Wire-Spiel haben - cool!

Wenn du nach dem Lesen etwas cooles gemacht hast, würde ich es gerne sehen - lass es mich in den Kommentaren unten wissen!

In this article