Autorul poate fi contactat la adresa:
Ideea inițială a proiectului: implementarea unui joc simplist cu inteligență artificială pe o matrice de LED-uri.
Rezultat: un joc de Connect Four fără inteligență artificială pe un ecran de Nokia 3310.
Inițial, am vrut să implementez un joc de table pe o matrice de leduri, însă datorită dificultăților întâmpinate, am renunțat la implementarea pe matrice de leduri și am creat un joc Connect Four folosind un ecran de Nokia 3310.
Crearea jocului mi-a fost utilă, la sfârșit înțelegând modul de funcționare al unui ecran LCD Nokia. Pentru ceilalți, proiectul reprezintă un joc simplu și portabil.
Connect Four (în română 4-în-linie) este un joc pentru doi jucători într-o matrice cu 6 linii și 7 coloane, în care jucătorii pun de sus, pe rând, discuri colorate de sus într-o coloană. Piesele cad, ocupând următorul spațiu disponibil în coloană. Scopul jocului este acela de a obține 4 piese consecutive de culoarea cu care joci, pe linie, coloană sau diagonală. Pentru mai multe detalii, click aici.
Listă de piese:
Piesele le-am cumpărat majoritatea de la Syscom, însă conectorii mamă-mamă și condensatorul le-am luat de la alte magazine de electronice de pe Strada Maica Domnului.
Pin | Signal | Description | Port |
---|---|---|---|
1 | VDD | Power Input. Logic supply voltage range VDD to GND : 2.7 to 3.3 V | Power |
2 | SCLK | Serial clock. Input for the clock signal: 0.0 to 4.0 Mbits/s. | Input |
3 | SDIN | Serial data. Input for the data line. | Input |
4 | D/C | Mode Select. To select either command/address or data input. | Input |
5 | SCE | Chip enable input. The enable pin allows data to be clocked in. The signal is active LOW. | Input |
6 | GND | Ground | Power |
7 | VOUT | Ouptut voltage. Add external 1-10 uF electrolytic capacitor from VOUT to GND | Power |
8 | RES | External reset. This signal will reset the device and must be applied to properly initialize the chip. The signal is active LOW. | Input |
Pentru display am lipit divizoare de tensiune întrucât tensiunea de funcționare a lui este de 3.3V. Pentru fiecare port de Input de mai sus am construit câte un divizor de tensiune folosind două rezistențe (1K8 și 3K3). Astfel reduc tensiunea de la 5V la 3.3V. Între portul VOUT și GND am adăugat un condensator de 10µF. Tensiunea pe care o primește ecranul în VDD este limitată pe rând de două diode 1N4148. Aici am mai adăugat și o diodă Zener de 3.3V, așa am văzut și la colegii din anii trecuți, deși pe Internet nu este specificat în mod explicit acest lucru.
Conexiuni pentru porturile de tip Input:
Nr | Signal | ATMega port used |
---|---|---|
1 | SCLK | PC4 |
2 | SDIN | PC3 |
3 | D/C | PC2 |
4 | SCE | PC1 |
5 | RES | PC0 |
6 | LEFT | PA0 |
7 | ENTER | PA1 |
8 | RIGHT | PA2 |
9 | RESET | PA3 |
Mediu de dezvoltare (folosit de majoritatea, sugerat și de echipa de PM): Programmers Notepad [WinAVR]
După ce am terminat cu partea hardware, am început să gândesc modul în care voi construi aplicația.
Mai întâi, am luat biblioteca de control pentru LCD de pe Internet (vezi secțiunea de Resurse). După aceasta, am căutat o modalitate de a seta un singur pixel negru (biblioteca oferă suport doar pentru afișare de text la dimensiuni standard).
Ajuns la acest pas, am gândit diagrama de joc:
În continuare nu am întâmpinat dificultăți, reușind să termin de scris codul în doar câteva ore.
Proiectul a fost unul interesant. Am învățat cum să lipesc componente, să am MARE grijă cu ce componente am.
O să continui după sesiune să implementez și un bot pentru jucat, eventual cu mai multe niveluri (se știe că jocul are strategie de câștig forțat la cel mai bun joc pentru primul jucător).
Arhivă cu fișierele proiectului.
Arhiva onține biblioteca pentru controlul LCD-ului (puțin modificată) și fișierul main ce conține toată funcționalitatea implementată de mine.
biblioteca pentru LCD