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]] |