Simon Says

Autor: Niculaie Ionut-Lucian
Grupa: 335CB

Introducere si descriere generala

Proiectul reprezinta un joc de memorie in cadrul caruia utilizatorului i se vor testa atat memoria vizuala, cat si cea auditiva. Exista 4 LED-uri de culori diferite si 4 butoane care actioneaza aprinderea acestora. Se vor aprinde secvential LED-urile intr-o ordine aleatoare, cu numarul egal cu numarul nivelului, iar jucatorul va trebui sa recreeze aceasta ordine apasand butoanele pe care le are la dispozitie in ordinea corecta.

La fiecare avansare de nivel, se va aprinde cu un LED mai mult, adaugandu-se la ordinea de la nivelul anterior. Jocul are un numar maxim de 30 de nivele. Daca jucatorul reuseste sa treaca de toate cele 30 de nivele va castiga si va avea parte de un cantec al victoriei.

Ideea de la care am pornit este pasiunea mea pentru mici joculete care te pot relaxa, dar si atractia catre challenge-uri sau provocari. Eu consider ca proiectul este util deoarece testeaza memoria si poate reprezenta un mod distractiv de a petrece niste timp liber.

Schema Bloc

Input:

  • Butoane

Output:

  • OLED
  • LED-uri
  • Buzzer

Hardware Design

Lista de piese:

  • Arduino UNO
  • 4 x Butoane
  • 4 x LED 5mm
  • 1 x OLED 0.91' I2C
  • 4 x Rezistente 330 Ohm
  • 4 x Rezistente 3.3K Ohm
  • 1 x Buzzer
  • Fire Tata-Tata

Rezistentele de 330 Ohm le-am folosit pentru LED-uri, pentru a limita curentul care trece prin acestea. Rezistentele de 3.3K Ohm le-am folosit pentru butoane.

Software Design

Ca si mediu de dezvoltare s-a folosit Arduino IDE
Pentru implementarea proiectului s-au folosit urmatoarele biblioteci:

  • SPI.h
  • Wire.h
  • Adafruit_GFX.h
  • Adafruit_SSD1306.h

Ordinea in care se vor aprinde LED-urile va fi salvata si actualizata intr-un array. Randomizarea se face prin alegerea unui seed aleator la inceputul programului. Am folosit functia analogRead pe un pin neconectat pentru a realiza acest lucru.

In cadrul proiectului, functia level() constituie modul prin care un nivel este prezentat catre utilizator, led-urile aprinzandu-se in ordinea stabilita nivelului respectiv, dar si emitand sunete prin intermediul buzzer-ului.

Functia wait_input() va astepta ca jucatorul sa apese butoanele in ordinea corecta. Daca toate butoanele au fost apasate in ordinea cea buna, atunci se va pregati nivelul urmator prin adaugarea unui nou LED in array.

Ca element bonus, am adaugat melodii, atat atunci cand utilizatorul castiga, cat si atunci cand pierde. Aceste bucati de cod au fost preluate de pe internet, iar sursele sunt mentionate in bibliografie.

Rezultate Obţinute

Concluzii

Ca si concluzii, am reusit sa finalizez proiectul cu toate functiile pe care mi le-am propus, ba chiar la final am reusit sa reusesc sa-mi dau frau liber imaginatiei, adaugand anumite elemente care pot crea amuzament sau un zambet celui care joaca jocul(anumite melodii care se redau atunci cand jocul se castiga sau se pierde).

Fiind primul proiect in Arduino, mi-a fost putin mai greu la inceput sa reusesc sa conectez toate componentele in mod corect. Pe partea de software nu am intampinat mari dificultati(thank god), iar in final a iesit un proiect dragut si pe placul meu.

Download

Pentru ca programul sa ruleze va trebui sa se instaleze biblioteca pentru OLED.

Tools → Manage Libraries → Adafruit SSD1306

simonsays.zip

Jurnal

  • 08.05.2022: Alegerea temei pentru proiect
  • 15.05.2022: Comandarea resurelor hardware
  • 20.05.2022: Finalizarea unei variante initiale
  • 24.05.2022: Adaugarea ecranului in cadrul proiectului
  • 26.05.2022: Mici ajustari ale codului
  • 27.05.2022: Finalizarea documentatiei

Bibliografie/Resurse

pm/prj2022/rtilimpea/simonsays.txt · Last modified: 2022/06/02 02:34 by ionut.niculaie
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