Home > Technologie > Smart-Brettspiel

Smart-Brettspiel

0
Advertisement

Smart-Brettspiel

Für ein Schulprojekt mache ich und ein Mitstudent ein kluges Spiel. Wir beide machen verschiedene Teile des smarten Brettspiels. Ich mache die Hauptspieleinheit. Er macht die etwas komplizierten Minispiele. Das Spiel ist voll funktionsfähig ohne die DLC von den anderen Studenten gemacht, aber es macht das Spiel mehr Spaß. Diese Geräte können miteinander verbinden, um ein großes Spiel zu machen.

Sein Lehrstück ist hier zu finden

Das Ziel des Spiels ist es, alle 6 Teile, die Sie verdienen können, indem Sie verschiedene Minispiele zu sammeln. Der Spieler, der alle sechs Teile gesammelt hat die ersten Siege, Ein Teil wird kostenlos gegeben, wenn Sie das erste Mal starten.

Die folgende Moskauer Liste ist die Moskauer Liste der Dinge, die in diesem anweisbaren gemacht werden:

Moskau

Muss haben: Gamecontroller

Sollte haben: Buzz Draht, sagt Simon

Könnte: Farbsucher

Wird nicht haben:

Das Hauptspiel

Das Spiel besteht aus 1 Hauptspieleinheit. Mit dem Spielfeld oben. Und ein lcd, das die Kerben und nützliche Spielinformationen anzeigt. Es gibt einige Tasten für die Auswahl der Dinge.

Die Minispiele werden an den Ecken des Spielfeldes liegen. Wie bereits erwähnt, werden wir die gesamte Einheit einschließlich aller Spiele bauen, wenn Sie nur das Gerät ohne die DLC-Spiele bauen wollen, müssen Sie einige Modifikationen an den Laserschneidplänen vornehmen, da sie für die gesamte Einheit hergestellt sind.

Simon sagt

Dieses Spiel ist simon sagt. Ich denke nicht, dass ich erklären muss, was dieses Spiel tut, da sein sehr bekanntes. Das Spiel wil besteht aus 4 Runden von simon sagt. Danach das Spiel zu stoppen und Sie gewonnen haben, wenn Sie gewinnen, gewinnen Sie einen Teil. Jedes Mal, wenn Sie scheitern, verlieren Sie ein Leben. Wenn du 3 Mal versagst, endet das Spiel.

Für dieses Spiel brauche ich nicht viel. Nur ein paar Tasten und ein paar LEDs und Widerstände.

Buzz Draht

Dieses Spiel ist Buzz Draht. Die Skizze verrät, was das Spiel ist. Es ist ein Draht, den Sie brauchen, um zu verfolgen, aber nicht berühren können. Wenn Sie den Draht berühren, verlieren Sie ein Leben. Wenn du drei Leben verloren hast, hast du das Minispiel verloren. Dann werden Sie nicht gewinnen, ein Teil für das Spiel und Sie müssen es erneut versuchen.

Für dieses Spiel i bassically nicht brauchen Sensoren. Ich kann gerade den Strom von den Drähten lesen, die auf dem arduino sofort ankuppeln. Die einzige Sache, die ich benötige, ist ein Summer für das Summen, wenn Sie ausfallen und eine LED, um einen Schlag anzuzeigen.

Eine wichtige Sache, zum zu beachten, bevor wir anfangen, wenn Sie auf dem Halten der gameunit intakt planen und Sie es häufig verwenden, empfehle ich, dass Sie den Draht anstelle der Verwendung eines Steckbrettes löten. Es war ein Schmerz in den Arsch zu stoppen alle Drähte vom Trennen.

Schritt 1: Simon sagt Modul: Was Sie brauchen

Smart-Brettspiel

Smart-Brettspiel

Jetzt werden wir die Simon sagt Modul.

Für das Modul benötigen Sie folgende Komponenten:

- (4) LEDs
- (4) Widerstände
- (1) Piezo-Lautsprecher
- (4) -Tasten
- Ein Bündel Drähte
- Ein Arduino

Darüber hinaus benötigen Sie eine Art von Fall, um es in. In diesem Tutorial werden wir das Simon sagt Modul in das Spiel-Modul setzen. Wenn Sie nur wollen, dass der Simon sagt Modul können Sie es einfach in seinem eigenen Fall.

Das Sekundenbild ist eine Skizze, die ich für ein eigenständiges Gerät gemacht habe. Ich habe es nur für die Entwicklung der Einheit. Das finale Simon sagt Modul wird in einem Fall mit dem Rest der Module gesetzt und ist mit dem Arduino-Mega verbunden.

Schritt 2: Simon sagt Modul: Aufbau des Moduls - Schritt 1

Smart-Brettspiel

Smart-Brettspiel

In diesem ersten Schritt werden wir die Komponenten auf dem Steckbrett platzieren und einige einfache Drähte anschließen. Sie müssen die Komponenten wie auf dem Bild oben platzieren platzieren. Versuchen Sie, die Tasten aus einem anständigen Betrag Platz. Dies erleichtert das Betätigen der Tasten.

Schritt 3: Simon sagt Modul: Aufbau des Moduls - Schritt 2

Smart-Brettspiel

Smart-Brettspiel

In diesem Schritt verbinden wir die LED's mit dem Arduino. Schließen Sie einfach die positiven Beine von den LED's zu den 2/3/4/5 Ports auf dem Arduino. Dann können Sie den Piezo-Lautsprecher auf die Platine stecken und den Pluspol an Anschluss 10 anschließen.

Schritt 4: Simon sagt Modul: Aufbau des Moduls - Schritt 3

Smart-Brettspiel

Smart-Brettspiel

Verbinden Sie alle Tasten mit der Minusleitung auf dem Steckbrett. Verbinden Sie dann die anderen Pins der Tasten mit den 6/7/8/9 Anschlüssen des Arduino

Schritt 5: Simon sagt Modul: Der Code

Ich habe nicht die Skizze für Simon sagt mich. Die Skizze wurde ursprünglich von Robert Spann im Jahr 2009 gemacht. Ich bin ziemlich faul, so habe ich gerade die Skizze von mpilchfamily's instructables. Um das Spiel Sound es mit der Tone.h-Bibliothek. Sie erhalten einen Fehler, wenn Sie nicht installieren die Tone-Bibliothek, downlod die tone.zip und legte es in der adruino Bibliothek Ordner. Eine Datei der Skizze und Tone Library ist ebenfalls beigefügt.

Sie können zum Installieren einer Bibliothek, um es zu lernen.

Das ursprüngliche Tutorial

Lernen Sie, Bibliotheken zu installieren

Wenn Sie wissen möchten, wie der Simon sagt Modul funktioniert in der Tiefe Ich schlage vor, Sie gehen aus dem ursprünglichen Tutorial, Der Schöpfer erklärt es sehr gut und ich sehe nicht die Notwendigkeit, seine Explosion zu wiederholen.

Schritt 6: Simon Says Modul - Anpassen des Codes

So, jetzt haben wir den Code und es funktioniert perfekt mit dem Arduino auf seine eigene, ist es Zeit, um den Code neu zu schreiben, so kann es in der Hauptspiel-Modul verwendet werden. Dieser Schritt ist so ziemlich das gleiche für jedes Modul, und wenn Sie es auf diese Weise tun können Sie ganz einfach mit dem Spielmodul erweitern, bis es aus Häfen läuft (Wich sind viele Häfen auf dem Arduino Mega lol)

Zuerst müssen wir die Variablen für das Modul im Hauptcode definieren, die ich alles kommentiert habe, damit es lesbar bleibt.

Ich paßte die Häfen zu den Häfen auf dem rechten Anblick auf dem Brett, also die Häfen, die oben mit dem Platz des simon gekennzeichnet werden, sagt Modul auf dem Brett.

  / Vars für Simon Says # schließen Tone Speakerpin ein;  int starttune [] = {NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_F4, NOTE_G4};  Int duration2 [] = {100, 200, 100, 200, 100, 400, 100, 100, 100, 100, 200, 100, 500};  Int note [] = {NOTE_C4, NOTE_C4, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5};  Int duration [] = {100, 100, 100, 300, 100, 300};  Int-Schaltfläche [] = {26, 27, 28, 29};  // Vier Knopfstifte int ledpin [] = {22, 23, 24, 25};  // LED-Pins in Wenden = 0;  // turnss counter int buttonstate = 0;  // button status checker int randomArray [100];  // Verschillende volgorde int inputArray [100];

Weiter folgen Sie dem Setup, das in der Setup-Schleife des Arduino ist dieser Code ist immer noch die gleichen exept für die Lautsprecher-Pin habe ich bewegt, um besser auf die Position des simon sagt Modul.

  Speakerpin.begin (30);  Für (int i = 0; i <4; i ++) {pinMode (ledpin [i], OUTPUT);  } Für (int i = 0; i <4; i ++) {pinMode (Taste [i], INPUT);  DigitalWrite (Taste [i], HOCH);  } RandomSeed (analogRead (15));  // Added "mehr Zufälligkeit" mit dem randomArray für die Ausgabefunktion für (int thisNote = 0; thisNote <13; thisNote ++) zu erzeugen {// spielen die nächste Note: speakerpin.play (starttune [thisNote]);  // Halten die Notiz: if (thisNote == 0 || thisNote == 2 || thisNote == 4 || thisNote == 6) {digital (ledpin [0], HIGH);  } If (thisNote == 1 || thisNote == 3 || thisNote == 5 || thisNote == 7 || thisNote == 9 || thisNote == 11) {digital (ledpin [1], HIGH);  } If (thisNote == 8 || thisNote == 12) {digitalWrite (ledpin [2], HIGH);  } If (thisNote == 10) {digitalWrite (ledpin [3], HIGH);  } Delay (duration2 [thisNote]);  // Stopp für die nächste Note: speakerpin.stop ();  DigitalWrite (ledpin [0], LOW);  DigitalWrite (ledpin [1], LOW);  DigitalWrite (ledpin [2], LOW);  DigitalWrite (ledpin [3], LOW);  Verzögerung (25);  Verzögerung (1000);  aufrechtzuerhalten.

Da die Hauptspieleinheit die Spiele und die Zeit, die sie aktiviert werden, steuert, wurden alle Module der Loop-Funktionen in Funktionen aufgeteilt, die basierend auf dem, was in der Hauptschleife geschieht, aufgerufen werden

  ////////////////////////////////////////////////// ////////////////////// // // Simon sagt Funktionen // // // ///////////// /////////////////////////////////////// ///////// void SimonSays () {// Funktion zum Generieren des Arrays, das vom Player digitalWrite (ledpin [0], HIGH) abgestimmt werden soll;  DigitalWrite (ledpin [1], HIGH);  DigitalWrite (ledpin [2], HIGH);  DigitalWrite (ledpin [3], HIGH);  Für (int thisNote = 0, thisNote <6; thisNote ++) {// die nächste Note spielen: speakerpin.play (note [thisNote]);  // Halten Sie die Notiz: delay (duration [thisNote]);  // Stopp für die nächste Note: speakerpin.stop ();  Verzögerung (25);  } DigitalWrite (ledpin [0], LOW);  DigitalWrite (ledpin [1], LOW);  DigitalWrite (ledpin [2], LOW);  DigitalWrite (ledpin [3], LOW);  Verzögerung (1000);  (Int y = turnss; y <= turnss; y ++) {// Eingeschränkt durch die Umdrehungsvariable Serial.println ( "");  // Einige serielle Ausgaben folgen auf Serial.print ( "Turn:");  Serial.print (y);  Serial.println ( "");  RandomArray [y] = zufällig (1, 5);  // Eine Zufallszahl zuweisen (1-4) zum randomArray [y], y das ist für turnss count (int i = 0; i <= turnss; i ++) {Serial.print (randomArray [i]);  for (int y = 0; y <4; y ++) {if (randomArray [i] == 1 && ledpin [y] == 22) {// if-Anweisungen, die gespeicherten Werte im Array digital (ledpin [y anzuzeigen ], HOCH);  Speakerpin.play (NOTE_G3, 100);  Verzögerung (400);  DigitalWrite (ledpin [y], LOW);  Verzögerung (100);  } If (randomArray [i] == 2 && ledpin [y] == 23) {digitalWrite (ledpin [y], HIGH);  Speakerpin.play (NOTE_A3, 100);  Verzögerung (400);  DigitalWrite (ledpin [y], LOW);  Verzögerung (100);  } If (randomArray [i] == 3 && ledpin [y] == 24) {digitalWrite (ledpin [y], HIGH);  Speakerpin.play (NOTE_B3, 100);  Verzögerung (400);  DigitalWrite (ledpin [y], LOW);  Verzögerung (100);  } If (randomArray [i] == 4 && ledpin [y] == 25) {digitalWrite (ledpin [y], HIGH);  Speakerpin.play (NOTE_C4, 100);  Verzögerung (400);  DigitalWrite (ledpin [y], LOW);  Verzögerung (100);  }}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} { ]);  If (buttonstate == LOW && button [y] == 26) {// Prüfung auf Drucktaster digitalWrite (ledpin [0], HIGH);  Speakerpin.play (NOTE_G3, 100);  Verzögerung (200);  DigitalWrite (ledpin [0], LOW);  InputArray [i] = 1;  Verzögerung (250);  Serial.print ( "");  Serial.print (1);  If (inputArray [i]! = RandomArray [i]) {fail ();  } I ++;  } If (buttonstate == LOW && button [y] == 27) {digitalWrite (ledpin [1], HIGH);  Speakerpin.play (NOTE_A3, 100);  Verzögerung (200);  DigitalWrite (ledpin [1], LOW);  InputArray [i] = 2;  Verzögerung (250);  Serial.print ( "");  Serial.print (2);  If (inputArray [i]! = RandomArray [i]) {fail ();  } I ++;  } If (buttonstate == LOW && button [y] == 28) {digitalWrite (ledpin [2], HIGH);  Speakerpin.play (NOTE_B3, 100);  Verzögerung (200);  DigitalWrite (ledpin [2], LOW);  InputArray [i] = 3;  Verzögerung (250);  Serial.print ( "");  Serial.print (3);  If (inputArray [i]! = RandomArray [i]) {fail ();  } I ++;  } If (buttonstate == LOW && button [y] == 29) {digitalWrite (ledpin [3], HIGH);  Speakerpin.play (NOTE_C4, 100);  Verzögerung (200);  DigitalWrite (ledpin [3], LOW);  InputArray [i] = 4;  Verzögerung (250);  Serial.print ( "");  Serial.print (4);  If (inputArray [i]! = RandomArray [i]) {fail ();  } I ++;  }}} Verzögerung (500);  Wende ++;  Wenn (turnss == 4) {lebt = 5;  }} Void fehl () {für (int y = 0; y <= 2; y ++) {// Blinklicht für Fehler digitalWrite (ledpin [0], HIGH);  DigitalWrite (ledpin [1], HIGH);  DigitalWrite (ledpin [2], HIGH);  DigitalWrite (ledpin [3], HIGH);  Speakerpin.play (NOTE_G3, 300);  Verzögerung (200);  DigitalWrite (ledpin [0], LOW);  DigitalWrite (ledpin [1], LOW);  DigitalWrite (ledpin [2], LOW);  DigitalWrite (ledpin [3], LOW);  Speakerpin.play (NOTE_C3, 300);  Verzögerung (200);  Verzögerung (500);  drehungen  Leben--;  Serial.println ( "Lebt:" + String (Leben));  aufrechtzuerhalten.

Der Code oben ist noch der selbe wie der ursprüngliche Simon sagt Code. Das einzige, was geändert wird ist, dass es in seiner eigenen Funktion ist und wenn Sie scheitern das Spiel wird wegnehmen eines deines Lebens. Wenn Sie 4 erreichen und Sie das Spiel gewinnen, wil Ihr Leben auf 5 setzen. Durch das Setzen Ihres Lebens auf 5 das Hauptspiel erkennt, dass das Spiel vorbei ist und wurde durch den Spieler gewonnen.

Schritt 7: BuzzWire Modul: Aufbau des Moduls - Schritt 1

Smart-Brettspiel

Smart-Brettspiel

Jetzt machen wir das buzzwire Modul. Dieses Modul ist ziemlich einfach, wie Sie aus der Skizze zu sehen. Für dieses Modul benötigen Sie folgende Dinge:

  • Piezo-Lautsprecher
  • LED
  • Ein Widerstand
  • Ein langes Stück Kupferdraht
  • Ein kürzeres Stück Kupferdraht
  • Einige Drähte

Schritt 8: BuzzWire Modul: Aufbau des Moduls - Schritt 1

Smart-Brettspiel

Smart-Brettspiel

Im ersten Schritt müssen Sie die Stange und den Draht zu machen. Ich beugte meine wie die Bilder oben. Es spielt keine Rolle, wie es aussieht. Solange es so etwas wie die Bilder oben aussieht. Sie müssen nur einen Draht an die Stange und einen Draht an den Rahmen zu löten.

Schritt 9: BuzzWire Modul: Aufbau des Moduls - Schritt 2

Smart-Brettspiel

Nun legen Sie die LED und den Piezo-Lautsprecher auf das Steckbrett. Legen Sie den Widerstand auf die LED und führte das Minus-Bein des Piezo-Lautsprecher gehen auf die gleiche Zeile wie der Widerstand eine Minus-Zeile. Legen Sie den Minusdraht des Rahmens in eine zufällige Reihe

Schritt 10: BuzzWire Modul: Aufbau des Moduls - Schritt 3

Smart-Brettspiel

Verdrahten Sie das positive geführte Bein in Port 2 auf dem Arduino. Der Draht der Stange kann direkt in 5 Volt. Der negative Draht des Rahmens kann in Port A0 gehen

Schritt 11: BuzzWire-Modul: Der Code

Smart-Brettspiel

Das Modul sollte so aussehen. Wenn Sie das vollständige Spielmodul erstellen möchten, können Sie diesen Schritt überspringen. Die Software für das volle Modul wird ein bisschen weiter in diesem instructable. Wenn Sie dieses Modul nur aufbauen wollen, können Sie weiterlesen.

Eine Sache sehr wichtig zu beachten ist, dass das Kupfer sehr empfindlich ist. Es wird jedes elektrische Feld in der Nähe. Aus diesem Grund hat der Code seine if-Anweisung für mehr als 1000 programmiert. Auch so ist der Code noch sehr instabil, schlage ich vor, nicht dieses Spiel spielen, während Sie eine Menge von elektrischen Geräten in der Nähe haben aus irgendeinem Grund scheint es, die elektrische holen Aus diesem Gerät.

Dies ist der Code für das buzzwire Modul als Standalone:

  Int wireRodPin = A3; int wireFeedbackPin = 53; int BuzzHit = 0; void setup () {pinMode (wireRodPin, INPUT);  PinMode (wireFeedbackPin, OUTPUT);} void Schleife () {BuzzHit = analogRead (wireRodPin);  If (BuzzHit> 1000) {digitalWrite (wireFeedbackPin, HIGH);  Verzögerung (1500);  DigitalWrite (wireFeedbackPin, LOW);  } Else {digitalWrite (wireFeedbackPin, LOW);  } CurrentButtonState = digitalRead (buttonGCPin);  If (currentButtonState == HIGH && lastButtonState == LOW) {} lastButtonState = currentButtonState;  aufrechtzuerhalten.

Der Code für das BuzzWire Modul ist viel simpeler als der Code für das Simon sagt Modul. Aber die Grundlagen sind die gleichen. Zuerst definieren wir die Vars,

  Int wireRodPin = A3; int wireFeedbackPin = 53;  Int BuzzHit = 0;

Als das Setup:

  PinMode (wireRodPin, INPUT);  PinMode (wireFeedbackPin, OUTPUT);

Als die Spiel-Funktion, die von der Spiel-Schleife aufgerufen wird:

  /////////////////////////////////////// ////////////////////// // // BuzzWire-Funktionen // // // ////////////// /////////////////////////////////////// //////// void buzzwire () {BuzzHit = analogRead (wireRodPin);  If (BuzzHit> 1000) {digitalWrite (wireFeedbackPin, HIGH);  Verzögerung (1500);  DigitalWrite (wireFeedbackPin, LOW);  Leben--;  } Else {digitalWrite (wireFeedbackPin, LOW);  } CurrentButtonState = digitalRead (buttonGCPin);  If (currentButtonState == HIGH && lastButtonState == LOW) {lebt = 5;  } LastButtonState = currentButtonState;  aufrechtzuerhalten.

Wie Sie sehen können, ist die eigentliche Funktion ziemlich einfach. Wir prüfen grundsätzlich nur, ob die Stange den Kupferrahmen berührt. Wenn das passiert, verlieren Sie ein Leben. Wenn Sie es machen, müssen Sie einen Knopf drücken und Ihr Leben wird auf 5 gesetzt werden, Als das Spiel weiß, dass der Spieler gewonnen hat.

Es gibt einen ziemlich guten Grund, warum wir beschlossen, die Win-Bedingung eine Schaltfläche zu machen. Wir versuchten es so zu machen, dass das Ende des Kupferdrahts einen anderen Draht aufwies, wenn man ihn mit der Rute berühren würde, die man gewinnen würde. Sogar tho die Drähte, wo nicht berühren wir konnte es nicht an die Arbeit. Aus irgendeinem Grund die beiden Drähte, die sich gegenseitig stören, so dass wir diesen Teil und whent für einen Knopf gekratzt.

Schritt 12: Hauptspielmodul

Smart-Brettspiel

Jetzt, da die verlierenden Spielmodule getan werden, ist es Zeit für das Hauptspielmodul. Codewise ist das der schwierigste Teil des gesamten Projektes. Die Abbildung oben ist der Hauptkern des Spielmoduls, das es einen Schirm, 2 Knöpfe und ein Potentiometer kennzeichnet. Beim Ausführen der Bildschirme zeigt wer an der Reihe ist. Wenn Sie die rechte Taste drücken, gelangen Sie in das Spielmenü. Hier können Sie zwischen den verschiedenen Minispielen blättern. Wenn du das Minispiel gefunden hast, das du spielen möchtest, kannst du das Minispiel durch Drücken der linken Taste wählen. Alle Rückmeldungen der Minispiele in Bezug auf Gewinnen und Verlieren werden auf diesem Display angezeigt.

Schritt 13: Hauptspielmodul - Aufbau des Moduls

Smart-Brettspiel

Smart-Brettspiel

Dieses Modul wird direkt in das arduino mega gebaut. Weil ich nicht sehen, den Punkt, es auf einem arduino uno, weil es nicht funktionieren wird.

Die Anforderungen:

- Ein Arduino-Mega (Sie könnten ein uno verwenden, aber dann müssen Sie den Code ein wenig an Ihre Bedürfnisse anpassen)
- 2 Potentiometer

- 1 LCD-Bildschirm
- 2 Tasten
- viel Draht
- Wenn möglich ein Flachbandkabel (spart viel Mühe bei der Montage des Bildschirms in das Modul)
-2 Widerstände für die Tasten.

Für das Layout einfach kopieren, was ich auf dem Bild oben. Die Widerstände und die scheinbar lose hängenden Drähte sind für die Tasten. Ich hatte sie bereits aus dem Steckbrett entfernt, sobald ich das Bild gemacht habe, deshalb deshalb fehlt. Auch das Potentiometer links (ich habe ein Dia-Potentiometer) ist für den Kontrast. Das zweite Potentiometer muss auf der rechten Seite der 3 Anschlüsse ohne Widerstand angeordnet werden.

Die Anschlüsse sind wie folgt:

Da dies die Hauptspielschleife ist, habe ich alle Dinge mit den niedrigeren Ports auf dem Arduino verbunden.

Der Bildschirm ist an die folgenden Anschlüsse angeschlossen: 7,6,5,4,3,2
Der Port zum Anschließen der Gamecontrol-Taste ist 10
Der Anschluss zum Verbinden der Gameselect-Taste ist 11

Schritt 14: Hauptmodul des Spiels - Aufbau des Moduls Schritt 2

Smart-Brettspiel

Das Spielmodul sollte so etwas wie das oben genannte nur mit einem Flachbandkabel zwischen dem Brett und dem Bildschirm aussehen, wenn Sie eine verwendet haben.

Schritt 15: Hauptspielmodul - Erstellen des Codes

Dieser Schritt i ziemlich groß, da es viele Informationen über die Programmierung des Hauptmoduls umfasst. Hier ist eine Erklärung, was jeder Teil des Codes tut. Wenn Sie nicht das Gefühl, die Notwendigkeit, die nitty gritty des Codes kennen, können Sie mit dem nächsten Schritt überspringen. Der vollständige Code wird dort vorgestellt werden.

Zuerst müssen wir alle Variablen definieren.

  // Vars für Gameloop # include <LiquidCrystal.h> int gameChooser = 0;  Int ChoosenGame = 0;  LiquidCrystal lcd (7, 6, 5, 4, 3, 2);  Int buttonGCPin = 10;  Int buttonSelectPin = 11; // Globale vars int lebt = 3;  Int TurnEnable = 1;  Int Wende = 0;  Boolean currentButtonState = LOW;  Boolean lastButtonState = LOW;

Die Vars umfassen 2 Abschnitte, wobei der erste Abschnitt alle Variablen ist, die von dem Spielauswahlteil des Codes verwendet werden. Der zweite Abschnitt sind die Variablen, die von verschiedenen Funktionen im Code verwendet werden.

Nachdem wir die Variablen definiert haben, haben wir das Setup für die gameloop.

  Void setup () {Serial.begin (9600);  Lcd.begin (16, 2); // GameLoop-Einrichtung pinMode (buttonGCPin, INPUT);  PinMode (buttonSelectPin, INPUT);}

Zuerst haben wir den Serienanfang. Das ist etwas, was du nicht brauchst. Es ist dort für Debugging-Zwecke. Sie können das Feedback der Spiele im seriellen Monitor überprüfen.

Dies ist die Schleife, die bassically kontrolliert alles, Die ersten beiden Schecks sind für die Überprüfung, welche Spieler es drehen und drucken, die aus. Es gibt auch einen Scheck, um in das Schaltflächen-Auswahlmenü zu gelangen. Wenn die Taste gedrückt wird, wird der Spielwähler aktiviert und die TurnEnable deaktiviert. Stoppen der Schleife aus dem Drucken, was die Spieler drehen.

  Void loop () {if (Turn == 0 && TurnEnable == 1) {lcd.setCursor (0, 0);  Lcd.print ( "Spieler 1 ist dran");  Lcd.setCursor (0, 1);  Lcd.print ( "Warten auf Spiel");  CurrentButtonState = digitalRead (buttonSelectPin);  If (currentButtonState == HIGH && lastButtonState == LOW) {gameChooser = 1;  TurnEnable = 0;  Lcd.clear ();  }} If (Turn == 1 && TurnEnable == 1) {lcd.setCursor (0, 0);  Lcd.print ( "Spieler 2 ist dran");  Lcd.setCursor (0, 1);  Lcd.print ( "Warten auf Spiel");  CurrentButtonState = digitalRead (buttonSelectPin);  If (currentButtonState == HIGH && lastButtonState == LOW) {gameChooser = 1;  TurnEnable = 0;  Lcd.clear ();  }} If (gameChooser == 1) {gamePicker ();  aufrechtzuerhalten.

Wenn die Spielwahltaste gedrückt wurde, wird die Gamepicker-Funktion aufgerufen. Das ist die folgende Funktion:

  Void gamePicker () {int sensorValue = analogRead (A0);  // game kies menu if (sensorValue <200) {lcd.setCursor (0, 0);  // lcd.print ( "> Simon Says <");  Lcd.setCursor (0, 1);  Lcd.print ( "WirePuller");  } Else if (sensorValue> 200 && sensorValue <400) {lcd.setCursor (0, 0);  Lcd.print ( "> WirePuller <");  Lcd.setCursor (0, 1);  Lcd.print ( "BuzzWire");  } Else if (sensorValue> 400 && sensorValue <600) {lcd.setCursor (0, 0);  Lcd.print ( "> BuzzWire <");  Lcd.setCursor (0, 1);  Lcd.print ( "NoiseDetector");  } Else if (sensorValue> 600 && sensorValue <800) {lcd.setCursor (0, 0);  Lcd.print ( "> NoiseDetector <");  Lcd.setCursor (0, 1);  Lcd.print ( "Quiz");  } Else if (sensorValue> 800) {lcd.setCursor (0, 0);  Lcd.print ( "> Quiz <");  Lcd.setCursor (0, 1);  Lcd.print ( "");  } CurrentButtonState = digitalRead (buttonGCPin);  If (currentButtonState == HIGH && lastButtonState == LOW && sensorValue <200) {lcd.setCursor (0, 0);  Lcd.print ( "Starting");  Lcd.setCursor (0, 1);  Lcd.print ( "Simon Says");  Verzögerung (2000);  Lcd.clear ();  ChoosenGame = 1;  GameChooser = 0;  } Else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue> 200 && sensorValue <400) {lcd.setCursor (0, 0);  Lcd.print ( "Starting");  Lcd.setCursor (0, 1);  Lcd.print ( "WirePuller");  Verzögerung (2000);  Lcd.clear ();  ChoosenGame = 2;  GameChooser = 0;  } Else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue> 400 && sensorValue <600) {lcd.setCursor (0, 0);  Lcd.print ( "Starting");  Lcd.setCursor (0, 1);  Lcd.print ( "BuzzWire");  Verzögerung (2000);  Lcd.clear ();  ChoosenGame = 3;  GameChooser = 0;  } Else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue> 600 && sensorValue <800) {lcd.setCursor (0, 0);  Lcd.print ( "Starting");  Lcd.setCursor (0, 1);  Lcd.print ( "NoiseDetector");  Verzögerung (2000);  Lcd.clear ();  ChoosenGame = 4;  GameChooser = 0;  } Else if (currentButtonState == HIGH && lastButtonState == LOW && sensorsValue> 800) {lcd.setCursor (0, 0);  Lcd.print ( "Starting");  Lcd.setCursor (0, 1);  Lcd.print ( "Quiz");  Verzögerung (2000);  Lcd.clear ();  ChoosenGame = 5;  GameChooser = 0;  } LastButtonState = currentButtonState;  aufrechtzuerhalten.

Was dieses tut, steuert es das scrolltrough Menü der Spiele. In diesem Menü wählen Sie eines der Spiele aus

Dann ist dies der Teil, der alle Spielmechaniken steuert. Wenn ein Spiel gewählt wird, zeigt es, welches Spiel gespielt wird. Diese Gamecontrol-Schleifen überprüfen auch, ob Sie gewonnen oder verloren ein Minispiel. Wenn Sie ein Minispiel gewinnen, wird der Bildschirm sagen, dass Spieler [Nummer des Spielers] einen Punkt gewonnen hat. Indiziert, dass Sie den Teil dieses Spiels verdient haben. Ein Sieg-Sound wird gespielt und die Turns werden umgeschaltet. Wenn Sie ein Spiel verlieren, wird der Bildschirm sagen, Spieler [Nummer des Spielers] ist gameover. Ein Gameover-Sound wird abgespielt und der Turn wird umgeschaltet. Das funktioniert bei allen Spielen genauso.

  Void loop () {lastButtonState = currentButtonState;  // Simon Says if (ChoosenGame == 1) {lcd.setCursor (0, 0);  Lcd.print ( "Wiedergabe:");  Lcd.setCursor (0, 1);  Lcd.print ( "Simon Says");  Wenn (lebt == 0) {lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "ist Gameover!");  Failsound ();  Verzögerung (2500);  ChoosenGame = 0;  Turnss = 0;  TurnSwitch ();  } Else if (lebt == 5) {lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "erhielt einen Punkt!");  Verzögerung (2500);  SiegSound ();  ChoosenGame = 0;  Turnss = 0;  TurnSwitch ();  } Else {SimonSays ();  }} // WirePuller if (ChoosenGame == 2) {lcd.setCursor (0, 0);  Lcd.print ( "Wiedergabe:");  Lcd.setCursor (0, 1);  Lcd.print ( "Wirepuller");  Drahtpuller ();  Wenn (lebt == 0) {lcdquiz.clear ();  Lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "ist Gameover!");  Failsound ();  Verzögerung (2500);  ChoosenGame = 0;  TurnSwitch ();  } Else if (lebt == 5) {lcdquiz.clear ();  Lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "erhielt einen Punkt!");  Verzögerung (2500);  SiegSound ();  ChoosenGame = 0;  TurnSwitch ();  }} // BuzzWire if (ChoosenGame == 3) {lcd.setCursor (0, 0);  Lcd.print ( "Wiedergabe:");  Lcd.setCursor (0, 1);  Lcd.print ( "BuzzWire");  Buzzwire ();  Wenn (lebt == 0) {lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "ist Gameover!");  Failsound ();  Verzögerung (2500);  ChoosenGame = 0;  TurnSwitch ();  } Else if (lebt == 5) {lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "erhielt einen Punkt!");  Verzögerung (2500);  SiegSound ();  ChoosenGame = 0;  TurnSwitch ();  }} // NoiseDetector if (ChoosenGame == 4) {lcd.setCursor (0, 0);  Lcd.print ( "Wiedergabe:");  Lcd.setCursor (0, 1);  Lcd.print ( "Noiseetector");  Noiseetector ();  Wenn (lebt == 0) {lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "ist Gameover!");  Failsound ();  Verzögerung (2500);  ChoosenGame = 0;  TurnSwitch ();  } Else if (lebt == 5) {lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "erhielt einen Punkt!");  Verzögerung (2500);  SiegSound ();  ChoosenGame = 0;  TurnSwitch ();  }} // Quiz if (ChoosenGame == 5) {quiz ();  Wenn (lebt == 0) {lcd.clear ();  Lcdquiz.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "ist Gameover!");  Failsound ();  Verzögerung (2500);  ChoosenGame = 0;  TurnSwitch ();  } Else if (lebt == 5) {lcd.clear ();  Lcdquiz.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "erhielt einen Punkt!");  Verzögerung (2500);  SiegSound ();  ChoosenGame = 0;  TurnSwitch ();  Aufrechtzuerhalten.

Dies ist die Schleife, die die Umdrehung schaltet. Es ist ziemlich vorwärts gerichtet. Wenn Spieler eins ist, wird es auf Spieler 2 geschaltet und die Leben werden zurückgesetzt. Wenn Spieler 2 spielt, wird es umgekehrt funktionieren.

  Void TurnSwitch () {if (Turn == 0) {Turn = 1;  TurnEnable = 1;  Leben = 3;  } Else if (Turn == 1) {Turn = 0;  TurnEnable = 1;  Leben = 3;  aufrechtzuerhalten.

Das ist die Siegschleife. Dies wird aufgerufen, wenn ein Spiel gewonnen wird. Es spielt nur ein Sieg-Sound

  Leere victorysound () {for (int thisNote = 0; thisNote <6; thisNote ++) {// die nächste Note spielen: speakerpin.play (Anmerkung [thisNote]);  // Halten Sie die Notiz: delay (duration [thisNote]);  // Stopp für die nächste Note: speakerpin.stop ();  Verzögerung (25);  aufrechtzuerhalten.

Dies ist die Gameover-Schleife. Diese wird aufgerufen, wenn ein Spiel verloren geht. Es spielt nur ein gameover Ton.

  Leere failsound () {for (int y = 0; y <= 2; y ++) {speakerpin.play (NOTE_G3, 300);  Verzögerung (200);  Speakerpin.play (NOTE_C3, 300);  Verzögerung (200);  aufrechtzuerhalten.

Schritt 16: Hauptspielmodul - Kombination des Codes

Jetzt, da wir den ganzen Code haben, den wir für die Spielschleife benötigen, können wir alles kombinieren. Ich habe zwei Versionen des kombinierten Codes. Man ist mit dem dlc und man ist mit dem DLC unterwegs. Der Code ist auch als Download beigefügt, so dass Sie auch diese verwenden können. Der Code ist bereit zu gehen, wenn Sie alle Ports die gleiche Weise wie wir verwenden. Wenn Sie einige der Häfen austauschen, überprüfen Sie die vars im Code und ändern Sie sie, wenn notwendig.

Der Code ohne DLC:

  <P> // Vars für Gameloop <br3 # include int gameChooser = 0;  Int ChoosenGame = 0;  Int Gamewin = 0;  Int scoreP1 = 0;  Int scoreP2 = 0;  Int Wende = 0;  LiquidCrystal lcd (7, 6, 5, 4, 3, 2);  Int buttonGCPin = 10;  Int buttonSelectPin = 11;  Int TurnEnable = 1;  Boolean currentButtonState = LOW;  Boolean lastButtonState = LOW; </ p> <p> // Vars für buzzwire int wireRodPin = A3;  Int wireFeedbackPin = 53;  int BuzzHit = 0; </ p> <p> // Vars für Simon #include Tone speakerpin sagt; </ p> <p> int starttune [] = {NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_F4, NOTE_G4};  Int duration2 [] = {100, 200, 100, 200, 100, 400, 100, 100, 100, 100, 200, 100, 500};  int note [] = {NOTE_C4, NOTE_C4, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5};  Int duration [] = {100, 100, 100, 300, 100, 300};  Int-Schaltfläche [] = {26, 27, 28, 29};  // Vier Knopfstifte int ledpin [] = {22, 23, 24, 25};  // LED-Pins in Wenden = 0;  // turnss counter int buttonstate = 0;  // button status checker int randomArray [100];  // Verschillende volgorde int inputArray [100]; </ p> <p> // globalen Variablen int Leben = 3; </ p> <p> void setup () {Serial.begin (9600);  lcd.begin (16, 2); </ p> <p> // GameLoop Setup pinMode (buttonGCPin, INPUT);  pinMode (buttonSelectPin, INPUT); </ p> <p> // BuzzWire Setup pinMode (wireRodPin, INPUT);  PinMode (wireFeedbackPin, OUTPUT); </ p> <p> // Simon Says Setup speakerpin.begin (30);  // Lautsprecher auf Pin 10 </ p> <p> für (int i = 0; i <4; i ++) {pinMode (ledpin [i], OUTPUT);  } (& Lt; i = 0; i & lt; 4; i ++) {pinMode (Taste [i], INPUT);  DigitalWrite (Taste [i], HOCH);  } </ P> <p> randomSeed (analogRead (15));  // hinzugefügt, um "randomArray" für die Ausgabefunktion für (int thisNote = 0, thisNote <13; thisNote ++) {// die nächste Note zu erzeugen: speakerpin.play (starttune [thisNote]);  // Halten Sie die Notiz: if (thisNote == 0 || thisNote == 2 || thisNote == 4 || thisNote == 6) {digitalWrite (ledpin [0], HIGH);  }}}} {DigitalWrite (ledpin [1], HIGH);  } If (thisNote == 8 || thisNote == 12) {digitalWrite (ledpin [2], HIGH);  } If (thisNote == 10) {digitalWrite (ledpin [3], HIGH);  } Delay (duration2 [thisNote]);  // Stopp für die nächste Note: speakerpin.stop ();  DigitalWrite (ledpin [0], LOW);  DigitalWrite (ledpin [1], LOW);  DigitalWrite (ledpin [2], LOW);  DigitalWrite (ledpin [3], LOW);  Verzögerung (25);  Verzögerung (1000);  } </ P> <p> void Schleife () {if (Turn == 0 && TurnEnable == 1) {lcd.setCursor (0, 0);  Lcd.print ( "Spieler 1 ist dran");  Lcd.setCursor (0, 1);  Lcd.print ( "Warten auf Spiel");  CurrentButtonState = digitalRead (buttonSelectPin);  If (currentButtonState == HIGH && lastButtonState == LOW) {gameChooser = 1;  TurnEnable = 0;  Lcd.clear ();  }} If (Turn == 1 && TurnEnable == 1) {lcd.setCursor (0, 0);  Lcd.print ( "Spieler 2 ist dran");  Lcd.setCursor (0, 1);  Lcd.print ( "Warten auf Spiel");  CurrentButtonState = digitalRead (buttonSelectPin);  If (currentButtonState == HIGH && lastButtonState == LOW) {gameChooser = 1;  TurnEnable = 0;  Lcd.clear ();  }} </ P> <p> if (gameChooser == 1) {gamePicker ();  } LastButtonState = currentButtonState; </ p> <p> // Simon Says if (ChoosenGame == 1) {lcd.setCursor (0, 0);  Lcd.print ( "Wiedergabe:");  Lcd.setCursor (0, 1);  Lcd.print ( "Simon Says");  Wenn (lebt == 0) {lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "ist Gameover!");  Failsound ();  Verzögerung (2500);  ChoosenGame = 0;  Turnss = 0;  TurnSwitch ();  } Else if (lebt == 5) {lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "erhielt einen Punkt!");  Verzögerung (2500);  SiegSound ();  ChoosenGame = 0;  Turnss = 0;  TurnSwitch ();  } Else {SimonSays ();  }} </ P> <p> // BuzzWire if (ChoosenGame == 2) {lcd.setCursor (0, 0);  Lcd.print ( "Wiedergabe:");  Lcd.setCursor (0, 1);  Lcd.print ( "BuzzWire");  Buzzwire ();  Wenn (lebt == 0) {lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "ist Gameover!");  Failsound ();  Verzögerung (2500);  ChoosenGame = 0;  TurnSwitch ();  } Else if (lebt == 5) {lcd.clear ();  Lcd.setCursor (0, 0);  Lcd.print ( "Spieler" + String (Umdrehung + 1));  Lcd.setCursor (0, 1);  Lcd.print ( "erhielt einen Punkt!");  Verzögerung (2500);  SiegSound ();  ChoosenGame = 0;  TurnSwitch ();  }}} </ P> <p> //////////////////////////////////////// ////////////////////////////// // // // Spielfunktionen // // // //// /////////////////////////////////////// ///////////// TurnSwitch () {if (Turn == 0) {Turn = 1;  TurnEnable = 1;  Leben = 3;  } Else if (Turn == 1) {Turn = 0;  TurnEnable = 1;  Leben = 3;  }} </ P> <p> void gamePicker () {int sensorValue = analogRead (A0);  // game kies menu if (sensorValue <500) {lcd.setCursor (0, 0);  // lcd.print ( "> Simon Says <");  Lcd.setCursor (0, 1);  Lcd.print ( "BuzzWire");  } Else if (sensorValue> 500) {lcd.setCursor (0, 0);  Lcd.print ( "> BuzzWire <");  Lcd.setCursor (0, 1);  Lcd.print ( "");  } </ P> <p> currentButtonState = digitalRead (buttonGCPin);  If (currentButtonState == HIGH && lastButtonState == LOW && sensorValue <500) {lcd.setCursor (0, 0);  Lcd.print ( "Starting");  Lcd.setCursor (0, 1);  Lcd.print ( "Simon Says");  Verzögerung (2000);  Lcd.clear ();  ChoosenGame = 1;  GameChooser = 0;  } Else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue> 500) {lcd.setCursor (0, 0);  Lcd.print ( "Starting");  Lcd.setCursor (0, 1);  Lcd.print ( "BuzzWire");  Verzögerung (2000);  Lcd.clear ();  ChoosenGame = 2;  GameChooser = 0;  } LastButtonState = currentButtonState;  } </ P> <p> void victorysound () {für (int thisNote = 0; thisNote <6; thisNote ++) {// die nächste Note spielen: speakerpin.play (note [thisNote]);  // Halten Sie die Notiz: delay (duration [thisNote]);  // Stopp für die nächste Note: speakerpin.stop ();  Verzögerung (25);  }} </ P> <p> void failsound () {für (int y = 0; y <= 2; y ++) {speakerpin.play (NOTE_G3, 300);  Verzögerung (200);  Speakerpin.play (NOTE_C3, 300);  Verzögerung (200);  }} </ P> <p> ///////////////////////////////////////// ///////////////////////////// // // Simon sagt Funktionen // // // //// /////////////////////////////////////// /////// SimonSays () {// für (int y = 0; y <= 99; y ++) // {</ p> </ / P> <p> // Funktion zum Generieren des Arrays, das vom Player digitalWrite (ledpin [0], HIGH) angepasst werden soll;  DigitalWrite (ledpin [1], HIGH);  DigitalWrite (ledpin [2], HIGH);  DigitalWrite (ledpin [3], HIGH); </ p> <p> für die folgende Anmerkung: speakerpin.play (note [thisNote]);  // Halten Sie die Notiz: delay (duration [thisNote]);  // Stopp für die nächste Note: speakerpin.stop ();  Verzögerung (25);  } </ P> <p> digitalWrite (ledpin [0], LOW);  DigitalWrite (ledpin [1], LOW);  DigitalWrite (ledpin [2], LOW);  DigitalWrite (ledpin [3], LOW);  Verzögerung (1000); </ p> <p> für (int y = turnss; y <= turnss; y ++) {// Eingeschränkt durch die Umdrehungsvariable Serial.println ( "");  // Einige serielle Ausgaben folgen auf Serial.print ( "Turn:");  Serial.print (y);  Serial.println ( "");  RandomArray [y] = zufällig (1, 5);  // Zuordnen einer Zufallszahl (1-4) zu dem randomArray [y], wobei y die Windungszahl für (int i = 0; i <= Windungen; i ++) {Serial.print (randomArray [i]); </ (P) <p> für (int y = 0, y <4; y ++) {</ p> <p> if (randomArray [i] == 1 && ledpin [y] == 22) display the stored values in the array digitalWrite(ledpin[y], HIGH); speakerpin.play(NOTE_G3, 100);  Verzögerung (400); digitalWrite(ledpin[y], LOW);  Verzögerung (100); }</p><p> if (randomArray[i] == 2 && ledpin[y] == 23) { digitalWrite(ledpin[y], HIGH); speakerpin.play(NOTE_A3, 100);  Verzögerung (400); digitalWrite(ledpin[y], LOW);  Verzögerung (100); }</p><p> if (randomArray[i] == 3 && ledpin[y] == 24) { digitalWrite(ledpin[y], HIGH); speakerpin.play(NOTE_B3, 100);  Verzögerung (400); digitalWrite(ledpin[y], LOW);  Verzögerung (100); }</p><p> if (randomArray[i] == 4 && ledpin[y] == 25) { digitalWrite(ledpin[y], HIGH); speakerpin.play(NOTE_C4, 100);  Verzögerung (400); digitalWrite(ledpin[y], LOW);  Verzögerung (100); } } } }0 input();</p><p> // }</p><p>}</p><p>void input() {</p><p> for (int i = 0; i <= turnss;) { for (int y = 0; y < 4; y++) {</p><p> buttonstate = digitalRead(button[y]);</p><p> if (buttonstate == LOW && button[y] == 26) { //Checking for button push digitalWrite(ledpin[0], HIGH); speakerpin.play(NOTE_G3, 100);  Verzögerung (200); digitalWrite(ledpin[0], LOW); inputArray[i] = 1;  Verzögerung (250);  Serial.print ( "");  Serial.print (1); if (inputArray[i] != randomArray[i]) { fail(); } i++; } if (buttonstate == LOW && button[y] == 27) { digitalWrite(ledpin[1], HIGH); speakerpin.play(NOTE_A3, 100);  Verzögerung (200); digitalWrite(ledpin[1], LOW); inputArray[i] = 2;  Verzögerung (250);  Serial.print ( "");  Serial.print (2); if (inputArray[i] != randomArray[i]) { fail(); } i++; }</p><p> if (buttonstate == LOW && button[y] == 28) { digitalWrite(ledpin[2], HIGH); speakerpin.play(NOTE_B3, 100);  Verzögerung (200); digitalWrite(ledpin[2], LOW); inputArray[i] = 3;  Verzögerung (250);  Serial.print ( ""); Serial.print(3); if (inputArray[i] != randomArray[i]) { fail(); } i++; }</p><p> if (buttonstate == LOW && button[y] == 29) { digitalWrite(ledpin[3], HIGH); speakerpin.play(NOTE_C4, 100);  Verzögerung (200); digitalWrite(ledpin[3], LOW); inputArray[i] = 4;  Verzögerung (250);  Serial.print ( ""); Serial.print(4); if (inputArray[i] != randomArray[i]) { fail(); } i++; } } } delay(500); turnss++; if (turnss == 4) { lives = 5; } }</p><p>void fail() {</p><p> for (int y = 0; y <= 2; y++) { //Flashes lights for failure</p><p> digitalWrite(ledpin[0], HIGH); digitalWrite(ledpin[1], HIGH); digitalWrite(ledpin[2], HIGH); digitalWrite(ledpin[3], HIGH); speakerpin.play(NOTE_G3, 300);  Verzögerung (200); digitalWrite(ledpin[0], LOW); digitalWrite(ledpin[1], LOW); digitalWrite(ledpin[2], LOW); digitalWrite(ledpin[3], LOW); speakerpin.play(NOTE_C3, 300);  Verzögerung (200);  Verzögerung (500); turnss--; lives--; Serial.println("Lives: " + String(lives)); }</p><p>//////////////////////////////////////////////////////////////////////// // // //BuzzWire Functions // // // ////////////////////////////////////////////////////////////////////////</p><p>void buzzwire() { BuzzHit = analogRead(wireRodPin);</p><p> if (BuzzHit > 1000) { Serial.println("lose hit"); digitalWrite(wireFeedbackPin, HIGH);  Verzögerung (1500); digitalWrite(wireFeedbackPin, LOW); lives--; } else { digitalWrite(wireFeedbackPin, LOW); } currentButtonState = digitalRead(buttonGCPin); if (currentButtonState == HIGH && lastButtonState == LOW) { Serial.println("win hit"); lives = 5; } lastButtonState = currentButtonState;  } </ P>

The code with the DLC:

 <p>//Vars for Gameloop<br>#include <LiquidCrystal.h> int gameChooser = 0; int ChoosenGame = 0; int Gamewin = 0; int scoreP1 = 0; int scoreP2 = 0; int Turn = 0;  LiquidCrystal lcd (7, 6, 5, 4, 3, 2); int buttonGCPin = 10; int buttonSelectPin = 11; int TurnEnable = 1; boolean currentButtonState = LOW; boolean lastButtonState = LOW;</p><p>//Vars for buzzwire int wireRodPin = A3; int wireFeedbackPin = 53; int BuzzHit = 0;</p><p>//Vars for wirepuller int wireOut1 = 31; int wireIn1 = 32; int wireOut2 = 33; int wireIn2 = 34; int wireOut3 = 35; int wireIn3 = 36; boolean current1 = LOW; boolean current2 = LOW; boolean current3 = LOW; boolean previous1 = LOW; boolean previous2 = LOW; boolean previous3 = LOW; int randNumber = 0;</p><p>//Vars for noisedetector int micPin = A2; int micValue = 0; int micCounter = 1; int micTimer = 0; int micSeconds = 0;</p><p>//Vars for quiz LiquidCrystal lcdquiz(44, 45, 46, 47, 48, 49); int buttonQuizPin = 52; boolean currentQuizButtonState = LOW; boolean lastQuizButtonState = LOW;</p><p>//Vars for Simon Says #include Tone speakerpin;</p><p>int starttune[] = {NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_C4, NOTE_F4, NOTE_G4, NOTE_F4, NOTE_E4, NOTE_F4, NOTE_G4}; int duration2[] = {100, 200, 100, 200, 100, 400, 100, 100, 100, 100, 200, 100, 500}; int note[] = {NOTE_C4, NOTE_C4, NOTE_G4, NOTE_C5, NOTE_G4, NOTE_C5}; int duration[] = {100, 100, 100, 300, 100, 300}; int button[] = {26, 27, 28, 29}; //Vier knop pins int ledpin[] = {22, 23, 24, 25}; // LED pins int turnss = 0; // turnss counter int buttonstate = 0; // button state checker int randomArray[100]; //Verschillende volgorde int inputArray[100];</p><p>//Global vars int lives = 3;</p><p>void setup() { Serial.begin(9600); lcd.begin(16, 2);</p><p> //GameLoop setup pinMode(buttonGCPin, INPUT); pinMode(buttonSelectPin, INPUT);</p><p> //Buzzwire setup pinMode(wireRodPin, INPUT); pinMode(wireFeedbackPin, OUTPUT);</p><p> //WirePuller Setup pinMode(wireOut1, OUTPUT); pinMode(wireIn1, INPUT); pinMode(wireOut2, OUTPUT); pinMode(wireIn2, INPUT); pinMode(wireOut3, OUTPUT); pinMode(wireIn3, INPUT); randomSeed(analogRead(A7));  RandNumber = random (3); randNumber++; Serial.println(randNumber);</p><p> //Noisedetector setup pinMode(micPin, INPUT);</p><p> //Quiz setup lcdquiz.begin(16, 2); pinMode(buttonQuizPin, INPUT);</p><p> // Simon Says Setup speakerpin.begin(30); // speaker op pin 10</p><p> for (int i = 0; i < 4; i++) { pinMode(ledpin[i], OUTPUT); }</p><p> for (int i = 0; i < 4; i++) { pinMode(button[i], INPUT); digitalWrite(button[i], HIGH); }</p><p> randomSeed(analogRead(15)); //Added to generate "more randomness" with the randomArray for the output function for (int thisNote = 0; thisNote < 13; thisNote ++) { // play the next note: speakerpin.play(starttune[thisNote]); // hold the note: if (thisNote == 0 || thisNote == 2 || thisNote == 4 || thisNote == 6) { digitalWrite(ledpin[0], HIGH); } if (thisNote == 1 || thisNote == 3 || thisNote == 5 || thisNote == 7 || thisNote == 9 || thisNote == 11) { digitalWrite(ledpin[1], HIGH); } if (thisNote == 8 || thisNote == 12) { digitalWrite(ledpin[2], HIGH); } if (thisNote == 10) { digitalWrite(ledpin[3], HIGH); } delay(duration2[thisNote]); // stop for the next note: speakerpin.stop(); digitalWrite(ledpin[0], LOW); digitalWrite(ledpin[1], LOW); digitalWrite(ledpin[2], LOW); digitalWrite(ledpin[3], LOW);  Verzögerung (25);  Verzögerung (1000); }</p><p>void loop() { if (Turn == 0 && TurnEnable == 1) { lcd.setCursor(0, 0); lcd.print("Player 1's turn");  Lcd.setCursor (0, 1); lcd.print("Waiting for game"); currentButtonState = digitalRead(buttonSelectPin); if (currentButtonState == HIGH && lastButtonState == LOW) { gameChooser = 1; TurnEnable = 0;  Lcd.clear (); } } if (Turn == 1 && TurnEnable == 1) { lcd.setCursor(0, 0); lcd.print("Player 2's turn");  Lcd.setCursor (0, 1); lcd.print("Waiting for game"); currentButtonState = digitalRead(buttonSelectPin); if (currentButtonState == HIGH && lastButtonState == LOW) { gameChooser = 1; TurnEnable = 0;  Lcd.clear (); } }</p><p> if (gameChooser == 1) { gamePicker(); } lastButtonState = currentButtonState;</p><p> //Simon Says if (ChoosenGame == 1) { lcd.setCursor(0, 0); lcd.print("Playing:");  Lcd.setCursor (0, 1); lcd.print("Simon Says"); if (lives == 0) { lcd.clear();  Lcd.setCursor (0, 0); lcd.print("Player " + String(Turn + 1));  Lcd.setCursor (0, 1); lcd.print("Is Gameover!"); failsound();  Verzögerung (2500); ChoosenGame = 0; turnss = 0; TurnSwitch(); } else if (lives == 5) { lcd.clear();  Lcd.setCursor (0, 0); lcd.print("Player " + String(Turn + 1));  Lcd.setCursor (0, 1); lcd.print("Gained a point!");  Verzögerung (2500); victorysound(); ChoosenGame = 0; turnss = 0; TurnSwitch(); } else { SimonSays(); } }</p><p> // WirePuller if (ChoosenGame == 2) { lcd.setCursor(0, 0); lcd.print("Playing:");  Lcd.setCursor (0, 1); lcd.print("Wirepuller"); wirepuller(); if (lives == 0) { lcdquiz.clear();  Lcd.clear ();  Lcd.setCursor (0, 0); lcd.print("Player " + String(Turn + 1));  Lcd.setCursor (0, 1); lcd.print("Is Gameover!"); failsound();  Verzögerung (2500); ChoosenGame = 0; TurnSwitch(); } else if (lives == 5) { lcdquiz.clear();  Lcd.clear ();  Lcd.setCursor (0, 0); lcd.print("Player " + String(Turn + 1));  Lcd.setCursor (0, 1); lcd.print("Gained a point!");  Verzögerung (2500); victorysound(); ChoosenGame = 0; TurnSwitch(); } } //BuzzWire if (ChoosenGame == 3) { lcd.setCursor(0, 0); lcd.print("Playing:");  Lcd.setCursor (0, 1); lcd.print("BuzzWire"); buzzwire(); if (lives == 0) { lcd.clear();  Lcd.setCursor (0, 0); lcd.print("Player " + String(Turn + 1));  Lcd.setCursor (0, 1); lcd.print("Is Gameover!"); failsound();  Verzögerung (2500); ChoosenGame = 0; TurnSwitch(); } else if (lives == 5) { lcd.clear();  Lcd.setCursor (0, 0); lcd.print("Player " + String(Turn + 1));  Lcd.setCursor (0, 1); lcd.print("Gained a point!");  Verzögerung (2500); victorysound(); ChoosenGame = 0; TurnSwitch(); } } //NoiseDetector if (ChoosenGame == 4) { lcd.setCursor(0, 0); lcd.print("Playing:");  Lcd.setCursor (0, 1); lcd.print("Noisedetector"); noisedetector(); if (lives == 0) { lcd.clear();  Lcd.setCursor (0, 0); lcd.print("Player " + String(Turn + 1));  Lcd.setCursor (0, 1); lcd.print("Is Gameover!"); failsound();  Verzögerung (2500); ChoosenGame = 0; TurnSwitch(); } else if (lives == 5) { lcd.clear();  Lcd.setCursor (0, 0); lcd.print("Player " + String(Turn + 1));  Lcd.setCursor (0, 1); lcd.print("Gained a point!");  Verzögerung (2500); victorysound(); ChoosenGame = 0; TurnSwitch(); } } //Quiz if (ChoosenGame == 5) { quiz(); if (lives == 0) { lcd.clear(); lcdquiz.clear();  Lcd.setCursor (0, 0); lcd.print("Player " + String(Turn + 1));  Lcd.setCursor (0, 1); lcd.print("Is Gameover!"); failsound();  Verzögerung (2500); ChoosenGame = 0; TurnSwitch(); } else if (lives == 5) { lcd.clear(); lcdquiz.clear();  Lcd.setCursor (0, 0); lcd.print("Player " + String(Turn + 1));  Lcd.setCursor (0, 1); lcd.print("Gained a point!");  Verzögerung (2500); victorysound(); ChoosenGame = 0; TurnSwitch(); } } }</p><p>//////////////////////////////////////////////////////////////////////// // // //Game Functions // // // ////////////////////////////////////////////////////////////////////////</p><p>void TurnSwitch() { if (Turn == 0) { Turn = 1; TurnEnable = 1; lives = 3; } else if (Turn == 1) { Turn = 0; TurnEnable = 1; lives = 3; } }</p><p>void gamePicker() { int sensorValue = analogRead(A0); //game kies menu if (sensorValue < 200) { lcd.setCursor(0, 0); // lcd.print(">Simon Says< ");  Lcd.setCursor (0, 1); lcd.print("WirePuller "); } else if (sensorValue > 200 && sensorValue < 400) { lcd.setCursor(0, 0); lcd.print(">WirePuller< ");  Lcd.setCursor (0, 1); lcd.print("BuzzWire "); } else if (sensorValue > 400 && sensorValue < 600) { lcd.setCursor(0, 0); lcd.print(">BuzzWire< ");  Lcd.setCursor (0, 1); lcd.print("NoiseDetector "); } else if (sensorValue > 600 && sensorValue < 800) { lcd.setCursor(0, 0); lcd.print(">NoiseDetector< ");  Lcd.setCursor (0, 1); lcd.print("Quiz "); } else if (sensorValue > 800) { lcd.setCursor(0, 0); lcd.print(">Quiz< ");  Lcd.setCursor (0, 1);  Lcd.print ( ""); }</p><p> currentButtonState = digitalRead(buttonGCPin); if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue < 200) { lcd.setCursor(0, 0); lcd.print("Starting: ");  Lcd.setCursor (0, 1); lcd.print("Simon Says ");  Verzögerung (2000);  Lcd.clear (); ChoosenGame = 1; gameChooser = 0; } else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue > 200 && sensorValue < 400) { lcd.setCursor(0, 0); lcd.print("Starting: ");  Lcd.setCursor (0, 1); lcd.print("WirePuller ");  Verzögerung (2000);  Lcd.clear (); ChoosenGame = 2; gameChooser = 0; } else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue > 400 && sensorValue < 600) { lcd.setCursor(0, 0); lcd.print("Starting: ");  Lcd.setCursor (0, 1); lcd.print("BuzzWire ");  Verzögerung (2000);  Lcd.clear (); ChoosenGame = 3; gameChooser = 0; } else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue > 600 && sensorValue < 800) { lcd.setCursor(0, 0); lcd.print("Starting: ");  Lcd.setCursor (0, 1); lcd.print("NoiseDetector ");  Verzögerung (2000);  Lcd.clear (); ChoosenGame = 4; gameChooser = 0; } else if (currentButtonState == HIGH && lastButtonState == LOW && sensorValue > 800) { lcd.setCursor(0, 0); lcd.print("Starting: ");  Lcd.setCursor (0, 1); lcd.print("Quiz ");  Verzögerung (2000);  Lcd.clear (); ChoosenGame = 5; gameChooser = 0; } lastButtonState = currentButtonState; }</p><p>void victorysound() { for (int thisNote = 0; thisNote < 6; thisNote ++) { // play the next note: speakerpin.play(note[thisNote]); // hold the note: delay(duration[thisNote]); // stop for the next note: speakerpin.stop();  Verzögerung (25); } }</p><p>void failsound() { for (int y = 0; y <= 2; y++) { speakerpin.play(NOTE_G3, 300);  Verzögerung (200); speakerpin.play(NOTE_C3, 300);  Verzögerung (200); } }</p><p>//////////////////////////////////////////////////////////////////////// // // //Simon Says Functions // // // ////////////////////////////////////////////////////////////////////////</p><p>void SimonSays() { // for (int y = 0; y <= 99; y++) // {</p><p> //function for generating the array to be matched by the player digitalWrite(ledpin[0], HIGH); digitalWrite(ledpin[1], HIGH); digitalWrite(ledpin[2], HIGH); digitalWrite(ledpin[3], HIGH);</p><p> for (int thisNote = 0; thisNote < 6; thisNote ++) { // play the next note: speakerpin.play(note[thisNote]); // hold the note: delay(duration[thisNote]); // stop for the next note: speakerpin.stop();  Verzögerung (25); }</p><p> digitalWrite(ledpin[0], LOW); digitalWrite(ledpin[1], LOW); digitalWrite(ledpin[2], LOW); digitalWrite(ledpin[3], LOW); delay(1000);</p><p> for (int y = turnss; y <= turnss; y++) { //Limited by the turnss variable Serial.println(""); //Some serial output to follow along Serial.print("Turn: ");  Serial.print (y);  Serial.println ( ""); randomArray[y] = random(1, 5); //Assigning a random number (1-4) to the randomArray[y], y being the turnss count for (int i = 0; i <= turnss; i++) { Serial.print(randomArray[i]);</p><p> for (int y = 0; y < 4; y++) {</p><p> if (randomArray[i] == 1 && ledpin[y] == 22) { //if statements to display the stored values in the array digitalWrite(ledpin[y], HIGH); speakerpin.play(NOTE_G3, 100);  Verzögerung (400); digitalWrite(ledpin[y], LOW);  Verzögerung (100); }</p><p> if (randomArray[i] == 2 && ledpin[y] == 23) { digitalWrite(ledpin[y], HIGH); speakerpin.play(NOTE_A3, 100);  Verzögerung (400); digitalWrite(ledpin[y], LOW);  Verzögerung (100); }</p><p> if (randomArray[i] == 3 && ledpin[y] == 24) { digitalWrite(ledpin[y], HIGH); speakerpin.play(NOTE_B3, 100);  Verzögerung (400); digitalWrite(ledpin[y], LOW);  Verzögerung (100); }</p><p> if (randomArray[i] == 4 && ledpin[y] == 25) { digitalWrite(ledpin[y], HIGH); speakerpin.play(NOTE_C4, 100);  Verzögerung (400); digitalWrite(ledpin[y], LOW);  Verzögerung (100); } } } }0 input();</p><p> // }</p><p>}</p><p>void input() {</p><p> for (int i = 0; i <= turnss;) { for (int y = 0; y < 4; y++) {</p><p> buttonstate = digitalRead(button[y]);</p><p> if (buttonstate == LOW && button[y] == 26) { //Checking for button push digitalWrite(ledpin[0], HIGH); speakerpin.play(NOTE_G3, 100);  Verzögerung (200); digitalWrite(ledpin[0], LOW); inputArray[i] = 1;  Verzögerung (250);  Serial.print ( "");  Serial.print (1); if (inputArray[i] != randomArray[i]) { fail(); } i++; } if (buttonstate == LOW && button[y] == 27) { digitalWrite(ledpin[1], HIGH); speakerpin.play(NOTE_A3, 100);  Verzögerung (200); digitalWrite(ledpin[1], LOW); inputArray[i] = 2;  Verzögerung (250);  Serial.print ( "");  Serial.print (2); if (inputArray[i] != randomArray[i]) { fail(); } i++; }</p><p> if (buttonstate == LOW && button[y] == 28) { digitalWrite(ledpin[2], HIGH); speakerpin.play(NOTE_B3, 100);  Verzögerung (200); digitalWrite(ledpin[2], LOW); inputArray[i] = 3;  Verzögerung (250);  Serial.print ( ""); Serial.print(3); if (inputArray[i] != randomArray[i]) { fail(); } i++; }</p><p> if (buttonstate == LOW && button[y] == 29) { digitalWrite(ledpin[3], HIGH); speakerpin.play(NOTE_C4, 100);  Verzögerung (200); digitalWrite(ledpin[3], LOW); inputArray[i] = 4;  Verzögerung (250);  Serial.print ( ""); Serial.print(4); if (inputArray[i] != randomArray[i]) { fail(); } i++; } } } delay(500); turnss++; if (turnss == 4) { lives = 5; } }</p><p>void fail() {</p><p> for (int y = 0; y <= 2; y++) { //Flashes lights for failure</p><p> digitalWrite(ledpin[0], HIGH); digitalWrite(ledpin[1], HIGH); digitalWrite(ledpin[2], HIGH); digitalWrite(ledpin[3], HIGH); speakerpin.play(NOTE_G3, 300);  Verzögerung (200); digitalWrite(ledpin[0], LOW); digitalWrite(ledpin[1], LOW); digitalWrite(ledpin[2], LOW); digitalWrite(ledpin[3], LOW); speakerpin.play(NOTE_C3, 300);  Verzögerung (200);  Verzögerung (500); turnss--; lives--; Serial.println("Lives: " + String(lives)); }</p><p>//////////////////////////////////////////////////////////////////////// // // //WirePuller Functions // // // ////////////////////////////////////////////////////////////////////////</p><p>void wirepuller() { digitalWrite(wireOut1, HIGH); digitalWrite(wireOut2, HIGH); digitalWrite(wireOut3, HIGH); current1 = digitalRead(wireIn1); current2 = digitalRead(wireIn2); current3 = digitalRead(wireIn3); Serial.println(String(current1) + " " + String(previous1)); Serial.println(String(current2) + " " + String(previous2)); Serial.println(String(current3) + " " + String(previous3));  Serial.println (randNumber); if (current1 == previous1 && randNumber == 1) { Serial.println("le eerste win"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the right wire");  Verzögerung (2500); lcdquiz.clear(); lives = 5; } else if (current1 == previous1) { Serial.println("le eerste"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the wrong wire");  Verzögerung (2500); lcdquiz.clear(); lives = 0; } if (current2 == previous2 && randNumber == 2) { Serial.println("le tweetste win"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the right wire");  Verzögerung (2500); lcdquiz.clear(); lives = 5; } else if (current2 == previous2) { Serial.println("le tweeste"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the wrong wire");  Verzögerung (2500); lcdquiz.clear(); lives = 0; } if (current3 == previous3 && randNumber == 3) {</p><p> Serial.println("le drieste win"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the right wire");  Verzögerung (2500); lcdquiz.clear(); lives = 5; } else if (current3 == previous3) { Serial.println("le drieste"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the wrong wire");  Verzögerung (2500); lcdquiz.clear(); lives = 0; } previous1 = current1; previous2 = current2; previous3 = current3; digitalWrite(wireOut1, LOW); digitalWrite(wireOut2, LOW); digitalWrite(wireOut3, LOW); current1 = digitalRead(wireIn1); current2 = digitalRead(wireIn2); current3 = digitalRead(wireIn3); if (current1 == previous1 && randNumber == 1) { Serial.println("le eerste win check 2"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the right wire");  Verzögerung (2500); lcdquiz.clear(); lives = 5; } else if (current1 == previous1) { Serial.println("le eerste check 2"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the wrong wire");  Verzögerung (2500); lcdquiz.clear(); lives = 0; } if (current2 == previous2 && randNumber == 2) { Serial.println("le tweerste win check 2"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the right wire");  Verzögerung (2500); lcdquiz.clear(); lives = 5; } else if (current2 == previous2) { Serial.println("le tweerste check 2"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the wrong wire");  Verzögerung (2500); lcdquiz.clear(); lives = 0; } if (current3 == previous3 && randNumber == 3) {</p><p> Serial.println("le driederste win check 2"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the right wire");  Verzögerung (2500); lcdquiz.clear(); lives = 5; } else if (current3 == previous3){ Serial.println("le driederste check 2"); lcdquiz.clear(); lcdquiz.setCursor(0, 0); lcdquiz.print("You pulled"); lcdquiz.setCursor(0, 1); lcdquiz.print("the wrong wire");  Verzögerung (2500); lcdquiz.clear(); lives = 0; } previous1 = current1; previous2 = current2; previous3 = current3; }</p><p>//////////////////////////////////////////////////////////////////////// // // //BuzzWire Functions // // // ////////////////////////////////////////////////////////////////////////</p><p>void buzzwire() { BuzzHit = analogRead(wireRodPin);</p><p> if (BuzzHit > 1000) { Serial.println("lose hit"); digitalWrite(wireFeedbackPin, HIGH);  Verzögerung (1500); digitalWrite(wireFeedbackPin, LOW); lives--; } else { digitalWrite(wireFeedbackPin, LOW); } currentButtonState = digitalRead(buttonGCPin); if (currentButtonState == HIGH && lastButtonState == LOW) { Serial.println("win hit"); lives = 5; } lastButtonState = currentButtonState; }</p><p> ////////////////////////////////////////////////////////////////////////// // //NoiseDetector Functions // // // ////////////////////////////////////////////////////////////////////////void noisedetector() { lcdquiz.setCursor(0, 0); lcdquiz.print("GO GO GO!"); if (micSeconds > 10) { lcdquiz.setCursor(0, 0); lcdquiz.print("You lose!"); micTimer = 0; micCounter = 0; micSeconds = 0;  Verzögerung (1000); lives = 0; lcdquiz.clear(); } else { if (micCounter > 500) { micCounter = 0; micTimer = 0; micSeconds = 0; lcdquiz.setCursor(0, 0); lcdquiz.print("You win!");  Verzögerung (1000); lives = 5; lcdquiz.clear(); } micValue = analogRead(micPin); Serial.println(micValue); if (micValue > 95) { micCounter++; lcdquiz.setCursor(0, 1); lcdquiz.print(micCounter); } micTimer++; if (micTimer == 150) { micSeconds++ ; micTimer = 0; } } } //////////////////////////////////////////////////////////////////////// // // //Quiz Functions // // // //////////////////////////////////////////////////////////////////////// </p><p>void quiz() { int sensorValue = analogRead(A1);  Lcd.setCursor (0, 0); lcd.print("How old is");  Lcd.setCursor (0, 1); lcd.print("Floris?"); if (sensorValue < 250) { lcdquiz.setCursor(0, 0); // lcdquiz.print(">20< 21 "); lcdquiz.setCursor(0, 1); lcdquiz.print(" 22 23 "); } else if (sensorValue > 250 && sensorValue < 500) { lcdquiz.setCursor(0, 0); lcdquiz.print(" 20 >21< "); lcdquiz.setCursor(0, 1); lcdquiz.print(" 22 23 "); } else if (sensorValue > 500 && sensorValue < 750) { lcdquiz.setCursor(0, 0); lcdquiz.print(" 20 21 "); lcdquiz.setCursor(0, 1); lcdquiz.print(">22< 23 "); } else if (sensorValue > 750) { lcdquiz.setCursor(0, 0); lcdquiz.print(" 20 21 "); lcdquiz.setCursor(0, 1); lcdquiz.print(" 22 >23< "); }</p><p> currentQuizButtonState = digitalRead(buttonQuizPin); if (currentQuizButtonState == HIGH && lastQuizButtonState == LOW && sensorValue > 750) { lcd.clear();  Lcd.setCursor (0, 0);  Lcd.print ( "Richtig!");  Verzögerung (2500); lives = 5; } else if (currentQuizButtonState == HIGH && lastQuizButtonState == LOW && sensorValue < 750) { lcd.clear();  Lcd.setCursor (0, 0);  Lcd.print ( "Falsch!");  Lcd.setCursor (0, 1); lcd.print("Try again!");  Verzögerung (2500);  Lcd.clear (); lives--; } lastQuizButtonState = currentQuizButtonState;  </ P>

Step 17: Making the case

Smart-Brettspiel

Now it is time for a case to put all of the parts in. I made a case with www.makercase.com and adapted the top to fit all of our games. First we created a sketch of the playing field. This is the picture above. Then i started to make the laserprinting planns. The entire case is 400x300x100 that is the size for the entire module.

Step 18: Making the case - Cutting the case

Here are the laser cutting plans for the case. These plans are made for 3MM triplex wood. The minimal size for the plate of wood is 400x700 if you're using a smaller piece of wood you will have to move some stuff around.

Note: its important to remove the bottom hole if you are making the no dlc version in the .ai file before you lasercut the case. Otherwise you will have a hole that serves no purpose.

Step 19: Marking the board.

Smart-Brettspiel

Smart-Brettspiel

When you are done with lasercutting the case and you have put it together you can make the playing field. We chose a figure 8 playing field but the choise is yours. The rest of the led and games must be assigned asswell. you can choose your own place for these modules. we chose to put them in the corners. For the led is a 5mm drill bit fine. the led's will go in fine with a little pressure.

Schritt 20: Alles zusammenstellen

Smart-Brettspiel

when you are done with creating the case and the board. you are ready to put it all together. start by putting in the screen and the other parts that need to be screwed down. when you have all of those parts fitted into the cover start putting your arduino inside. You need to see what setup of arduino works best for you. The picture above is how my gamecase looks from the inside and its a mess. i suggest sorting the wire's and wrapping the wires together if possible it saves you a lot of irritation.

Step 21: The finished product

Smart-Brettspiel

When it its finished the game should look something like this. If you have any questions regarding the game feel free to ask them in the comments.

Related Reading