Table of Contents

Eusebiu RIZESCU (78353) - Joc Memorie

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Scopul proiectului este realizarea unui joc de memorie, jucat de un singur jucator.

Proiectul consta in redarea diferitor secvente de aprindere de led-uri. Player-ul trebuie dupa aceea sa reconstituie secventa prin apasarea butoanelor, specifice fiecarui led. Daca reuseste sa reproduca ordinea in mod corect, va trece la urmatoarul nivel, care consta intr-o secventa mai lunga cu o aprindere de led.
Jocul are 8 nivele, aceste fiind selectate initial prin apasarea unui buton corespunzator nivelului:
1 2…..3 4
5 6…..7 8
Se vor afisa secvente de LED-uri aleatoare incepand cu 1, 2, 3 …, pana la nivelul ales.
ATENTIE! Ai o singura viata.

Jocul este creat pentru relaxa utilizatorul, dar si pentru a testa atentia si memoria sa.

Descriere generală

La input avem butoanele, iar la output avem LED-urile

Hardware Design

Lista piese:

Schema electrica

Software Design

Mediul de dezvoltare folosit:

→ Eagle 9.0.0 pentru schema electrica
→ Sublime Text 2 pentru editare
→ BootloaderHID CLI pentru incarcarea fisierului binar
→ avr-gcc pentru compilare

Functii si detalii implementare:

a) Functii de afisare “mesaje”:

  1. void afisareInitiala() - la inceputul fiecarui joc
  2. void jocCastigat() - atunci cand s-a terminat jocul cu castig
  3. void jocPierdut() - atunci cand s-a terminat jocul cu infrangere
  4. void rundaCastigata() - atunci cand s-a trecut la runda urmatoare

b) Functii pentru stabilirea environment-ului:

  1. void selectareNivel() - jucatorul apasa unul din cele 8 butoane pentru a selecta nivelul
  2. void activarePorturi() - selectam PB pentru input (butoane) si PA pentru output (LED-uri)
  3. void generareSecventa(int secventa[], int runda) - se genereaza o secventa de aprinderi ale LED-urilor pentru runda curenta

c) Functii de back-end:

  1. void aprindeLed(int led) - face blink pe LED-ul led
  2. int verificareButoane(int secventa[], int runda) - citeste de pe butoane si verifica daca este secventa corect introdusa
  3. void play(int secventa[]) - functia principala a jocului
  4. int main(void) - main-ul programului

Rezultate Obţinute

Concluzii

Proiectul a reusit, functioneaza foarte bine conform standardelor mele de apreciere, fiind primul proiect fizic si cu cod la care am lucrat.
Prima problema a fost asezatul pieselor pe placuta de test, cand am cumparat-o am crezut ca este mai mare, dar nu a fost asa, si a trebuit sa le inghesui putin.
Apoi lipitul care initial parea bine, toate aveau contact, aparent nu era asa. Am remediat repede acele probleme.
Codul l-am realizat pornind de la scheletele de cod de la laboratoare

Download

bootloadHID, jocMemorie.c .elf .hex, Makefile, incarcarePePlaca.sh, README
pm2018_331ca_rizescueusebiu.zip
cateva poze
pm2018_331ca_rizescueusebiu_photo.zip

Jurnal

2015-??-?? - cateva componente ramase de la PL (LED-uri, butoane, rezistente, fire)
2018-04-07 - alegerea proiectului
2018-04-12 - achizitionarea componentelor pentru placa de baza
2018-04-17 - receptia placii de baza
2018-04-19 - gandirea proiectului, componentele necesare, schema bloc
2018-05-03 - lipirea componentelor pe placa de baza
2018-05-04 - schema electrica a proiectului (EAGLE)
2018-05-07 - achizitionarea celorlalte componente pentru placa auxiliara
2018-05-10 - lipirea componentelor pe placa auxiliara
2018-05-17 - bootloader si primul program pus pe placa
2018-05-19 - scriere cod + script pentru pus pe placa + reparat lipituri gresite + teste
2018-05-20 - finalizare documentatie (wiki, README, comentarii cod)

Bibliografie/Resurse

Resurse software Datasheet ATMEGA: http://cs.curs.pub.ro/wiki/pm/_media/doc8272.pdf
Schema PCB si placa proiect: http://cs.curs.pub.ro/wiki/pm/cablaj/proiect2018
Bootloader: http://cs.curs.pub.ro/wiki/pm/tutorial/bootloader
Schelet de cod: http://cs.curs.pub.ro/wiki/pm/lab/lab1 , http://cs.curs.pub.ro/wiki/pm/lab/lab2 , http://cs.curs.pub.ro/wiki/pm/lab/lab3
EAGLE: http://www.cadsoftusa.com/
SublimeText2: https://www.sublimetext.com/2

Resurse hardware Optimus digital: https://www.optimusdigital.ro
Conex electronic: https://www.conexelectronic.ro/
Contact electric (Pitesti): https://contactelectric.ro/ ← foarte ieftini