Slots este unul dintre cele mai vechi jocuri de casino. În acest joc, un jucător trage de o manetă, iar pe un ecran îi sunt afișate 3 simboluri în 3 sloturi diferite. După “amestecarea” simbolurilor, cele 3 pot fi diferite sau aceleași. Dacă cele 3 simboluri sunt identice, jucătorul câștigă runda respectivă. Un exemplu de joc Slots în variantă Flash este disponibil aici [1].
Poza de mai sus este doar cu titlu de exemplificare a aplicației.
Jocul Slots este realizat cu ajutorul plăcuței din prima etapă la PM. Pentru implementare se folosește un 7-LED Display cu 3 digits, respectiv ELT-512SURWA/S530-A3:
Jocul are functionalități de bază - la apăsarea unui buton se generează cele 3 sloturi aleator. Dacă acestea sunt identice, jucătorul a câștigat - sloturile se sting și se aprind pentru a simula un efect de YOU WIN. Altfel, ledurile display-ului rămân aprinse pe valorile respective până când se va apăsa din nou butonul, moment în care numerele vor fi regenerate.
Display-ul se leagă la microcontroller pe anumite porturi (a se vedea mai jos, la Hardware Design).
Programul este scris in C și este scris pe microcontroller cu ajutorul AVRUSBBoot (a se vedea mai jos, la Software Design).
7-led display-ul folosit se leagă la microcontroller-ul ATMega16 pe anumite porturi rămase libere. Display-ul are 12 pini, dintre care 3 anoduri și 8 catoduri, în interior existând niște diode. Un pin nu este folosit (pinul 6). Dintre cei 11 pini folosiți:
Dintre catoduri, pinul 3 aprinde punctul de lângă fiecare digit, însă având în vedere că nu îl folosesc, nu l-am conectat la niciun port din microcontroller.
Datasheet-ul 7-led display-ului poate fi descărcat de aici [2].
Corespondența hardware (după legăturile realizate pe plăcuță) pin 7-led display - pin ATmega16 este următoarea:
Pin 7-led display | Tip pin 7-led display | Pin ATmega16 | Port ATmega16 | Pin ATmega16 |
---|---|---|---|---|
1 | catod | 40 | PORTA | PA0 |
2 | catod | 39 | PORTA | PA1 |
4 | catod | 38 | PORTA | PA2 |
5 | catod | 37 | PORTA | PA3 |
7 | catod | 36 | PORTA | PA4 |
8 | anod | 24 | PORTC | PC2 |
9 | anod | 23 | PORTC | PC1 |
10 | catod | 35 | PORTA | PA5 |
11 | catod | 34 | PORTA | PA6 |
12 | anod | 22 | PORTC | PC0 |
Catodurile se conecteaza la ATmega16 prin cate o rezistenta de 1KOhm.
Iată mai jos circuitul rezultat după conectarea 7-led display-ului:
Alimentarea se poate face fie de la priză (cum era in versiunea de bază a plăcuței), fie de la bateria de 9V pe care am conectat-o pe plăcuță. Alimentarea de la baterie se activează punând butonul roșu în starea On, iar blocarea curentului de la baterie se face putând butonul roșu în starea Off (a se vedea și poza cu circuitul final).
Componentele folosite în etapa a doua (despre care s-a scris mai sus):
Verificarea funcționalității circuitului, legăturilor și a componentelor s-a făcut cu ajutorul unui multimetru.
Jocul este realizat în C și scris pe plăcuță cu ajutorul utilitarului AVRUSBBoot.
Algoritmul folosit este următorul:
Am apelat la această metodă în care se așteaptă un delay între cifre, deoarece nu se pot afișa cifre diferite pe cele 3 digits simultan din cauza catodurilor activate. Folosind acest delay, cât timp nu se apasă butonul numerele sunt afișate în continuu, însă omul are impresia că acestea stau în permanență pe display. Dacă cifrele sunt egale, omul percepe doar acele secunde de așteptare în care ledurile sunt oprite și o altă perioadă în care vede toate cifrele aprinse. Se creează astfel un efect de tipul YOU WIN!
Arhiva cu fișierele proiectului este disponibilă la secțiunea Download.
Inițial nu știam ce proiect să fac pentru etapa finală. Ideea unui joc de tip Slots mi-a venit când am văzut în vitrina unui magazin de electronice un 7-led display (din câte îmi aduc aminte, cu un singur digit). Mi s-a părut foarte interesant.
Ulterior, am aflat de jocurile pe LCD-uri de Nokia 3310 pe care le făceau colegii mei. Mi s-a părut interesant și am uitat de display-ul de la care am plecat (de fapt, nu știam cum se programează acela, iar din spusele colegilor ecranul de Nokia se programa destul de ușor), vrând apoi să folosesc și eu un astfel de ecran.
O altă vizită la magazine de electronice m-a determinat, însă, să îmi cumpăr acest 7-led display cu 3 digits. După ce m-am documentat cum se poate lucra cu el, am verificat cu ajutorul multimetrului. Mi s-a părut mult mai interesant de folosit.
De asemenea, am cumpărat un alt LCD cu 40 de pini, care, la activarea unui pin afișează câte ceva pe ecran tot sub formă de digits (cu 5 digits). Pentru acesta, însă, fiind “noname”, nu am găsit specificații. Oricum, este interesant de folosit, de exemplu pentru afișarea distanței parcurse la un program care contorizează acest lucru sau pentru un repartitor de căldură. Singura “problemă” care ar trebui rezolvată este multiplexarea acestor pini pentru a putea fi conectați la pinii lui ATmega16 (fiind mai puțini disponibili).
Ce am învățat de la proiectul la PM:
Ca o concluzie, după ce am trecut prin această materie observ orice circuit îmi apare în “cale” - recent mă uitam la plăcuța care se vedea printr-un stick USB transparent.
Arhiva cu fișierele sursă se poate descărca de aici [3]. Arhiva conține un fișier C și un Makefile. Compilarea se face cu utilitarul avr-gcc, disponibil în pachetul WinAVR pentru sistemele de operare Windows.