Table of Contents

Gameboy

Introducere

Tema proiectului este o consolă de tip Gameboy care are câteva jocuri foarte simpliste și un meniu de selecție a acestora. Jocurile vor avea animații minimaliste, sunete asemănătoare și vor fi controlate prin câteva butoane. Acesta poate fi folosit pentru divertisment.

Descriere generală

Utilizatorul interacționeaza cu meniul și cu jocurile cu cele 3 butoane expuse și primește output vizual pe LCD și sonor prin buzzer în funcție de acțiunile sale.

Schemă bloc

Hardware Design

Componente folosite:

  • 1 Arduino Uno R3
  • 1 LCD 128×64 pe bază de chip ST7920
  • 1 Buzzer 5V
  • 3 Butoane
  • Suficiente fire

Schemă electrică

Software Design

  • Am dezvolatat codul cu ajutorul Arduino IDE.

Am folosit:

  • biblioteca standard <Arduino.h> pentru lucrul general,
  • <SPI.h> pentru conexiunea SPI dintre Arduino și LCD precum și
  • <U8g2lib.h> pentru lucrul cu ecranul, interfațarea SPI mai ușoară precum și câteva primitive grafice pentru afișare de text, forme geometrice de bază.

Ca organizare a codului (arhiva mai jos) am folosit un model similar aplicațiilor grafice (cum ar fi temele de semestrul trecut de la EGC în OpenGL), prin apelul în loop-ul default al anumitor funcții:

  • u8g2.clearBuffer() - funcție de bibliotecă, șterge imaginea din buffer
  • handle_ui() - se opcupă de afișarea pe ecran fie a meniului principal fie a stării jocului, depinzând de cum s-a interacționat cu consola
  • u8g2.sendBuffer() - funcție de bibliotecă, copiază imaginea din buffer la ecran
  • check_buttons() - citește starea de apăsare a butoanelor și updatează variabilele interne
  • update_time() - updatează entitățile dependente de timp din program, folosind millis()

Concepte PM folosite:

  • SPI
  • Întreruperi
  • Timer

Rezultate Obţinute

Demo

Am obținut un rezultat foarte plăcut din punctul meu de vedere, consola are meniu și UI-uri prietenoase, este foarte resposivă la input.

Download

Jurnal

  • 21.04.2022: Am adăugat tema proiectului, componentele si schema bloc (Milestone 1).
  • 26.04.2022: Am început documentarea pentru a începe poriectul.
  • 12.05.2022: Am observat că este nevoie de atașarea fizică a unui pin header (baretă continuă de pini LCD-ului, fiind nevoie de lipituri).
  • 14.05.2022: Primul prototip funcțional de LCD interfațat prin SPI cu un buton ce schimba afișajul unor primitive grafice pentru testing.
  • 27.05.2022: Update la cod precum și cele necesare pentru Milestone 2, printre care reformatare la pagină.
  • 01.06.2022: Ultimul update la cod + bug fixes + game smoothening

Bibliografie/Resurse

Export to PDF