This is an old revision of the document!
BopIt este un joc interactiv conceput pentru a testa si antrena reflexele si viteza de reactie. Mecanica jocului presupune executarea rapida a unor actiuni simple, precum apasarea unui buton, rotirea unui element, imediat ce actiunea apare pe ecran.
Scopul este ca jucatorul sa raspunda corect si cat mai rapid la comenzile primite. Cu cat timpul de reactie este mai mic, cu atat punctajul obtinut este mai mare, oferind astfel o experienta dinamica si competitiva. Jocul devine progresiv mai rapid si mai dificil, provocand jucatorul sa-si imbunatateasca performanta.
Proiectul este dezvoltat pe o placuta Arduino Uno, la care sunt conectate toate componentele necesare. Atunci cand butonul de start este apasat, pe ecranul LCD este afisata actiunea pe care jucatorul trebuie sa o realizeze, impreuna cu scorul curent.
Pe un afișaj cu 7 segmente este indicat timpul ramas pentru a actiona– acesta incepe de la 5 secunde si scade treptat pana la 2 secunde, pe masura ce jocul avanseaza.
Imediat ce o actiune este afisata pe LCD, jucatorul trebuie sa o indeplineasca corect si in intervalul de timp alocat. Daca nu reuseste, pierde runda, lucru semnalizat printr-un sunet emis de buzzer.
Hardware:
Schema electrica:
Schema hardware:
placă de dezvoltare compatibilă cu Arduino UNO R3:
• 5V (folosit pentru alimentarea componentelor care necesită tensiune constantă) • GND (comun tuturor componentelor, asigurând referința de tensiune)
LCD 16×2 (cu modul I2C): display pentru afișarea meniului
• SDA (Serial Data) -> A4 - linia de date pentru protocolul I2C (permite transferul datelor între Arduino și LCD) • SCL (Serial Clock) -> A5: - linia de ceas pentru transmiterea sincronizată a datelor între dispozitivele I2C
2 x (push-button + rezistență): implementarea de comenzi pentru meniu
• conexiune la pini digitali (A1-A2): - folosiți pentru a detecta apăsările de butoane • folosire de rezistențe 10kΩ: - folosite ca pull-down pentru a menține starea LOW în absența apăsării
Passive buzzer: sunete trist la pierderea jocului
• conexiune la pin digital (D8): - controlul sunetului prin generarea de tonuri cu funcția tone() din Arduino
Potentiometru: folosit pe post de rotita in joc
• conexiune la pin digital (D8)
7 segment display: Folosit pentru a afisa cate secunde mai avem pentru a actiona
• display cu catod comun
74HC595: multiplexeaza
• controlează display-ul cu 7 segmente folosind doar 3 pini de la Arduino • conexiune la pinii digitali: -latchPin (D10) transfera dqatele din registrul de deplasare catre pinii de iesire -clockPin (D9) puls de ceas pentru deplasarea bitilor in registru - dataPin (D11) transmiterea datelor bit cu bit
Mapare cu 7-segment display Q0 → Segment DP
Q1 → Segment G
Q2 → Segment F
Q3 → Segment E
Q4 → Segment D
Q5 → Segment C
Q6 → Segment B
Q7 → Segment A
Pentru dezvoltarea proiectului, am folosit editorul de text VS Code împreună cu extensia PlatformIO, configurată pentru a utiliza placa Arduino Uno
Librarii:
Wire : Aceasta este o librarie standard pentru comunicatia I2C pe Arduino, folosita pentru a interactiona cu dispozitivele conectate pe magistrala I2C.
LiquidCrystal_I2C : O librarie pentru controlul afisajelor LCD prin intermediul protocolului I2C, oferind functionalitati pentru setarea cursorului, stergerea ecranului si afisarea de text. Am folosit-o pentru a afisa diverse mesaje pe ecranul LCD.
Algoritm: Codul este impartit in 3 bucati
Partea de inițializare include:
enum GameState {
IDLE, PLAYING,
}
Main-ul (setup și loop):
Funcții:
Mod normal: https://youtu.be/xgpH6ndhMmk
Mod rapid: https://youtu.be/3KywepIOT1g
Codul sursă trebuie urcat într-un repo public, recomandăm GitHub.
Pagina de GitHub a proiectului vostru trebuie să conțină toate fișierele relevante pentru realizarea proiectului vostru. Dacă există resurse externe pe care le-ați folosit, vă rugăm să le link-ați în README.md