This is an old revision of the document!
Sistemul oferă feedback vizual prin LED-uri (verde pentru succes, roșu pentru eșec) și feedback sonor prin buzzer. Jocul include mai multe niveluri de dificultate (Ușor, Mediu, Greu) și permite jucătorului să facă maximum 6 greșeli înainte de a pierde.
Scopul proiectului este să combine concepte esențiale de programare embedded: interfațarea cu LCD prin I2C, gestionarea input-urilor prin butoane, feedback vizual/audio și implementarea unei logici de joc interactive.
Sistemul se bazează pe microcontrollerul Arduino UNO (ATmega328P) care acționează ca unitate de control principală. Comunicarea cu LCD-ul se realizează prin protocolul I2C la adresa 0x27, reducând numărul de pini necesari.
La pornire, jucătorul selectează categoria de cuvinte și nivelul de dificultate folosind butoanele LEFT/RIGHT pentru navigare și SELECT pentru confirmare. Sistemul alege aleator un cuvânt din categoria selectată și afișează numărul de litere.
În timpul jocului, jucătorul navighează prin alfabetul A-Z cu butoanele LEFT/RIGHT și selectează litere cu butonul SELECT. Fiecare literă ghicită corect este afișată pe pozițiile corespunzătoare, iar greșelile sunt contorizate și vizualizate prin desenarea progresivă a spânzurătorii pe LCD.
Jocul se termină prin victorie (toate literele ghicite) sau înfrângere (6 greșeli), cu posibilitatea de restart automată.
Nume Componentă | Cantitate | Descriere |
— | — | — |
Arduino UNO R3 | 1 | Microcontroller ATmega328P |
LCD 16×2 cu I2C | 1 | Display cu interfață I2C (adresa 0x27) |
Butoane tactile | 3 | LEFT, SELECT, RIGHT |
LED Verde | 1 | Feedback pozitiv |
LED Roșu | 1 | Feedback negativ |
Buzzer Pasiv | 1 | Feedback audio |
Rezistențe 220Ω | 3 | Pentru LED-uri si Buzzer |
Rezistențe 10kΩ | 3 | Pull-down pentru butoane |
Breadboard | 1 | Montaj circuit |
Fire de conectare | Diverse | Conexiuni |
Funcționalitate hardware & conexiuni
1. Arduino UNO
2. LCD 16×2 cu I2C
3. Butoane
4. LED-uri
5. Buzzer pasiv (pin 7)
Tabel cu alocarea pinilor
Pin Arduino | Funcție | Nume Reg. MCU | Direcție | Motiv alegere |
— | — | — | — | — |
2 | Buton LEFT | PD2 | IN | Navigare alfabet |
4 | Buton SELECT | PD4 | IN | Selecție literă |
6 | Buton RIGHT | PD6 | IN | Navigare alfabet |
7 | Buzzer | PD7 | OUT | Feedback audio |
8 | LED Verde | PB0 | OUT | Feedback pozitiv |
10 | LED Roșu | PB2 | OUT | Feedback negativ |
A4 | SDA (I2C) | PC4 | OUT | Date către LCD |
A5 | SCL (I2C) | PC5 | OUT | Ceas I2C |
Biblioteci utilizate
Structura software Programul este organizat în următoarele module functionale:
1. Inițializare (setup())
2. Selecția configurației (start())
3. Bucla principală (loop())
4. Afișare și feedback (drawGame(), drawHangman())
5. Logica de joc (hasWon(), gameOver())
Funcționalități implementate
Algoritmi principali
1. Algoritm de navigare:
2. Algoritm de verificare literă:
3. Algoritm de verificare victorie:
4. Algoritm de afișare spânzurătoare:
Caracteristici finale: - 24 de cuvinte organizate în 4 categorii - 3 niveluri de dificultate funcționale - Interface LCD clar și responsive - Feedback audio/vizual consistent - Sistem de restart automat functional
Îmbunătățiri posibile: - Adăugarea unui card SD pentru cuvinte suplimentare - Implementarea unui sistem de scoruri - Timer pentru limitarea timpului de joc - Mai multe categorii de cuvinte
Proiectul a demonstrat cu succes implementarea unui joc interactiv pe platformă Arduino, combinând multiple concepte de programare embedded: interfațarea I2C, gestionarea input-urilor, generarea de sunete și crearea unei interfețe utilizator intuitive.
Aspectele cele mai valoroase ale implementării: - Utilizarea eficientă a caracterelor personalizate LCD pentru grafică - Organizarea modulară a codului pentru ușurință în dezvoltare - Implementarea unui sistem de feedback multi-modal (vizual/audio) - Gestionarea corectă a stărilor de joc și tranziților
Proiectul oferă o bază solidă pentru dezvoltarea ulterioară și poate fi extins cu funcționalități suplimentare cum ar fi conectivitate, scoruri online sau AI pentru generarea dinamică de cuvinte.
Fişierele se încarcă pe wiki folosind facilitatea Add Images or other files. Namespace-ul în care se încarcă fişierele este de tipul :pm:prj20??:c? sau :pm:prj20??:c?:nume_student (dacă este cazul). Exemplu: Dumitru Alin, 331CC → :pm:prj2009:cc:dumitru_alin.