This shows you the differences between two versions of the page.
pm:prj2021:agrigore:snake [2021/05/26 19:01] george.bukkosi [Software Design] |
pm:prj2021:agrigore:snake [2021/05/31 10:46] (current) george.bukkosi [Hardware Design] |
||
---|---|---|---|
Line 29: | Line 29: | ||
{{ snake.png }} | {{ snake.png }} | ||
+ | |||
+ | |||
+ | Componentele conectate arata astfel: | ||
+ | |||
+ | |||
+ | {{ hardwaredesignscaleddown.jpg }} | ||
+ | |||
+ | |||
+ | {{ conectarelcd_50.jpeg }} | ||
+ | |||
+ | |||
+ | Schema electrica este urmatoarea: | ||
+ | |||
+ | {{ schemasnake.png }} | ||
+ | |||
+ | Configurarea pinilor este urmatoarea: | ||
+ | |||
+ | Butoane -> Arduino: | ||
+ | |||
+ | * Buton1 -> D2 | ||
+ | * Buton2 -> D3 | ||
+ | * Buton3 -> D4 | ||
+ | * Buton4 -> D5 | ||
+ | * Buton5 -> D6 | ||
+ | |||
+ | LCD -> Arduino: | ||
+ | |||
+ | * GND-> GND | ||
+ | * VCC -> 5V | ||
+ | * RS -> D10 | ||
+ | * R/W -> D11 | ||
+ | * E -> D13 | ||
+ | * PSB -> GND | ||
+ | * RST -> D8 | ||
+ | * BLA -> 3.3V | ||
+ | * BLK -> GND | ||
+ | |||
====== Software Design ====== | ====== Software Design ====== | ||
Line 39: | Line 76: | ||
Mediul de dezvoltare utilizat a fost Arduino IDE. | Mediul de dezvoltare utilizat a fost Arduino IDE. | ||
+ | |||
+ | Am folosit o coada (din biblioteca ArduinoQueue.h) pentru a stoca pozitiile sarpelui. Pozitia sa initiala este aleator generata. Fiecare patratel din corpul sarpelui are asociata cate o pozitie (x,y) a coltului stanga sus. La afisarea pe ecran se foloseste functia u8g2.drawBox(), care ia ca parametru coltul din stanga sus si size-ul laturii in pixeli. Pentru pozitie am creat structura Position, ce are x si y. De fiecare data cand sarpele creste, o noua pozitie este adaugata in coada. | ||
+ | |||
+ | Deoarece update-ul sarpelui vrem sa il facem independent de functia de loop() care se acceseaza de foarte multe ori pe secunda (la frecventa procesorului arduino), functia updateSnake() va fi apelata doar cand a trecut suficient timp (care este considerat variabila "speed", deoarece modificarea sa creeaza iluzia de viteza marita a sarpelui cu cat se avanseaza in dificultate). Update-ul sarpelui la fiecare "frame" se face in functie de doua detalii: directia in care se merge si daca sarpele a mancat sau nu. Miscarea sarpelui se realizeaza prin randarea pe directia corespunzatoare a unui patratel in fata corpului deja existent si stergerea unuia de la coada. In cazul in care se intampla ca sarpele sa fi si mancat la acel frame, se randeaza doua patratele la cap. | ||
+ | |||
+ | De asemenea, la fiecare apelare a loop-ului se verifica daca exista un bait generat, iar daca nu este, se genereaza la o pozitie aleatoare pe ecran. Input-ul va fi considerat si updatat la fiecare loop(), nu la fiecare "frame", pentru o actualizare cat mai precisa. In cazul in care nu s-a modificat directia, se va intra in loop() cu directia anterior setata. | ||
+ | |||
+ | Functia isSnakeCollision() verifica daca sarpele are o coliziune cu el insusi si intoarce un flag, care este verificat la fiecare loop(). | ||
Line 54: | Line 99: | ||
Am invatat sa ma documentez despre conectarea pieselor cu Arduino (in cazul de fata display-ul ST7920) si citirea inputului generat de butoanele conectate la breadboard. De asemenea, lucrul cu IDE-ul oferit de Arduino a fost o experienta placuta, iar afisarea pe display a reprezentat un mic challenge ce a necesitat de asemenea documentare. | Am invatat sa ma documentez despre conectarea pieselor cu Arduino (in cazul de fata display-ul ST7920) si citirea inputului generat de butoanele conectate la breadboard. De asemenea, lucrul cu IDE-ul oferit de Arduino a fost o experienta placuta, iar afisarea pe display a reprezentat un mic challenge ce a necesitat de asemenea documentare. | ||
====== Download ====== | ====== Download ====== | ||
- | [[http://ocw.cs.pub.ro/courses/pm/prj2021/agrigore/snake?do=export_pdf|Descarca PDF]] | + | <html><a class="media mediafile mf_pdf" href="?do=export_pdf">Export to PDF</a></html> |
+ | |||
+ | |||
+ | Download arhiva (cod+documentatie wiki): | ||
+ | {{ bukkosigeorgedaniel_proiectpm.zip }} | ||
====== Jurnal ====== | ====== Jurnal ====== | ||
Line 64: | Line 113: | ||
* **14 mai** -- Finalizare implementare software | * **14 mai** -- Finalizare implementare software | ||
* **26 mai** -- Realizare video demo | * **26 mai** -- Realizare video demo | ||
- | * **TBD** -- Realizare schema electrica | + | * **27 mai** -- Realizare schema electrica |
+ | * **31 mai** -- Update final wiki si upload proiect | ||
* **31 mai** -- Prezentarea proiectului la laborator | * **31 mai** -- Prezentarea proiectului la laborator | ||
Line 74: | Line 124: | ||
* https://github.com/olikraus/u8g2 (u8g2 library for ST7920 display) | * https://github.com/olikraus/u8g2 (u8g2 library for ST7920 display) | ||
* https://github.com/EinarArnason/ArduinoQueue (ArduinoQueue) | * https://github.com/EinarArnason/ArduinoQueue (ArduinoQueue) | ||
+ | * https://www.arduino.cc/reference/en/language/functions/time/millis/ ("framing" system) | ||