Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2025:cmoarcas:alexandru.ariton04 [2025/05/14 09:00]
alexandru.ariton04 [Hardware Design]
pm:prj2025:cmoarcas:alexandru.ariton04 [2025/05/28 19:05] (current)
alexandru.ariton04 [Software Design]
Line 53: Line 53:
   * rezultatele simulării   * rezultatele simulării
 </​note>​ </​note>​
 +
  
 ===== Software Design ===== ===== Software Design =====
  
  
-<note tip>+
 Descrierea codului aplicaţiei (firmware): Descrierea codului aplicaţiei (firmware):
-  * mediu de dezvoltare (if any(e.gAVR Studio, CodeVisionAVR) +  * Mediu de dezvoltare: *vim* (i'm serious). 
-  * librării şi surse 3rd-party (e.g. Procyon AVRlib) +  * Am folosit:  
-  * algoritmi şi structuri pe care plănuiţi ​să le implementaţi +  * WiFi.h - pentru protocolul esp_now 
-  * (etapa 3surse şfuncţii implementate +  * esp_now.h ​pentru protocolul esp_now 
-</note>+  * TFT_eSPI.h - pentru driverele de display 
 +  * Am implementat un protocol de comunicatie ​care arata asa: 
 + 
 + 
 + 
 + 
 +#define MOVE_SHIP '​m'​ 
 + 
 +#define ADD_SHIP '​a'​ 
 + 
 +#define PASTE_SHIP '​p'​ 
 + 
 +#define ADD_BOMB '​b'​ 
 + 
 +#define MOVE_BOMB '​B'​ 
 + 
 +#define PASTE_BOMB '​P'​ 
 + 
 + 
 + 
 +protocolul de comunicatii arata asa: "​header|int|int|int"​.  
 +Header-ul poate fi unul din cele 6, sau 's' sau '​w'​. 
 +s inseamna ca se schimba modul - din ships in bombs. 
 +w inseamna ca s a terminat jocul. 
 + 
 + 
 +  * Functii implementate:​ 
 + 
 + 
 + 
 +    void IRAM_ATTR onMoveYPlayer1() 
 + if (!validate()) { 
 + return; 
 +
 + if(millis() - last_movey_time > debounce_delay) { 
 + last_movey_time = millis(); 
 + } else { return; } 
 + if (mode == PUTTING_SHIPS) { 
 + const char *msg = "​m|0|1|0";​ 
 + esp_err_t result = 
 + esp_now_send(peer_mac,​ (uint8_t *)msg, strlen(msg));​ 
 + do_received_command(msg);​ 
 + } else { 
 + const char *msg = "​B|0|1|0";​ 
 + esp_err_t result = 
 + esp_now_send(peer_mac,​ (uint8_t *)msg, strlen(msg));​ 
 + do_received_command(msg);​ 
 +
 +    } 
 + 
 + 
 +Asa arata o functie de intrerupere^,​ de exemplu cea ce misca nava / bomba pe pozitia Y. 
 +Si sursa si destinatarul vor executa comanda. 
 + 
 + 
 + 
 +   void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData,​ int len) 
 +        { 
 + Serial.print("​Received from: "); 
 + for (int = 0; i < 6; i++) { 
 + Serial.print(mac[i],​ HEX); 
 + if (i 5) 
 + Serial.print(":"​);​ 
 +
 + Serial.print("​ | Data: "); 
 + Serial.write(incomingData,​ len); 
 + Serial.print("​Finished_data"​);​ 
 + Serial.print(len);​ 
 + Serial.print("​Finished len"​);​ 
 + char* incoming_data_str = (char*)calloc(len + 1, sizeof(char));​ 
 + strncpy(incoming_data_str,​ (char*)incomingData,​ len); 
 + int r = do_received_command(incoming_data_str);​ 
 + Serial.println(incoming_data_str);​ 
 + free(incoming_data_str);​ 
 +   } 
 + 
 + 
 +Asa arata functia (intreruperea) care handle-uieste primirea comenzii. 
 + 
 + 
 +Am doua arrayuri de date globale: ships[SHIPS_NR] si bombs[BOMB_NR]. Am un pending_ship si un pending_bomb,​ precum si doua variabile: mode - SHIPS/BOMBS si modulus, care este ID-ul fiecarui controller 
 + 
 +* Flow: 
 + 
 +Este mereu randul playerului cu nava albastra. 
 +Primul buton din dreapta muta pe x, al doilea muta pe y, al treilea schimba orientarea navei si da toggle intre x negativ si pozitiv 
 +Ultimul buton pune nava/bomba definitiv pe tabla. 
 + 
 + 
 + 
 + 
 +== Github == 
 + 
 +* https://​github.com/​Barosandu/​pmpriject 
 + 
 +== Video == 
  
 +* https://​youtube.com/​shorts/​LX7CNFMTghA?​si=4i6bsephvSB5epEF
 ===== Rezultate Obţinute ===== ===== Rezultate Obţinute =====
  
pm/prj2025/cmoarcas/alexandru.ariton04.1747202450.txt.gz · Last modified: 2025/05/14 09:00 by alexandru.ariton04
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0