Dino Jump

Introducere

Proiectul este un joc de tip endless runner inspirat din jocul cu dinozaurul din Google Chrome, rulat pe un microcontroler ATmega328P Xplained Mini.

  • Jucatorul controleaza un dinozaur care sare peste obstacole, folosind un singur buton
  • Jocul este afisat pe un ecran OLED SSD1306 de 128×64 pixeli
  • Un senzor de lumina (LDR) detecteaza lumina din camera si schimba automat tema ecranului intre modul luminos si dark mode

Descriere generala

Proiectul a fost creat in jurul placii ATmega328P-Xplained-Mini drept creier principal. La aceasta am conectat un ecran OLED SSD1306 de 128×64, un buton si un senzor de lumina LDR pentru detectia luminozitatii ambientale.

Module Hardware

  • Microcontrolerul (ATmega328P Xplained Mini): Unitatea centrala a proiectului, ruleaza logica jocului, coordoneaza comunicatia cu ecranul prin SPI, citeste senzorul de lumina prin ADC si proceseaza intreruperea de la buton.
  • Modulul de Iesire Vizuala (OLED SSD1306 128×64): Comunica cu microcontrolerul prin interfata hardware SPI, randeaza dinozaurul, obstacolele, solul si scorul. Suporta comanda nativa de inversare hardware (0xA6 / 0xA7), permitand comutarea instantanee intre tema luminoasa si dark mode fara redesenarea ecranului.
  • Modulul de Intrare Digitala (Buton Tactil): Conectat la pinul PD2, care suporta intreruperea externa INT0. O singura apasare porneste jocul, apasarile ulterioare declanseaza saritura dinozaurului. Pull-up-ul intern al microcontrolerului este activat, eliminand necesitatea unui rezistor extern.
  • Modulul de Senzor Ambiental (LDR GL5528): Conectat la pinul PC0 (ADC0) printr-un divizor de tensiune cu un rezistor de 10 kOhm. Furnizeaza o tensiune analogica proportionala cu lumina din camera, convertita de ADC in valoare numerica pe 10 biti.

Module Software

  • Game State Machine: Gestioneaza starile globale ale sistemului (STATE_IDLE, STATE_RUNNING, STATE_GAME_OVER), controland ce logica se executa la un moment dat si cum se tranzitioneaza intre stari la apasarea butonului.
  • Game Logic: Avanseaza pozitiile obstacolelor, aplica gravitatia asupra dinozaurului, creste progresiv viteza de derulare si executa detectia de coliziune prin compararea bounding box-urilor dinozaurului si cactusilor.
  • Input Handler: Proceseaza intreruperea INT0 de la buton si aplica debouncing software prin contorul de tick-uri, ignorand apasarile in fereastra de 50 ms de la ultima actiune valida.
  • Display Driver: Gestioneaza framebuffer-ul de 1024 bytes (128×8 pagini), deseneaza sprite-urile prin masti de biti si trimite intregul buffer catre OLED printr-un transfer SPI in rafala la fiecare tick de joc.
  • Light Monitor: Citeste ADC-ul la fiecare ~500 ms si compara valoarea cu un prag configurabil (implicit 300). Aplica histerezis de ±30 unitati ADC pentru a preveni clipirea si trimite comanda de inversare catre SSD1306 cand lumina ambientala se schimba.

Descriere generala

Lista de piese:

  • ATmega328P-Xplained-Mini
  • Ecran OLED SSD1306 128×64 - interfata SPI
  • Senzor de lumina LDR
  • Rezistor 10 kOhm
  • Buton tactil 6mm
  • Breadboard + fire Dupont
  • Cablu USB Micro-B
pm/prj2026/ciprian.popescu0411/victor_stefan.iusco.txt · Last modified: 2026/05/09 23:33 by victor_stefan.iusco
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