Table of Contents

Snake Game on 8x8 LED Matrix

Autor: STAMATIE Mihai-Robert, 333CA

Introducere

Proiectul reprezinta o implementare hardware a jocului clasic Snake pe o matrice de LED-uri 8×8, avand ca microcontroller o placa Arduino Leonardo (ATmega32U4 @ 16 MHz). Jucatorul controleaza sarpele cu ajutorul unui joystick analogic, iar butonul integrat al joystick-ului (SW — apasarea in jos a manetei) permite resetarea jocului in orice moment.

Firmware-ul este scris in C bare-metal (avr-libc + avr-gcc), fara framework-ul Arduino, cu acces direct la registrele microcontrollerului — abordare care permite control fin asupra timpilor si folosirea eficienta a resurselor disponibile pe ATmega32U4.

Logica jocului implementeaza:

Motivatia: mi-am dorit un proiect care sa combine partea de I/O analogic (joystick, citire ADC) cu o componenta de afisare controlata printr-un protocol serial (SPI software, prin MAX7219) si cu stocare persistenta (EEPROM), pentru a acoperi cat mai multe notiuni din curs intr-un singur proiect. In plus, Snake este un joc cu logica simpla dar captivanta, iar provocarea de a-l face sa ruleze pe doar 64 de pixeli este parte din distractie.

Descriere generala

Sistemul este compus din trei parti functionale principale:

Alimentarea se face de la portul micro-USB al PC-ului (5V), care serveste simultan si ca interfata de programare prin USB-ul nativ al ATmega32U4.

snake_game_2026pm-project.png

Hardware Design

Lista de piese (Bill of Materials)

Nr. Componenta Cantitate Descriere / Rol
1 Placa Arduino Leonardo 1 Microcontroller ATmega32U4 @ 16 MHz
2 Matrice LED 8×8 cu driver MAX7219 (LED Dot Matrix Display, Red) 1 Display-ul propriu-zis al jocului
3 Modul joystick analogic (Generic, ex. KY-023) 1 Control directie X/Y + buton SW integrat pentru restart
4 Breadboard mic (Solderless Breadboard Half Size) 1 Suport pentru cablaj
5 Fire dupont tata-mama (Female/Female Jumper Wires) ~10 Conexiuni Arduino — module
6 Fire dupont generice (Jumper wires generic) ~5 Conexiuni pe breadboard
7 Cablu micro-USB 1 Programare si alimentare

Conexiuni

Componenta Pin componenta Pin Arduino Leonardo Port / Pin AVR
Joystick VCC 5V
Joystick GND GND
Joystick VRX A0 PF7 (ADC7)
Joystick VRY A1 PF6 (ADC6)
Joystick SW (buton integrat) D2 PD1 (pull-up intern, active LOW — folosit pentru restart)
Matrice MAX7219 VCC 5V
Matrice MAX7219 GND GND
Matrice MAX7219 DIN D11 PB7
Matrice MAX7219 CS D10 PB6
Matrice MAX7219 CLK D13 PC7

Nota despre SPI pe Leonardo: pinii hardware SPI ai placii Leonardo (MOSI / MISO / SCK) sunt expusi doar pe header-ul ICSP, nu pe D11/D12/D13 ca la UNO. In proiect este folosit SPI software (bit-banging direct pe registrele PORTB / PORTC), asa ca alegerea pinilor D10 / D11 / D13 este pur conventionala. Pinul D13 este partajat cu LED-ul on-board, dar acest lucru nu afecteaza comunicatia cu MAX7219.

Schema electrica

Schema electrica - cablaj breadboard

Schema de mai sus prezinta cablajul complet realizat pe breadboard: joystick-ul analogic conectat la pinii A0 (VRX), A1 (VRY) si D2 (SW pentru restart), iar matricea LED 8×8 cu driver MAX7219 conectata la pinii D11 (DIN), D10 (CS), D13 (CLK). Alimentarea de 5V este distribuita prin rail-urile breadboard-ului direct de la pinii Arduino.

Software Design

Mediu de dezvoltare

Arhitectura codului

Codul este organizat modular in mai multe grupuri de functii, toate in main.c:

Algoritmi si structuri principale

Concluzii

Proiectul a fost finalizat cu succes — jocul Snake este complet functional pe placa Arduino Leonardo, ruleaza fluid pe matricea LED 8×8 si raspunde rapid la input-ul de la joystick. Implementarea in C bare-metal s-a dovedit a fi o alegere potrivita pentru acest tip de proiect, oferind control direct asupra timpilor de executie si o intelegere mai profunda a modului de functionare a microcontrollerului ATmega32U4 la nivel de registre.

Aspecte care au functionat bine

Provocari intampinate

Posibile extensii viitoare

Download

Arhiva contine varianta finala a proiectului, gata de compilat si rulat pe Arduino Leonardo. Include sursele complete (main.c), Makefile pentru build si flash, plus un fisier README cu instructiuni de utilizare.

Pentru a rula proiectul:

  1. Conectati placa Arduino Leonardo prin micro-USB
  2. Dezarhivati snake_game.zip
  3. In folder-ul dezarhivat, rulati make pentru a compila
  4. Rulati make flash (sau scriptul flash.ps1 pe Windows) pentru a incarca firmware-ul

Bibliografie/Resurse

Resurse Hardware

Resurse Software

Export to PDF