This shows you the differences between two versions of the page.
|
pm:prj2022:imacovei:andreea.nistor2208 [2022/05/23 00:39] andreea.nistor2208 [Software Design] |
pm:prj2022:imacovei:andreea.nistor2208 [2022/05/25 21:18] (current) andreea.nistor2208 [Rezultate Obţinute] |
||
|---|---|---|---|
| Line 47: | Line 47: | ||
| ===== Software Design ===== | ===== Software Design ===== | ||
| - | |||
| - | <note tip> | ||
| - | Descrierea codului aplicaţiei (firmware): | ||
| - | * mediu de dezvoltare (if any) (e.g. AVR Studio, CodeVisionAVR) | ||
| - | * librării şi surse 3rd-party (e.g. Procyon AVRlib) | ||
| - | * algoritmi şi structuri pe care plănuiţi să le implementaţi | ||
| - | * (etapa 3) surse şi funcţii implementate | ||
| - | </note> | ||
| Mediul de dezvoltare folosit este Arduino IDE, schema bloc a fost realizata in Lucidchart, iar schema electrica in EAGLE. De asemenea am folosit librăriile LiquidCrystal.h pentru LCD si EEPROM.h pentru memoria EEPROM. | Mediul de dezvoltare folosit este Arduino IDE, schema bloc a fost realizata in Lucidchart, iar schema electrica in EAGLE. De asemenea am folosit librăriile LiquidCrystal.h pentru LCD si EEPROM.h pentru memoria EEPROM. | ||
| Line 118: | Line 110: | ||
| * void Test_SnakeLength() -> funcție care pune un 0 în fața scorului în caz ca acesta este mai mic decat 9 (pur estetic) | * void Test_SnakeLength() -> funcție care pune un 0 în fața scorului în caz ca acesta este mai mic decat 9 (pur estetic) | ||
| - | * void rgb_color() -> seteaza culoarea Led-ului RGB in functie de cat de mare e scor-ul (verde -> albastru -> turcoaz -> roz -> portocaliu) | + | * void rgb_color() -> setează culoarea Led-ului RGB in funcție de cât de mare e scor-ul (verde -> albastru -> turcoaz -> roz -> portocaliu) |
| - | * void writeStringToEEPROM(int addrOffset, const String &strToWrite) -> permite scrierea in memoriea EEPROM | + | * void writeStringToEEPROM(int addrOffset, const String &strToWrite) -> permite scrierea în memoriea EEPROM |
| - | * String readStringFromEEPROM(int addrOffset) -> permite citirea din memoriea EEPROM | + | * String readStringFromEEPROM(int addrOffset) -> permite citirea din memoria EEPROM |
| ** setup() ** | ** setup() ** | ||
| Line 139: | Line 131: | ||
| } | } | ||
| - | Definim pinii pentru Led-ul RGB ca OUTPUT (low-impedance state) astfel permintand sa treaca curent prin ei. | + | Definesc: |
| - | Definim pinii pentru butoane ca INPUT_PULLUP folositi sa steze o valoare fixa pentru un pin, in cazul nostru | + | * pinii pentru Led-ul RGB ca OUTPUT (low-impedance state) astfel permințând să treacă curent prin ei. |
| - | daca butonul este apasat acesta o sa fie activ pe 0. | + | * pinii pentru butoane ca INPUT_PULLUP folosiți să seteze o valoare fixă pentru un pin, în cazul nostru, dacă butonul este apăsat, acesta o să fie activ pe 0. |
| - | Definim o intrerupe pentru butonul BUTTON_GameState aflat pe pinul 3 atunci cand el este apasat | + | * o întrerupe pentru butonul BUTTON_GameState aflat pe pinul 3. Atunci când este apasat, generează în avans caracterele jocului și se apelează funcția pentru interfața inițiala a jocului. |
| - | De asemenea, se genereaza in avans caracterele jocului si se apeleaza functia pentru interfata initiala a jocului. | + | |
| ** loop() ** | ** loop() ** | ||
| - | if(Interrupt){ -> verifica daca a aparut o intrerupere | + | if(Interrupt){ // verifică dacă a apărut o întrerupere |
| - | delay(5*DEBOUNCE_DURATION); -> un delay cu rol de debounce | + | delay(5*DEBOUNCE_DURATION); // un delay cu rol de debounce |
| - | switch(gameState){...} -> schimba starea curenta a jocului prematur la apasarea butonului GameState | + | switch(gameState){...} // schimbă starea curentă a jocului prematur la apăsarea butonului GameState |
| - | Interrupt = false;} ->resteaza valoarea setata in intrerupere pana la urmatoarea intrerupere | + | Interrupt = false;} // resteaza valoarea setată in întrerupere până la următoarea întrerupere |
| - | if(digitalRead(BUTTON_UP) == pressed){ -> verifica daca butonul respectiv a fost apelat | + | if(digitalRead(BUTTON_UP) == pressed){ // verifică dacă butonul respectiv a fost apelat |
| - | if(debounce_activate_edge(&debCountBUTTON_UP)){ ->verifica debounce-ul | + | if(debounce_activate_edge(&debCountBUTTON_UP)){ -// verifică debounce-ul |
| - | snakeDirection=SNAKE_UP; -schimba directia snake-ului | + | snakeDirection=SNAKE_UP; // schimbă direcția snake-ului |
| } | } | ||
| }else{ | }else{ | ||
| - | debounce_deactivate(&debCountBUTTON_UP); -> in caz butonul nu a fost apasat, reseteaza timer-ul de debounce | + | debounce_deactivate(&debCountBUTTON_UP); // în cazul în care butonul nu a fost apăsat, resetează timer-ul de debounce |
| } | } | ||
| - | Acelasi tipar de verificare este apelat pentru restul butoanelor care definesc miscarea snake-ului | + | Același tipar de verificare este apelat pentru restul butoanelor care definesc mișcarea snake-ului. |
| - | if(millis()-lastGameUpdateTick>gameUpdateInterval){ | + | if(millis()-lastGameUpdateTick > gameUpdateInterval){ |
| game_calculate_logic(); | game_calculate_logic(); | ||
| game_calculate_display(); | game_calculate_display(); | ||
| Line 168: | Line 159: | ||
| rgb_color(); | rgb_color(); | ||
| lastGameUpdateTick = millis(); | lastGameUpdateTick = millis(); | ||
| - | } -> verifica constant daca jocul trebuie sa-si dea refresh sa recalculeze starea jocului, culoarea led-ului, | + | } // verifica constant dacă jocul trebuie să-ți dea refresh să recalculeze starea jocului, culoarea led-ului, dimensiunea, pozitia snake-ului și a mărului |
| - | dimensiunea + pozitia snake-ului si a marului | + | |
| ===== Rezultate Obţinute ===== | ===== Rezultate Obţinute ===== | ||
| Line 176: | Line 166: | ||
| {{:pm:prj2022:imacovei:snake_lost.jpg?800|}} | {{:pm:prj2022:imacovei:snake_lost.jpg?800|}} | ||
| - | |||
| - | {{:pm:prj2022:imacovei:snake_name_highscore.jpg?800|}} | ||
| - | |||
| - | {{:pm:prj2022:imacovei:snake_highscore.jpg?800|}} | ||
| Demo youtube: https://www.youtube.com/watch?v=DwJfF1_lE9Y | Demo youtube: https://www.youtube.com/watch?v=DwJfF1_lE9Y | ||
| Line 189: | Line 175: | ||
| ===== Download ===== | ===== Download ===== | ||
| - | {{:pm:prj2022:imacovei:snake_nistorandreeaiuliana.zip|}} | + | {{:pm:prj2022:imacovei:proiect_pm.zip|}} |
| + | |||
| ===== Jurnal ===== | ===== Jurnal ===== | ||
| - | <note tip> | + | |
| * 13.04.2022 : Alegere proiect | * 13.04.2022 : Alegere proiect | ||
| * 20.04.2022 : Realizare pagină | * 20.04.2022 : Realizare pagină | ||
| Line 199: | Line 187: | ||
| * 20.05.2022 : Realizare schemă electrică EAGLE | * 20.05.2022 : Realizare schemă electrică EAGLE | ||
| * 23.05.2022 : Finalizare pagină wiki | * 23.05.2022 : Finalizare pagină wiki | ||
| - | </note> | + | |
| ===== Bibliografie/Resurse ===== | ===== Bibliografie/Resurse ===== | ||
| - | <note> | + | [[https://ocw.cs.pub.ro/courses/pm/lab/lab3-2022]] |
| - | Listă cu documente, datasheet-uri, resurse Internet folosite, eventual grupate pe **Resurse Software** şi **Resurse Hardware**. | + | |
| - | </note> | + | |
| [[https://www.arduino.cc/en/Tutorial/BuiltInExamples/Debounce]] | [[https://www.arduino.cc/en/Tutorial/BuiltInExamples/Debounce]] | ||