Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Maak een Arduino-geheugenspel

Componenten en benodigdheden

Arduino UNO
× 1
SparkFun 330 ohm weerstanden
we hebben er maar 4 nodig
× 1
SparkFun 10k ohm weerstanden
we hebben er maar 4 nodig
× 1
SparkFun Diverse LED's
we hebben 4 LED's van verschillende kleuren nodig
× 1
SparkFun Mini-luidspreker
Je kunt zonder dit als je niet om het geluid geeft
× 1
SparkFun Breadboard (volledig formaat)
× 1
Jumperdraden (algemeen)
× 1

Apps en online services

Arduino IDE

Over dit project

Herinner je je het spel "Simon" nog? Veel mensen van mijn leeftijd (geboren in de jaren 70) moesten veel tijd verliezen met het spelen ervan. Het spel was eenvoudig, het had 4 knoppen van verschillende kleuren die in volgorde zouden oplichten en je moest de volgorde herhalen. Elke keer dat je het goed had, zou het spel je de reeks opnieuw geven met een extra kleur aan het einde.

Ik heb er lang geleden een gekregen voor Kerstmis, maar toen bewoog ik en bewoog, en bewoog nog wat meer, zodat het spel verloren ging in een van de vele dozen die nooit van de ene verhuizing naar de andere worden uitgepakt...

Als "volwassene" ontdekte ik de geneugten van Arduino en kreeg daarmee de kans om mijn lang verloren tijdverspillende vriend nieuw leven in te blazen.

Deze tutorial laat je zien hoe je een soortgelijk spel kunt maken met een Arduino Uno, een paar LED's en weerstanden en een relatief eenvoudig circuit.

Het programma zelf is misschien een beetje ingewikkeld voor een beginner, dus ik heb geprobeerd in de code uit te leggen wat het doet en hoe.

De eenvoudigste manier om dit spel te laten draaien is dit.

1) Sluit de schakeling precies aan zoals aangegeven op het schema. De kleur van de draden is niet relevant, dus als je geen zwarte draden meer hebt, is het goed. :)

2) Plak de broncode in je favoriete Arduino-editor en upload deze naar het bord

3) Speel het spel

Het spel begint na ongeveer 3 seconden met 5 langzame flitsen van alle LED's.

Als een of meer LED's niet knipperen, controleer dan de bedrading. Op mijn bord zitten de hele kleine knoppen niet altijd goed en hebben ze de neiging om eruit te springen.

Als de bedrading er goed uitziet, probeer dan een werkende led te inverteren met een niet werkende led om te zien of het de bedrading is of de led zelf.

Nadat de 5 flitsen zijn voltooid, gaat er één LED branden. Ik kan je niet zeggen welke, het is een verrassing :) Druk op de knop voor die LED. Deze LED gaat weer branden, gevolgd door een nieuwe. Druk achtereenvolgens op de juiste knoppen... Je ziet waar ik daarmee naartoe wil...

Dan, vrij snel, zie je ze allemaal snel flitsen. Dat betekent dat je hebt verloren. :D

De laatste reeks die je hebt gekregen, wordt afgespeeld, zodat je je punten kunt tellen, gevolgd door de 5 langzame knipperingen van eerder om aan te geven dat het spel opnieuw begint.

Je hebt 2 seconden om op elke knop te drukken.

Daar ga je! Veel plezier!

Wil je het wat moeilijker maken? Waarom verandert u de bovenste regel in de code niet in een andere waarde?

#define PLAYER_WAIT_TIME 2000  

Of je kunt nog een LED toevoegen, als je die hebt... Hiervoor moet je eerst dit deel van de schakeling reproduceren:

De oranje draad hier gaat naar elke ongebruikte pin op je Arduino (vermijd echter 0 en 1)

Pas vervolgens de volgende regels in de code aan:

byte noPins =4byte pinnen [] ={2, 13, 10, 8};  

als je één LED op pin 6 zou toevoegen, zou de code

. worden
byte noPins =pinnen van 5 bytes [] ={2, 13, 10, 8, 6};  

Een kleine tip voor het schrijven van Arduino-code:

void setup() { delay(3000); Serieel.begin(9600); Opnieuw instellen(); }  

Zet een korte vertraging als eerste statement van je setup() functie. Het is heel gemakkelijk om de Arduino in een oneindige lus te laten gaan of hem op de een of andere manier te vergrendelen. Als dat gebeurt, kun je met die korte vertraging je Arduino resetten en een lege schets uploaden voordat deze weer vastloopt. .

Uiteindelijk nam ik dit ideetje en maakte het draagbaar...

Als je een heel cool idee wilt zien voor een vergelijkbaar (maar veel geavanceerder) spel. Check deze https://www.instructables.com/id/Lego-Mini-Memory-Game van Peter Kent. Hij maakte de game op mobiel met een interface naar een Lego-auto. Het is echt geweldig!

Code

  • Geheugenspelcode
GeheugenspelcodeArduino
Dit is de volledige code voor het spel. Kopieer en plak het eenvoudig in uw favoriete IDE en upload het naar de Arduino.
#define PLAYER_WAIT_TIME 2000 // De toegestane tijd tussen het indrukken van de knop - 2s bytereeks [100]; // Opslag voor de lichte sequencebyte curLen =0; // Huidige lengte van de sequencebyte inputCount =0; // Het aantal keren dat de speler een (juiste) knop heeft ingedrukt in een bepaalde beurt byte lastInput =0; // Laatste invoer van de playerbyte expRd =0; // De LED die verondersteld wordt te worden verlicht door de playerbool btnDwn =false; // Wordt gebruikt om te controleren of een knop is ingedrukt bool wait =false; // Wacht het programma totdat de gebruiker op een buttonbool drukt resetFlag =false; // Gebruikt om aan het programma aan te geven dat de speler soundPin =5 heeft verloren; // Luidsprekeruitgangsbyte noPins =4; // Aantal knoppen/LED's (Terwijl ik hieraan werkte, gebruikte ik slechts 2 LED's) // Je zou het spel moeilijker kunnen maken door een extra combinatie van LED/knop/weerstanden toe te voegen.byte pinnen [] ={2, 13, 10 , 8}; // Knopinvoerpinnen en LED-uitvoerpinnen - verander deze waarden als u uw knoppen met andere pinnen wilt verbinden // Het aantal elementen moet overeenkomen met noPins onder long inputTime =0; // Timervariabele voor de vertraging tussen gebruikersinvoervoid setup () {delay (3000); // Dit is om me tijd te geven om te ademen na verbinding met de arduino - kan worden verwijderd als je wilt Serial.begin (9600); // Start seriële monitor. Dit kan ook worden verwijderd zolang u alle verwijzingen naar Serieel onder Reset();}////// Stelt alle pinnen in als INPUT of OUTPUT op basis van de waarde van 'dir'///void setPinDirection(byte dir){ for(byte i =0; i  snel | groot getal -> slow///void flash (korte freq) { setPinDirection (OUTPUT); /// We activeren de LEDS nu voor (int i =0; i <5; i++) {writeAllPins(HIGH); piep (50); vertraging (frequentie); schrijfAllePins (LAAG); vertraging (frequentie); }}//////Deze functie zet alle spelvariabelen terug naar hun standaardwaarden///void Reset(){ flash(500); krullen =0; inputCount =0; laatste invoer =0; expRd =0; btnDwn =onwaar; wacht =onwaar; resetFlag =false;}////// Gebruiker verloren///void Lose(){ flash(50); }////// De arduino laat de gebruiker zien wat moet worden onthouden/// Wordt ook genoemd na het verliezen om je te laten zien wat je laatste reeks was///void playSequence(){ // Loop door de opgeslagen reeks en steek de juiste LED's op hun beurt for(int i =0; i  PLAYER_WAIT_TIME){ // Als de speler meer tijd nodig heeft dan de toegestane tijd, DoLoseProcess(); // Alles is verloren :( return; } if(!btnDwn){ // expRd =sequence[inputCount]; // Vind de waarde die we van de speler verwachten Serial.print("Expected:"); // Serial Monitor Output - Moet worden verwijderd als u de Serial.begin hierboven hebt verwijderd Serial.println(expRd); // Serial Monitor Output - Moet worden verwijderd als u de Serial.begin hierboven hebt verwijderd for (int i =0; i   

Schema's

simonsays_siKds3Jmk2.fzz

Productieproces

  1. Maak Monitor Ambilight met Arduino
  2. Arduino-gyroscoopspel met MPU-6050
  3. Gyroscoopplezier met NeoPixel Ring
  4. Arduino Pong Game - OLED-scherm
  5. Arduino-gamecontroller
  6. Arduino Touch Breakout-spel
  7. Pixie:een op Arduino gebaseerd NeoPixel-polshorloge
  8. Pixel Chaser-game
  9. Geautomatiseerd Dino-spel met arduino
  10. Mobiele bewakingscamera op afstand
  11. Smart Hand Glove