Autor: Datcu Diana-Cristina
Proiectul constă în implementarea jocului de Tetris, din pacate nefunctional, pe un ecran LCD, în care se vor obține puncte de fiecare dată când se va umple o linie. Jocul este pierdut când nu va mai exista spațiu. În implementare sunt utilizate 5 butoane ca input, microcontroller-ul, iar LCD-ul, un LED și un difuzor ca output.
Plăcuța Arduino va prelua datele de intrare de la butoane. Jucătorul va folosi 2 butoane pentru mișcarea stânga/dreapta a piesei, un buton pentru rotirea piesei, un buton va fi folosit pentru selectare si unul pentru pauză.
Piese necesare:
Scheme electrice: Schema electrica cu translatorul cu 4 canale:
Schema electrica cu transaltorul cu 8 canale: Realizare circuit: Mentionez de la inceput ca proiectul nu functioneaza, intrucat LCD se aprinde insa nu afiseaza nimic. LCD-ul a fost unul destul de pretentios dupa parerea mea, deoarece voia alimentare de la 3.3V, si nu de la 5V asa cum ofera placuta de Arduino. Din aceasta cauza a trebuit sa folosesc translatoare logice. In implementarea proiectului am plecat de la a descoperi cum functioneaza LCD-ul. Din pacate nici pana acum nu am aflat. Am cautat pe diverse site-uri, am vazut mai multe moduri de a lega LCD-ul la placuta de Arduino insa nu a functionat. Am conectat in mai multe moduri si de fiecare data incercam sa rulez exemple din biblioteca UCGlib in care decomentam linia Ucglib_ILI9341_18x240x320_HWSPI ucg (/ * cd = * / 9, / * cs = * / 10, / * reset = 8); insa fara vreo reusita. Am ales sa termin circuitul pe care il voiam finalizat.
Mediu de dezvoltare: ARDUINO IDE
Biblioteci folosite:
https://github.com/prenticedavid/MCUFRIEND_kbv
https://github.com/PaulStoffregen/ILI9341_t3
https://github.com/PaulStoffregen/XPT2046_Touchscreen
https://github.com/olikraus/ucglib
https://github.com/adafruit/Adafruit-GFX-Library
In realizarea codului (care nu stiu daca functioneaza cum ar trebui), m-am inspirat din mai multe surse mentionate in rubrica BIBLIOGRAFIE/RESURSE. In prima parte a codului sunt preponderent functii pentru buzzer. Am ales sa imi fac singura melodia care va acompania jocul prin utilizarea mai multor note definite la inceputul programului. Apoi imi construiesc piesele de Tetris. Implementarea propriu-zisa a jocului se afla in funcia loop. Dupa un anumit timp, o piesa coboara cate un rand, verificandu-se de ffiecare data coliziunea cu alta piesa. Piesa coboara pana cand acest lucru nu mai este posibil, caz in care o noua piesa va aparea pe ecran. In cazul in care un rand este deja plin, se va sterge randul respectiv, urmand ca piesele care se afla deasupra randului sters sa coboare cu o pozitie. In cazul in care se doreste rotirea piesei, se va apasa pe un buton iar piesa se va roti la stanga. Jocul se termina in momentul in care o piesa noua nu mai poate cobori nicaieri pe ecran.
Proietul a fost destul de fun de realizat, insa frustranta partea cu LCD-ul. Daca nu m-as fi apucat atat de tarziu de proiect (cu 4 zile inainte de data la care ar fi trebuit sa il prezint) as fi schimbat LCD-ul sau as mai fi incercat si legarea unor rezistente astfel incat sa LCD-ul sa primeasca 3.3V in loc de 5 V. Am invatat insa sa programez in Arduino ceea ce mi se pare un plus.
Link download: Download pdf
Link-uri cod:
https://hackaday.io/project/10761-tetris-on-arduino-lcd
https://www.instructables.com/Arduino-24-Touch-Screen-LCD-Shield-Tutorial/
Informatii legate de realizarea circuitului:
https://learn.sparkfun.com/tutorials/bi-directional-logic-level-converter-hookup-guide/all Conectarea convertorului de nivel logic cu 4 canale
https://www.youtube.com/watch?v=4DtuOeeYHys
Datasheet:
https://cdn-shop.adafruit.com/datasheets/ILI9341.pdf
http://grobotronics.com/images/datasheets/xpt2046-datasheet.