Machen Sie ein Buzz Wire-Spiel mit einem Arduino
In diesem unterhaltsamen Projekt lernen wir, wie man mit dem Arduino ein Buzz-Wire-Spiel erstellt. Viele der benötigten Teile sind in einem Starter-Kit enthalten (Was ist in einem Starter-Kit enthalten? Was ist in einem Arduino-Starter-Kit enthalten? [MakeUseOf erklärt] Was ist in einem Arduino-Starter-Kit enthalten? [MakeUseOf erklärt:] Ich habe zuvor das Arduino Open- Quellhardware hier auf MakeUseOf, aber Sie benötigen mehr als nur den eigentlichen Arduino, um etwas daraus zu bauen und tatsächlich loszulegen. Arduino "Starter-Kits" sind rund ums Haus. Dieses Projekt verwendet ein Arduino, obwohl Sie fast jeden Mikrocontroller verwenden können, den Sie haben (Schauen Sie sich den Vergleich zwischen 5-Mikrocontrollern an: 5-Mikrocontroller: Arduino, Raspberry Pi Zero oder NodeMCU? Früher war es so, dass man, wenn man einen Computer haben wollte, sein Haus umschreiben muss, um dafür zu bezahlen. Jetzt kann man einen für Abraham Lincoln bekommen. Weitere Informationen finden Sie hier..
Überprüfen Sie das Endergebnis - es spielt sogar Musik:
Was du brauchst
Hier sind die Kernelemente, die Sie benötigen, um dieses Projekt abzuschließen:
- 1 x Arduino UNO oder ähnlich.
- 1 x Kleiderbügel aus Metall.
- 2 x 220 Ohm Widerstände.
- 1 x Brotschneidebrett.
- 1 x Piezo-Summer.
- 2 x Krokodilklemmen.
- Verschiedene Schrumpfschläuche.
- Verbindungskabel zwischen Stecker und Stecker.
Elenco TL-6 Alligator Blei-Set, 10 Stück, 14 Zoll Elenco TL-6 Alligator Blei-Set, 10 Stück, 14 Zoll Kaufen Sie jetzt 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 Momentknopf.
- Männlich-zu-weibliche Anschlussdrähte.
- Holzbrett (für Fall).
- Verschiedene Holzschrauben.
Fast jeder Arduino funktioniert, sofern er genügend Pins hat. Schauen Sie sich diesen Einkaufsführer an Arduino Buying Guide: Welches Board sollten Sie bekommen? Arduino Buying Guide: Welches Board sollten Sie bekommen? Es gibt so viele verschiedene Arten von Arduino-Boards, dass Sie sich verwechseln könnten. Was solltest du für dein Projekt kaufen? Lassen Sie uns mit diesem Arduino Einkaufsführer helfen! Lesen Sie mehr, wenn Sie sich nicht sicher sind, was Sie brauchen.
Der Bauplan
Dies mag zwar komplex aussehen, ist aber eigentlich ein recht einfaches Projekt. Ich beginne mit dem Basisspiel und füge weitere Komponenten hinzu, um die Komplexität zu erhöhen. Sie können “Wähle und wähle” wie Sie möchten, 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 Platz führen, ohne dass sich die beiden 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 aufzubauen, aber wo ist der Spaß dabei (und wie würden Sie sonst Monty Pythons hören?) “Fliegender Zirkus” Titellied)?
Der Kurs
Dies ist die Form, die der Spieler haben muss, um seine Runde zu leiten. Es ist die Basis des gesamten Spiels, also mach es gut! Ich entschied mich für einen kleinen Tropfen, gefolgt von einem großen Aufstieg. Biegen Sie einen Kleiderbügel aus Metall in die gewünschte Form. Messingdraht oder Kupferrohr funktionieren gleichermaßen, obwohl ein Kleiderbügel der günstigste sein kann.
Möglicherweise müssen Sie Handschuhe tragen und eine Zange oder einen Hammer verwenden, um die Dinge perfekt zu machen. Schneiden Sie überschüssige Teile mit Bolzenschneidern ab. Lassen Sie zwei senkrechte Stützen, um die Basis durchzuschieben. Sie möchten die Schnittenden zur Sicherheit feilen. Schneiden Sie zum Schluss zwei Schrumpfschlauchstücke ab und platzieren Sie sie wie folgt über den Enden:
Dadurch wird die Schleife vom Kurs isoliert und eine Start- / End- oder Sicherheitszone bereitgestellt. Wenn Sie keinen Schrumpfschlauch haben, reicht ein Klebeband oder sogar ein Strohhalm.
Schließen Sie jetzt ein Kabel an ein Ende des Kurses. Hier haben Sie zwei Möglichkeiten: Sie können entweder löten oder einen Krokodilclip verwenden. Eine Krokodilklemme ist die einfachere Option, aber das Löten ist eine zuverlässigere und langfristigere Option. Stellen Sie sicher, dass “aufmischen” die Oberfläche des Kleiderbügels zuerst mit Sandpapier und viel Flussmittel verwenden. (Noch nie gelötet? Hier erfahren Sie, wie Sie mit diesen einfachen Tipps und Projekten lernen können. Mit diesen einfachen Tipps und Projekten lernen Sie, wie Sie löten. Sind Sie ein wenig eingeschüchtert von dem Gedanken an heißes Eisen und geschmolzenes Metall? Wenn Sie möchten Um mit der Elektronik zu arbeiten, müssen Sie das Löten lernen. Lassen Sie uns helfen. Lesen Sie weiter.)
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 Befestigungsloch führen. Die Verwendung von zwei miteinander verdrillten Drähten erhöht die Haltbarkeit:
Die Verwendung eines Bohrers hilft dabei sehr:
Die Basis
Es ist Zeit, die Basis zu schaffen. Dies dient dazu, den Kurs in einer aufrechten Position zu halten und einen Platz zum Verankern der Elektronik bereitzustellen. Ich habe ein paar Kiefernreste verwendet, obwohl Sie alles, was Sie im Haus haben, benutzen könnte - sogar einen Karton.
Schneiden Sie drei Stücke, um eine “n” gestalten. Schrauben Sie diese drei Teile einfach zusammen. Denken Sie daran, zuerst ein Führungsloch in die Seitenteile zu bohren, um ein Splittern zu verhindern. Möglicherweise möchten Sie die Schrauben ansenken (insbesondere, wenn Sie füllen und dann malen), und ich empfehle einen Senkbohrer. Wenn Sie kein Senkwerkzeug oder keine Bohrbohrung haben, wird ein Bohrer mit größerem Durchmesser den Trick ausführen.
Bohren Sie zwei Löcher so weit auseinander, dass die Enden der Bahn Platz finden. Senken Sie die Unterseite zum Verkleben ein.
Der Griff
Jetzt ist es Zeit, die Schleife / den Controller zu erstellen. 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 feilen und sie gegebenenfalls mit Klebeband / Schaumstoff abdecken.
Dadurch wird die andere Hälfte der Schaltung gebildet. Wenn diese Schleife den Kurs berührt, wird die Schaltung abgeschlossen (genau wie bei einem Schalter). Löten Sie (oder verwenden Sie eine Krokodilklemme) einen anderen Draht an der Unterseite des Kabels, genau wie Sie es zuvor für den Kurs gemacht haben.
Schneiden Sie ein Stück Dübel für den eigentlichen Griff. Diese Metallschlaufe passt in diesen Griff. Wenn Sie keinen Dübel haben, können Sie ein Stück eckiges Nadelholz mit einem Band- oder Scheibenschleifer abrunden (Sie können auch Schleifpapier verwenden, dies würde jedoch lange dauern)..
Bohren Sie ein Loch durch diesen Griff. Dies muss groß genug sein, um die Metallschleife und den Draht durchzustehen:
Dies ist bei einer Säulenbohrmaschine möglich, obwohl es schwierig ist. Eine Drehmaschine wird die Arbeit perfekt machen:
Ja, ich bin mir bewusst, dass dies eine Metalldrehbank ist (für jeden Interessenten eine Boley-Uhrendrehmaschine 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 verwenden, wenn die Mitte entfernt ist.
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) Befestigung, daher ist er perfekt dafür geeignet.
Fertigstellung
Führen Sie die Drahtführung in die Löcher in der Basis ein. Vergessen Sie nicht, zuerst den Loop / Controller hinzuzufügen. Verwenden Sie erneut Heißkleber, um die Bahn an der Basis zu befestigen, indem Sie die versenkten Löcher an der Unterseite der Basis wie folgt füllen:
Die Rennbahn
Hier ist die volle Strecke. Sie müssen Ihre so komplex machen - lesen Sie weiter, wenn wir jeden Teil zerlegen.
Verbinden Sie zuerst die beiden Piezoelemente mit den digitalen Pins 10 und 11. Die Polarität spielt keine Rolle:
Sie müssen nicht zwei Piezos verwenden - der einzige Grund, warum ich dies getan habe, ist ein viel lauteres Summen, wenn die Drähte berühren. Verbinden Sie eine Seite mit dem digitalen Pin und die andere mit Masse.
Stecken Sie jetzt den Metallkurs und den Griff ein:
Auch hier spielt es keine Rolle, in welche Richtung diese beiden Kabel verdrahtet sind. Dieser Teil der Schaltung ist genau wie eine Taste oder ein Schalter - der Spieler schließt die Schaltung ab, wenn die Schleife die Strecke berührt. Stellen Sie sicher, dass Sie beide Widerstände enthalten.
Ein Widerstand verbindet die Schaltung mit Masse (als Pull-Down-Widerstand bezeichnet) und stellt sicher, dass dies nicht der Fall ist “schwimmend” (Dies ermöglicht dem Arduino, die Änderung der Schaltung 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 dies zu einem toten Kurzschluss führen - Ihr Computer würde die USB-Buchse trennen, um zu viel Strom zu ziehen wenn du Glück hast.
Verbinden Sie das Signal (violett im Diagramm) mit dem digitalen Pin 9.
Als nächstes verbinden Sie einen Druckknopf mit Digital Pin 2:
Schließen Sie schließlich die Sieben-Segment-LED-Anzeige an:
Dieses Modell ist von Seeed. Hierbei wird ein TM1637 zum Ansteuern von vier Anzeigen verwendet. Dies bedeutet, dass nur zwei digitale Pins erforderlich sind. Verbinden GND zu Arduino Boden und VCC nach Arduino + 5V. Verbinden D10 zu Arduino Digital Pin 13 und CLK zu digitalem Pin 12.
Der Code
Damit dieses Projekt funktioniert, benötigen Sie zwei zusätzliche Dateien. Der erste heißt Stellplätze
. Diese Datei ordnet die Notennamen einfach ihrem Piezo-Wert zu. Dies macht es viel einfacher, eine Melodie zu schreiben, wie Sie einfach sagen können “NOTE_C3” eher, als “31”, zum Beispiel. Dies ist gemeinfrei und ist auf der Arduino-Website hier verfügbar. Folgen Sie den Anweisungen, um eine neue Datei mit dem Namen zu erstellen Stellplätze
(alternativ fügen Sie den Code in Ihr vorhandenes Skript ein).
Als Nächstes benötigen Sie eine Methode, um tatsächlich Noten / Melodien auf dem Piezo abzuspielen. Dieser Kern von Anthony DiGirolamo auf Github enthält den Code, den Sie benötigen. Alles zwischen kopieren “Leeres Buzz” und “” und fügen Sie es in Ihre Hauptdatei ein. Zur Referenz hier ist es:
void buzz (int targetPin, long frequency, long length) / * Summer-Beispielfunktion von Rob Faludi http://www.faludi.com https://gist.github.com/AnthonyDiGirolamo/1405180 * / long delayValue = 1000000 / Frequenz / 2; // Berechne den Verzögerungswert zwischen den Übergängen //// Der Wert von Mikrosekunden im Wert von einer Sekunde, geteilt durch die Frequenz, wird dann in zwei Hälften geteilt, da //// für jeden Zyklus zwei Phasen vorhanden sind. numCycles = frequency * length / 1000; // Berechne die Anzahl der Zyklen für das richtige Timing //// multipliziere die Frequenz, was wirklich Zyklen pro Sekunde ist, mit der Anzahl der Sekunden, um //// die Gesamtzahl der zu erzeugenden Zyklen zu erhalten (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 Steuerung der Anzeige mit sieben Segmenten - Sie können diesen Schritt überspringen, wenn Sie keinen verwenden. Diese Bibliothek wird aufgerufen TM1637 und wurde von Seeed erstellt, der gleichen Firma, die die Treiberplatine erstellt hat.
Gehen Sie in der Arduino IDE zu “Bibliotheken verwalten” (Skizzieren > Bibliothek einschließen > Bibliotheken verwalten). Dadurch wird der Bibliotheksmanager geöffnet. Warten Sie ein paar Sekunden, bis das Suchfeld oben rechts aktualisiert wurde “TM1637”. Es werden zwei Bibliotheken 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 aussieht, kann die Bibliothek nur die Ziffern 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 sich anhört, und wenn Sie Code mit der Arduino IDE schreiben können, können Sie dies tun.
Öffnen Sie zunächst Ihren Bibliotheksordner. Dies wird in Ihrem Arduino-Ordner sein. Unter Mac OS X ist dies in / Benutzer / Joe / Dokumente / Arduino / Bibliotheken
. Öffnen Sie den Ordner mit dem Namen TM1637. Sie müssen die aufgerufene Datei bearbeiten TM1637.cpp
- Sie können die andere Datei mit der Erweiterung problemlos ignorieren .h
. Öffnen Sie diese Datei in Ihrem bevorzugten Texteditor (für mich ist Sublime Text 3), im Editor oder in der Arduino IDE.
Ändern Sie die dritte Codezeile hieraus:
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 [] = / * Standardeinstellungen * / 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 / * zusätzlich * / 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, um welches Zeichen es sich handelt. 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 zwei zuvor erwähnten Bibliotheken hinzu:
#umfassen #umfassen
Erstellen Sie nun das Anzeigeobjekt:
TM1637 * _display = neu TM1637 (12, 13);
Machen Sie sich keine Sorgen, wenn Sie die Syntax nicht verstehen. Diese Zeile teilt dem Arduino mit, dass die Pins 12 und 13 mit einer Anzeige mit sieben Segmenten verbunden sind und entsprechend konfiguriert werden müssen.
Das Lied ist in gespeichert Melodie
und Tempo
. Diese enthalten alle Noten und die Notendauer für die Musik. Wenn Sie die Musik ändern möchten, ändern Sie diese Arrays (obwohl dies nicht so einfach ist wie das Einfügen der Notenwerte, ist das Timing ein sehr wichtiger Teil der Musik). Das songState
Variable speichert einfach die Position der zuletzt gespielten Note. Dadurch wird sichergestellt, dass die Melodie von Anfang bis Ende abgespielt wird und nicht uneinheitlich herumspringt:
int songState = 0; int melody [] = NOTE_F4,… int. Tempo [] = 8,…
Beachten Sie, dass ich den Inhalt der Arrays entfernt habe. Den vollständigen Code finden Sie unten.
Dieser Code ist nicht blockierend. Dies bedeutet, dass der Arduino mehrere Aufgaben gleichzeitig ausführen kann. Sehen Sie sich diese Erklärung an. Arduino Delay-Funktion und warum sollten Sie sie nicht verwenden? Arduino Delay-Funktion und Warum sollten Sie sie nicht verwenden? Während delay () praktisch für grundlegende Demonstrationen der Funktionsweise von Arduino ist, sollten Sie es wirklich nicht sein Verwendung in der realen Welt. Hier ist, warum und was Sie stattdessen verwenden sollten. Lesen Sie mehr für weitere Informationen. So werden die Timer eingestellt:
unsigned long previousMillis1 = 0; const langes Intervall1 = 1500;
Die Variable previousMillis1
wird zu einem späteren Zeitpunkt aktualisiert, um die aktuelle Uhrzeit zu speichern. Das Intervall1
Variable speichert die Wartezeit zwischen der Codeausführung - in diesem Fall 1,5 Sekunden. Es ist definiert als const
, Dies bedeutet, dass es konstant ist und sich niemals ändern wird. Dadurch kann Arduino den Code weiter optimieren.
In der Konfiguration()
Funktion gibt es ein paar Dinge. Zunächst werden die Ein- und Ausgänge eingerichtet. Dies muss geschehen, damit der Arduino weiß, was mit den einzelnen Pins verbunden ist:
PinMode (9, INPUT); // Setup-Schaltung pinMode (10, OUTPUT); // Setup-Summer 1 PinMode (11, OUTPUT); // Setup-Summer 2 PinMode (2, INPUT); // Setup-Taste
Nun muss das Display konfiguriert werden:
_display-> set (5); // Helligkeit einstellen _Anzeige-> Punkt (falsch); // entferne Doppelpunkt _display-> init (); // Anzeige starten
Die Methoden einstellen
, Punkt
, und drin
sind alle in der enthalten _Anzeige
Objekt. Anstelle eines Punktes einen Zeiger (“->”) wird verwendet, um auf diese zuzugreifen. Machen Sie sich auch hier keine Gedanken über die Syntax (auch wenn Sie mehr darüber erfahren möchten, suchen Sie nach C ++ - Zeigern)..
Die Hauptschleife hat zwei Spielmodi: Herausforderung und freies Spiel. Bei freiem Spiel kann der Spieler beliebig oft spielen. Im Challenge-Modus wird mit der Taste ein Timer für 20 Sekunden eingestellt showCountdown
Methode. Mit der Taste starten und stoppen Sie den Timer. Derzeit können Sie den Spielmodus nur ändern, indem Sie die aufgerufene Variable manuell bearbeiten Modus
. Prüfen Sie, ob Sie dazu eine weitere Schaltfläche hinzufügen können, und ändern Sie den Code entsprechend.
Das summen
Die Methode spielt die Noten ab. Dies wird in Verbindung mit verwendet singen
. Die Sing-Methode durchläuft jede Note und spielt sie. Diese Methode wird regelmäßig aufgerufen, spielt jedoch nur dann die nächste Note, wenn seit dem letzten Spiel genügend Zeit vergangen ist. Sobald das Lied das Ende erreicht hat, setzt es das Lied auf Vers 1 zurück (songState = 14
). Sie können dies auf Null setzen, um den Song am Anfang zu starten. Der Grund dafür ist jedoch, die Einleitung zu überspringen. Die Einführung wird einmal gespielt, nachdem der Arduino hochgefahren ist, und dann nicht mehr.
Das showFree
und showPlay
Methoden schreiben einfach die Wörter “Kostenlos” und “ABSPIELEN” zur Anzeige. Beachten Sie, wie die “r” in free ist Kleinbuchstaben, wenn alle anderen Zeichen Großbuchstaben 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 in Groß- und Kleinschreibung stehen.
Das toggleFreePlay
Methode blinkt die Anzeige zwischen “KOSTENLOS” und “ABSPIELEN”. Dies geschieht wiederum auf nicht blockierende Weise.
Eine andere nützliche Methode ist Anzahl anzeigen
. Dies schreibt eine Zahl in die mittleren zwei Zeichen der Anzeige wie folgt:
Das Display ist nicht intelligent genug, um große Zahlen anzeigen zu können, 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 endgültige Methode wird aufgerufen showCountdown
. Bei 20 startet ein Zähler und verringert ihn jede Sekunde um eins. Wenn dies Null erreicht, summt es dreimal, um anzuzeigen, dass die Zeit abgelaufen ist.
Hier ist der ganze Code zusammen:
#umfassen // include display library #include // Einschlussabstände TM1637 * _display = new TM1637 (12, 13); // Anzeigeobjekt erstellen, 12 = CLK (Uhr), 13 = D10 (Daten) // Musik int songState = 0; int Melodie [] = 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, 8, 16, 8, 3, 12, 16, 16, 16, 8, 16, 8, 16, 8, 16, 8, 16, 8, 16, 4, 12, 12, 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, 4, 16, 12, 17, 17, 17, 17, 17, 8, 12, 17, 17, 17, 8, 16, 8, 16, 8, 16, 8, 1; // nicht blockierendes Setup // freies Spiel unsigniert lang previousMillis1 = 0; // Zeitworte zuletzt geändert const lang Intervall1 = 1500; // Intervall zwischen dem Ändern // Musik ohne Vorzeichen long previousMillis2 = 0; // Zeit zuletzt geändert const lang Intervall2 = 100; // Intervall zwischen Notizen int displayStatus = 0; // Verfolge, was angezeigt wird int mode = 0; // Behalte den Spielmodus im Auge - wechsle für verschiedene Modi auf 0 oder 1 bool countdown = false; unsigned long previousMillis3 = 0; // Zeit zuletzt geändert const lang Intervall3 = 1000; // Intervall zwischen dem Countdown int count = 20; // Challenge Mode Timer void setup () // Setze deinen Setup-Code hier, um ihn einmal auszuführen: pinMode (9, INPUT); // Setup-Schaltung pinMode (10, OUTPUT); // Setup-Summer 1 PinMode (11, OUTPUT); // Setup-Summer 2 PinMode (2, INPUT); // Setup-Taste _Anzeige-> Set (5); // Helligkeit einstellen _Anzeige-> Punkt (falsch); // entferne Doppelpunkt _display-> init (); // Anzeige starten void loop () // füge deinen Hauptcode hier ein, um wiederholt zu laufen: if (mode == 0) // Challenge-Modus if (digitalRead (2) == HIGH) delay (25); if (digitalRead (2) == HIGH) countdown = wahr; // Stoppen Sie den Countdown else countdown = false; // Stoppen Sie den Countdown if (countdown) showCountdown (); // advance countdown else // freies Spiel 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 der verbleibenden Zeit ohne Vorzeichen long currentMillis = millis (); // aktuelle Uhrzeit if (currentMillis - previousMillis3> = Intervall3) previousMillis3 = currentMillis; --Anzahl; showNumber (Anzahl); if (count == 0) // Spiel über Countdown = falsch; Zählung = 20; // Countdown zurücksetzen // Buzz 3 Mal Buzz (11, NOTE_B0, 1000/24); Verzögerung (100); Buzz (11, NOTE_B0, 1000/24); Verzögerung (100); Buzz (11, NOTE_B0, 1000/24); void showNumber (int number) // show number (maximal 99) auf dem Display _display-> display (0, 25); // write - to segment 1 _display-> display (3, 25); // Write-to-Segment 4 // Nummer in die Mitte der Anzeige schreiben if (number == 10) _display-> display (1,1); _Display-> Anzeige (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 () // zwischen Wörtern blättern ohne zu blockieren unsigned long currentMillis = millis (); // aktuelle Uhrzeit if (currentMillis - previousMillis1> = Intervall1) previousMillis1 = currentMillis; if (displayStatus == 1) showPlay (); sonst showFree (); void showPlay () // Schreibe "PLAY" in die Anzeige _display-> display (0, 21); // schreibe P in Segment 1 _Anzeige-> Anzeige (1, 18); // schreibe L in Segment 2 _Display-> Anzeige (2, 10); // schreibe A in Segment 3 _display-> display (3, 4); // schreibe Y in Segment 4 displayStatus = 2; void showFree () // "Free" in die Anzeige schreiben _display-> display (0, 15); // schreibe F in Segment 1 _Anzeige-> Anzeige (1, 23); // schreibe r in Segment 2 _display-> display (2, 14); // schreibe E in Segment 3 _Anzeige-> Anzeige (3, 14); // schreibe E in Segment 4 displayStatus = 1; void buzz (int targetPin, lange Frequenz, lange Länge) / * Summer-Beispielfunktion von Rob Faludi http://www.faludi.com https://gist.github.com/AnthonyDiGirolamo/1405180 * / long delayValue = 1000000 / Frequenz / 2; // Berechne den Verzögerungswert zwischen den Übergängen //// Der Wert von Mikrosekunden im Wert von einer Sekunde, geteilt durch die Frequenz, wird dann in zwei Hälften geteilt, da //// für jeden Zyklus zwei Phasen vorhanden sind. numCycles = frequency * length / 1000; // Berechne die Anzahl der Zyklen für das richtige Timing //// multipliziere die Frequenz, was wirklich Zyklen pro Sekunde ist, mit der Anzahl der Sekunden, um //// die Gesamtzahl der zu erzeugenden Zyklen zu erhalten (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 void sing() // play the song in a non blocking way unsigned long currentMillis = millis(); if (currentMillis - previousMillis2 >= Intervall2) vorherigeMillis2 = aktuelleMillis; int noteDuration = 1000 / tempo [songState]; Buzz (10, Melodie [songState], noteDuration); int pauseBetweenNotes = noteDuration; delay (pauseBetweenNotes); // Stoppen Sie den Klang: buzz (10, 0, noteDuration); ++ songState; // Song erneut starten, wenn beendet if (songState> 79) songState = 14; // Intro überspringen
Speichern Sie diese Datei als “Buzzwire” (Datei> Speichern unter) und lade es auf dein Board hoch (Datei> Hochladen). Wenn Sie nicht sicher sind, wie der Arduino hochgeladen werden soll oder der Code etwas unheimlich aussieht, werfen Sie einen Blick auf unseren Arduino-Einsteigerhandbuch Elektronik-Prototyping-Plattform basierend auf flexibler, benutzerfreundlicher Hard- und Software. Es ist für Künstler, Designer, Hobbyisten und alle gedacht, die interaktive Objekte oder Umgebungen erstellen möchten. Weiterlesen . Wenn alles gut geht, sollten Sie jetzt Ihr eigenes Buzz-Drahtspiel haben - cool!
Wenn Sie nach dem Lesen etwas Cooles gemacht haben, würde ich es gerne sehen - lassen Sie es mich in den Kommentaren wissen!
Mehr erfahren über: Arduino, Elektronik.