Arduino Memory Game

Introducere

Proiectul reprezinta un joc de memorie bazat pe o placa Arduino Uno, impreuna cu un display LCD folosit pentru afisarea scorului. Jocul utilizeaza componente simple (LED-uri, butoane si un buzzer) si ofera o modalitate prin care jucatorii isi pot testa memoria vizuala.

Ideea a pornit de la nostalgia pentru jocurile “clasice” care au marcat copilaria multora, dar am considerat si ca dezvoltarea acestui proiect ar putea reprezenta o provocare interesanta.

Descriere generală

Jocul incepe cu aprinderea unui LED si buzzer-ul emite un sunet corespunzator. Apoi, jucatorul trebuie sa apese butonul corespunzator LED-ului activat. Pe masura ce jocul avanseaza, se adauga noi LED-uri in secventa, iar jucatorul trebuie sa recreeze secventa. Pe display va fi afisat scorul, fiecare secventa corecta marind scorul cu 1. Jocul se termina fie cand jucatorul reuseste sa completeze o secventa de 10 LED-uri, fie cand jucatorul greseste. Daca jucatorul completeaza corect toate secventele, pe display va fi afisat un mesaj ce arata castigul, urmat de aprinderea rapida a tuturor LED-urilor si o melodie la buzzer. Daca jucatorul greseste, buzzer-ul va reda un ton grav iar LED-urile se vor aprinde de doua ori.

Hardware Design

Piese:

  • Arduino Uno
  • 4 LED-uri
  • rezistente
  • buzzer
  • 4 butoane
  • display LED cu interfata I2C
  • cabluri jumper
  • breadboard

Schema electrica

Software Design

Pentru acest proiect, am folosit Arduino IDE. Am folosit bibliotecile “Wire.h” pentru comunicarea I2C si “LiquidCrystal_I2.hC”, pentru ecranul LCD.

Am implementat functia playTone() care este o functie de redare a tonurilor si genereaza un ton de o anumita frecventa si durata.

Functia setup() initializeaza LCD-ul, pinii si genereaza un seed pentru numerele aleatorii ce vor fi folosite in continuare. Seed-ul este setat la valoarea analogica citita de la pinul 0, care nu este conectat la nimic, deci valoarea citita va varia de fiecare data din cauza zgomotului electric.

Functia loop() este responsabila pentru logica principala a jocului. Are mai multe parti: initializarea unui joc nou, afisarea secventei de LED-uri, detectarea inputului de la jucator si verificarea, gestionarea castigurilor si pierderilor.

Rezultate Obţinute

Am implementat jocul cu succes. LED-urile se aprind corect, buzzer-ul emite tonuri diferite asociate cu fiecare LED.

Scorul jucatorului este afisat corect pe ecranul LCD. De fiecare data cand jucatorul completeaza o secventa corecta, scorul este incrementat si afisat pe ecran. La sfarsitul jocului, este afisat mesajul corespunzator castigului/pierderii.

LED-urile se aprind in secvente tot mai complexe. In cazul unei greseli, buzzer-ul reda un ton grav si toate LED-urile se aprind pentru a semnala pierderea. Jocul se reseteaza automat.

Daca jucatorul reuseste sa completeze 10 secvente corect, buzzer-ul reda o melodie de victorie si toate LED-urile se aprind rapid.

Am testat LED-urile pentru a ma asigura ca se aprind si sting corespunzator. La fel si pentru buzzer.

Concluzii

Acest proiect a fost o experienta foarte placuta si interesanta pentru mine. Am reusit sa aplic ce invatasem la laboratoare si mi-am dezvoltat o intelegere mai profunda a componentelor hardware si a progamarii unui astfel de joc. Cea mai satisfacatoare parte a fost sa vad cum incet incet proiectul meu prindea viata. Mai intai LED-urile se aprindeau in secvente corecte, buzzer-ul emitea tonuri potrivite si scorul era afisat pe LCD. Acest proiect mi-a amintit si de bucuria pe care o simteam in copilarie cand jucam jocuri similare. A fost o adevarata aventura sa implementez un joc pe care doar il jucasem cu multi ani in urma.

Download

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

Bibliografie/Resurse

pm/prj2024/apredescu/vodoiu.antonia.txt · Last modified: 2024/05/27 11:53 by antonia.vodoiu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0