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