This shows you the differences between two versions of the page.
|
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.g. AVR 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 3) surse şi 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 i = 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 ===== | ||