Ionuţ-Lucian BURTAN (78537) - Snake

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

Proiectul presupune implementarea unui joc Snake pe un diplay de Nokia 5110, cu buzzer, 7 segment display si nivele multiple.

  • Scopul proiectului : familiarizarea cu hardware-ul
  • Ideea de baza: snake e un joc simplu si “customizabil”, care reprezinta pentru mine un bun punct de plecare in ceea ce tine de embedded
  • Utilitate : invatare si distractie.

Descriere generală

Specificatii:

  • Controlam sarpele prin butoane.
  • Alegem nivelul inainte de joc prin butoanele care cotroleaza sarpele.
  • Ne jucam, observam scorul pe display-ul 7seg si sunetele de la buzzer.

Hardware Design

Lista piese

Denumire Număr
Buzzer 1
7 segment display 4
Butoane 4
LCD Nokia 5110 1
Placa de prototipare 1

Schema electrica:

Software Design

Am pornit de la o biblioteca pentru LCD (vezi sectiunea de Resurse/Bibliografie) pe baza careia am implementat functionalitati necesare. Pe baza functiei de activare/dezactivare pixel am construit un bloc de 2/2 pixeli, pe care l-am folosit ca unitate pentru:

  • corpul sarpelui
  • “mancare”(punct de colectat pe harta)
  • borduri

Am utilizat si alte functii din biblioteca pentru display pentru meniu, mesajul de Game-Over si mesajul de incepere al programului.

Am utilizat/modificat cod din laboratoarele 0 si 2 pentru:

  • implementare functii de control pentru buzzer (melodia de inceput, sunet cand scorul ajunge la o cota de 100, sunet Game-over)
  • setare pini ca iesire/intrare (control buzzer, display 7-segment)
  • setare intreruperi pe pini (control bun pentru schimbarea directiei sarpelui)
  • implementare de functii pentru display-ul 7-segment (afisarea individuala a cifrelor pornind de la un intreg)

Am implementat o lista dublu inlantuita pentru sarpe deoarece:

  • cand sarpele colecteaza un punct, trebuie sa se adauge un nou segment la acesta
  • trebuie sa se itereze prin sarpe la modificarea pozitiei de la butoane,
    • deoarece fiecare segment in afara de cap primeste coordonatele precedentului segment
  • “mancarea”(punctul) se genereaza aleator cu functia rand()
  • pentru nivelul clasic am implementat interconectarea marginilor opuse
    • iar pentru nivelul cu borduri coliziunea cu marginile
  • desemenea, am implementat functionalitatea de coliziune cu corpul sarpelui
  • am implementat si un meniu, din care jucatorul isi alege initial configuratia de joc dorita
    • nivel dorit, viteza dorita (factori care influenteaza scorul)

Rezultate Obţinute

Concluzii

Proiectul a fost o experienta interesanta, pasii importanti au fost:

  • scrierea unui program care sa afiseze simultan mai multe cifre pe 7-segment dispaly
  • scrierea unui cod pentru redarea unei melodii simple (formata din note si perioade)
  • utilizarea functiilor din biblioteca pentru lcd pentru generarea obiectelor pe ecran
  • utilizarea intreruperilor si configuratiilor necesare pentru utilizarea butoanelor

Download

Codul sursa, makefile-ul si hex-ul. In main.c am scris cateva comentarii sugestive pentru fiecare punct de interes

burtan_335cb_cod.zip

Bibliografie/Resurse

Nume Link
Datasheet ATMega324 ATMega324
Datasheet LCD Nokia Nokia5110
Biblioteca Nokia5110 Nokia5110 library
Laboratoare pm
4 digit 7 segment display 4digit7segment.jpg

* Documentația în format PDF

pm/prj2018/astratulat/335cb_burtan.txt · Last modified: 2021/04/14 17:07 (external edit)
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