Wordle

Introducere

Prezentarea proiectului:

  • Ce face? Proiectul simulează jocul Wordle, în care trebuie să ghicești un cuvânt de 5 litere în maximum 6 încercări.
  • Care este scopul lui? Implementarea fizică a jocului Wordle cu ajutorul unei plăci Arduino, oferind o experiență interactivă, fără a depinde de un ecran de calculator.
  • Care a fost ideea de la care am pornit? Am dorit să transform un joc popular online într-o versiune fizică, folosind un ecran LCD pentru interfață și o tastatură PS/2 pentru introducerea cuvintelor.
  • De ce este util? Proiectul oferă o modalitate educativă de a învăța noțiuni de programare embedded, lucrul cu periferice și interacțiunea cu hardware-ul prin intermediul Arduino.

Descriere generală

Următoarea diagramă bloc prezintă interacțiunea componentelor hardware principale:

Proiectul este compus din următoarele module:

  • Modul de afișare – un ecran LCD ILI9341 conectat prin SPI la Arduino, care redă interfața grafică Wordle (grilă, litere, feedback vizual).
  • Modul de introducere a datelor – o tastatură PS/2 modificată (cu cablu tăiat), folosită pentru a introduce caracterele în joc.
  • Unitatea de procesare – o placă Arduino UNO care gestionează logica jocului, comunicarea cu tastatura și actualizarea display-ului.
  • Translator de Nivel Bidirectional cu 4 Canale

Fluxul de interacțiune este următorul:

  1. Utilizatorul introduce literele cu ajutorul tastaturii.
  2. Arduino primește caracterele, verifică dacă forma un cuvânt valid și oferă feedback pentru fiecare literă.
  3. Ecranul LCD afișează rezultatul (cu verde, galben sau gri), exact ca în varianta digitală.

Hardware Design

Listă de componente:

  1. 1 x Arduino UNO
  2. 1 x ecran TFT ILI9341 (cu SPI)
  3. 1 x tastatură PS/2 (cu cablu tăiat)
  4. fire de conexiune
  5. breadboard

Conectare LCD ILI9341:

  • GND ↔ GND
  • VCC ↔ 3.3V
  • CLK ↔ Digital 13
  • MOSI ↔ Digital 11
  • RES ↔ Digital 8
  • DC ↔ Digital 9
  • CS1 ↔ Digital 10

Conectare tastatură PS/2:

  • Cablul roșu ↔ 5V
  • Cablul galben ↔ GND
  • Cablul verde (CLOCK) ↔ Digital 3
  • Cablul alb (DATA) ↔ Digital 4

Schema electrică:

Software Design

Proiectul Wordle este implementat în limbajul C++ (Arduino), folosind o arhitectură modulară. Codul controlează un ecran TFT SPI și o tastatură PS/2, fără bibliotecă externă pentru protocolul tastaturii – acesta fiind implementat manual prin ISR (interrupții).

Mediu de dezvoltare

  • Platformă: Arduino UNO
  • IDE: Arduino IDE
  • Librării utilizate:
    • SPI.h

      – comunicație cu display-ul

    • Adafruit_GFX.h

      – funcții grafice de bază

    • Adafruit_ILI9341.h

      – driver pentru display TFT

Protocol PS/2 (implementat manual)

Tastatura este citită bit cu bit folosind o rutină de întrerupere (ISR) care preia fiecare bit la căderea frontului pe linia de ceas PS/2:

  • void ps2_clk_isr()

    – ISR care reconstruiește scancode-ul

  • decodeScancode()

    – transformă scancode-ul în caracter ASCII

  • ps2ReadKey()

    – returnează caracterul valid apăsat

Comunicarea se face pe pini digitali: DATA → D4, CLK → D3.

Structură logică

Meniul principal

  • FuncțiadrawMenu() afișează titlul și opțiunile „Rules” și „Play”.
  • Se navighează cu tastele săgeată sus/jos și se selectează cu Enter.
  • Selectarea „Rules” afișează regulile jocului prin showRulesPopup()</code>.

Afișare reguli

  • Funcția showRulesPopup() curăță ecranul și afișează regulile într-un format text.
  • Revenirea în meniu se face cu tasta Backspace.

Desfășurarea jocului

  • startWordleGame() conține bucla principală de joc.
  • Se citesc caractere de la tastatură și se afișează literele introduse.
  • La fiecare apăsare pe Enter, programul compară literele introduse cu cuvântul secret.

Algoritm de feedback (colorare pătrățele)

  • Verde – litera este corectă și pe poziția corectă.
  • Galben – litera este corectă, dar pe altă poziție.
  • Gri – litera nu se regăsește în cuvânt.

Stări de joc

  • Dacă cuvântul este ghicit → afișează „You Win!”
  • Dacă s-au făcut 6 încercări fără succes → afișează „You Lose!”
  • Se revine în meniu cu tasta ESC

Funcții principale

  • resetGame()

    – alege un cuvânt aleator, resetează grila și variabilele

  • drawMenu()

    – desenează interfața meniului principal

  • showRulesPopup()

    – afișează regulile jocului

  • startWordleGame()

    – gestionează logica de joc

  • showPopup()

    – afișează mesajele de final (win/lose)

  • ps2_clk_isr()
  • decodeScancode()
  • ps2ReadKey()

    – comunicare tastatură

Algoritmi și structuri de date

  • Liste de cuvinte în vectori de const char*
  • Indexare și randomizare pentru alegerea cuvântului țintă
  • strchr() și strcmp() pentru compararea literelor

Rezultate Obţinute

Care au fost rezultatele obţinute în urma realizării proiectului vostru.

  1. Interfața grafică a fost implementată cu succes pe ecranul TFT.
  2. Tastatura PS/2 a fost integrată funcțional, oferind input real pentru jucător.
  3. Feedback-ul vizual este afișat corect conform regulilor Wordle.
  4. Proiectul este complet autonom și nu necesită conexiune la PC în timpul jocului.

Concluzii

Proiectul Wordle fizic demonstrează că un joc simplu din mediul online poate fi adaptat într-un sistem embedded educativ. A fost o experiență practică în lucrul cu protocoale de comunicație, interacțiunea cu periferice și organizarea unui sistem cu feedback vizual și tastare fizică.

Download

Jurnal

Puteți avea și o secțiune de jurnal în care să poată urmări asistentul de proiect progresul proiectului.

* Săptămâna 1: documentare și alegerea proiectului

* Săptămâna 2: testarea tastaturii și a ecranului

* Săptămâna 3: desenarea meniului și integrarea logica jocului

* Săptămâna 4: testare și corectare feedback vizual

* Săptămâna 5: documentare finală și redactare wiki

Bibliografie/Resurse

Resurse Software:

Resurse Hardware:

Export to PDF

pm/prj2025/eradu/ana_maria.obreja.txt · Last modified: 2025/05/21 20:48 by ana_maria.obreja
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0