This is an old revision of the document!


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

Schema electrica

pm/prj2026/ciprian.popescu0411/victor_stefan.iusco.1778346327.txt.gz · Last modified: 2026/05/09 20:05 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