Memory Game

Introducere

Proiectul are scop educational si de divertisment prin redarea unor secvente de culori si sunete pe care utilizatorul le memoreaza, urmand a le repeta. Lungimea secventelor creste de la un nivel la altul.

Descriere generală

Proiectul include doua moduri de joc:

  • Easy - Secventa este redata prin aprinderea led-urilor impreuna cu sunetul asociat fiecarui led.
  • Hard - Secventa este redata doar prin sunet, led-urile ramanand stinse atunci cand aceasta este transmisa utilizatorului.

Utilizatorul va apasa butonul corespunzator led-ului pentru a il activa. Acesta trebuie sa respecte secventa primita la inceputul rundei. In cazul in care utilizatorul greseste jocul ia sfarsit iar led-urile vor ramane aprinse pentru a anunta acest lucru.

Scorul, inceperea jocului, cat si finalizarea jocului sunt afisate si in Serial monitor, in IDE-ul Arduino.

Hardware Design

Lista de piese

  • Arduino UNO
  • Led-uri
  • Buzzer
  • Butoane de tip push
  • Fire
  • Breadboard

Software Design

Am folosit 4 LED-uri, prin intermediul pinilor 11, 10, 9 si 8.

Cele 4 butoane de tip push sunt conectate la pinii 7, 6, 5, 4 si, in acelasi timp, la pin-ul 2 (comun tuturor) prin care sunt activate intreruperile. AStfel, comanda attachInterrupt(digitalPinToInterrupt(commonPin), pressInterrupt, FALLING); ataseaza functia pressInterrupt ce beneficiaza de un debounce de 200 de milisecunde pentru a evita apasarea concomitenta a doua butoane. Pentru a nu utiliza delay-uri in cadrul intreruperilor, vom pastra index-ul butonului apasat in interruptIndex, urmand a fi procesat in cadrul functiei loop.

Modul de joc (dificil sau usor) este pastrat in prin intermediul variabilei easyMode, a carei valori este 1 pentru nivelul usor (se aprind si led-urile si este emis si sunetul) sau 0 pentru nivelul dificil (led-urile raman stinse si este redat doar sunetul).

Secventa este generata prin intermediul functiei random() iar ordinea elementelor este pastrata in array-ul ledseq. Variabila isPlaying controleaza daca se asteapta input de la jucator (in cazul in care variabila este setata la 1) sau daca este redata secventa de culori si sunete (in cazul in care este setata la 0).

Verificarea input-ului este realizata la fiecare apasare de buton. In cazul in care a fost selectata ordinea corecta va fi generat un nou element ce se va adauga la secventa. In caz contrar, cele patru becuri se vor aprinde pentru a semnala utilizatorul ca jocul a luat sfarsit.

Atat nivelul curent cat si semnalizarea inceperii si finalizarii jocului sunt redate in serial monitor.

Rezultate Obţinute

Poze

Demo

Demo - nivel dificultate usor

https://www.youtube.com/watch?v=oi-Eb4Q0WPc

Demo - nivel dificultate greu

https://www.youtube.com/watch?v=GlC9icotdHo

Concluzii

In concluzie, proiectul a fost unul din care am invatat multe lucruri noi: de la configurarea a mai multe butoane, folosind intreruperi, prin intermediul unuia din cei doi pini ce ofera intreruperi pe Arduino UNO (Pinii 2 si 3), la cum un LED asezat invers poate duce la o ora de debugging. Astfel, proiectul a reusit sa imi aduca o experienta frumoasa cand vine vorba de lucrul cu microprocesoare si ma provoaca sa incerc noi lucruri in viitor, folosind bazele deja acumulate. Din punct de vedere al problemelor intampinate, numarul de pini disponibili pe un Arduino UNO nu a permis atasarea unui display ce necesita un numar mare de pini pentru a functiona.

Download

Jurnal

Alegerea temei proiectului: 18 aprilie 2022

Analiza schemei bloc: 21 aprilie 2022

Alegerea componentelor: 21 aprilie 2022

Inceperea implementarii: 24 aprilie 2022

Finalizarea proiectului: 21 mai 2022

Finalizarea documentatiei: 27 mai 2022

Bibliografie/Resurse

pm/prj2022/imacovei/memorygame.txt · Last modified: 2022/05/27 23:22 by mihaela.pana2211
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