This shows you the differences between two versions of the page.
pm:prj2025:cmoarcas:alexandru.ariton04 [2025/05/20 19:32] alexandru.ariton04 [Software 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 ===== | ||
Line 68: | Line 69: | ||
- | ``` | + | |
#define MOVE_SHIP 'm' | #define MOVE_SHIP 'm' | ||
+ | |||
#define ADD_SHIP 'a' | #define ADD_SHIP 'a' | ||
+ | |||
#define PASTE_SHIP 'p' | #define PASTE_SHIP 'p' | ||
+ | |||
#define ADD_BOMB 'b' | #define ADD_BOMB 'b' | ||
+ | |||
#define MOVE_BOMB 'B' | #define MOVE_BOMB 'B' | ||
+ | |||
#define PASTE_BOMB 'P' | #define PASTE_BOMB 'P' | ||
- | ``` | + | |
protocolul de comunicatii arata asa: "header|int|int|int". | protocolul de comunicatii arata asa: "header|int|int|int". | ||
Line 85: | Line 92: | ||
* Functii implementate: | * Functii implementate: | ||
- | ``` | ||
- | void IRAM_ATTR onMoveYPlayer1() { | + | |
+ | void IRAM_ATTR onMoveYPlayer1() { | ||
if (!validate()) { | if (!validate()) { | ||
return; | return; | ||
Line 105: | Line 112: | ||
do_received_command(msg); | do_received_command(msg); | ||
} | } | ||
- | } | + | } |
- | ``` | + | |
Asa arata o functie de intrerupere^, de exemplu cea ce misca nava / bomba pe pozitia Y. | Asa arata o functie de intrerupere^, de exemplu cea ce misca nava / bomba pe pozitia Y. | ||
Si sursa si destinatarul vor executa comanda. | Si sursa si destinatarul vor executa comanda. | ||
- | ``` | ||
- | void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData, int len) | + | |
- | { | + | void OnDataRecv(const uint8_t *mac, const uint8_t *incomingData, int len) |
+ | { | ||
Serial.print("Received from: "); | Serial.print("Received from: "); | ||
for (int i = 0; i < 6; i++) { | for (int i = 0; i < 6; i++) { | ||
Line 126: | Line 133: | ||
Serial.print(len); | Serial.print(len); | ||
Serial.print("Finished len"); | Serial.print("Finished len"); | ||
- | |||
char* incoming_data_str = (char*)calloc(len + 1, sizeof(char)); | char* incoming_data_str = (char*)calloc(len + 1, sizeof(char)); | ||
- | |||
strncpy(incoming_data_str, (char*)incomingData, len); | strncpy(incoming_data_str, (char*)incomingData, len); | ||
int r = do_received_command(incoming_data_str); | int r = do_received_command(incoming_data_str); | ||
Serial.println(incoming_data_str); | Serial.println(incoming_data_str); | ||
free(incoming_data_str); | free(incoming_data_str); | ||
- | } | + | } |
Line 141: | Line 146: | ||
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 | 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 ===== | ||