Yncréa ISEN Nimes CSI3 Electronique Numérique RF24Network Base 00
Dependencies: mbed RF24Network RF24
main.cpp@6:b5f1a2ddbb56, 2021-05-24 (annotated)
- Committer:
- Giamarchi
- Date:
- Mon May 24 13:38:00 2021 +0000
- Revision:
- 6:b5f1a2ddbb56
- Parent:
- 5:7937720a2afe
New version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Giamarchi | 4:25610749c91c | 1 | /*************************************/ |
Giamarchi | 4:25610749c91c | 2 | // YNCREA ISEN CSI3 |
Giamarchi | 4:25610749c91c | 3 | // Electronique Numérique |
Giamarchi | 4:25610749c91c | 4 | // |
Giamarchi | 4:25610749c91c | 5 | // Cours : Systèmes à microcontrôleur |
Giamarchi | 4:25610749c91c | 6 | // Prof : Frédéric Giamarchi |
Giamarchi | 4:25610749c91c | 7 | // |
Giamarchi | 4:25610749c91c | 8 | // Projet 2021 : Jeu type Simon's pour la rééducation |
Giamarchi | 4:25610749c91c | 9 | // |
Giamarchi | 6:b5f1a2ddbb56 | 10 | // Note : Test module nRF24L01 en mode SPI |
Giamarchi | 5:7937720a2afe | 11 | // |
Giamarchi | 5:7937720a2afe | 12 | // Code pour la base 00 |
Giamarchi | 4:25610749c91c | 13 | /*************************************/ |
akashvibhute | 0:3982c0e9eda1 | 14 | #include "mbed.h" |
akashvibhute | 0:3982c0e9eda1 | 15 | #include <RF24Network.h> |
akashvibhute | 2:608cf8c5c55e | 16 | #include <RF24.h> |
Giamarchi | 4:25610749c91c | 17 | #include "isen32_board.h" |
akashvibhute | 0:3982c0e9eda1 | 18 | |
Giamarchi | 4:25610749c91c | 19 | Serial pc(USBTX, USBRX); // 9600 baud par défaut |
akashvibhute | 0:3982c0e9eda1 | 20 | |
Giamarchi | 4:25610749c91c | 21 | #define nrf_CE PB_3 // D3 sur connecteur Arduino |
Giamarchi | 4:25610749c91c | 22 | #define nrf_CSN PB_12 |
Giamarchi | 4:25610749c91c | 23 | #define spi_MOSI PB_15 |
Giamarchi | 4:25610749c91c | 24 | #define spi_MISO PB_14 |
Giamarchi | 4:25610749c91c | 25 | #define spi_SCK PB_13 |
akashvibhute | 0:3982c0e9eda1 | 26 | |
Giamarchi | 4:25610749c91c | 27 | // Module nRF24 sur SPI2 |
akashvibhute | 3:e9c4d66da50c | 28 | RF24 radio(spi_MOSI, spi_MISO, spi_SCK, nrf_CE, nrf_CSN ); |
akashvibhute | 0:3982c0e9eda1 | 29 | |
akashvibhute | 0:3982c0e9eda1 | 30 | // Network uses that radio |
akashvibhute | 0:3982c0e9eda1 | 31 | RF24Network network(radio); |
akashvibhute | 0:3982c0e9eda1 | 32 | |
Giamarchi | 4:25610749c91c | 33 | // Variables |
Giamarchi | 4:25610749c91c | 34 | uint8_t etat; |
Giamarchi | 4:25610749c91c | 35 | uint8_t adr_tx; |
Giamarchi | 4:25610749c91c | 36 | |
akashvibhute | 0:3982c0e9eda1 | 37 | // Address of our node |
akashvibhute | 3:e9c4d66da50c | 38 | const uint16_t this_node = 00; |
akashvibhute | 0:3982c0e9eda1 | 39 | |
akashvibhute | 0:3982c0e9eda1 | 40 | // Address of the other node |
Giamarchi | 4:25610749c91c | 41 | //const uint16_t node_01 = 01; |
Giamarchi | 4:25610749c91c | 42 | //const uint16_t node_02 = 02; |
Giamarchi | 4:25610749c91c | 43 | //const uint16_t node_03 = 03; |
akashvibhute | 0:3982c0e9eda1 | 44 | |
akashvibhute | 0:3982c0e9eda1 | 45 | // Structure of our payload |
Giamarchi | 5:7937720a2afe | 46 | struct payload_t { |
Giamarchi | 4:25610749c91c | 47 | uint8_t src; // Source du message |
Giamarchi | 4:25610749c91c | 48 | uint8_t dest; // Destination du message |
Giamarchi | 4:25610749c91c | 49 | uint8_t data; // Data du message |
akashvibhute | 0:3982c0e9eda1 | 50 | }; |
akashvibhute | 0:3982c0e9eda1 | 51 | |
Giamarchi | 5:7937720a2afe | 52 | struct _node { |
Giamarchi | 4:25610749c91c | 53 | uint8_t src; // Source du message |
Giamarchi | 4:25610749c91c | 54 | uint8_t dest; // Destination du message |
Giamarchi | 4:25610749c91c | 55 | uint8_t del; |
Giamarchi | 4:25610749c91c | 56 | }; |
akashvibhute | 0:3982c0e9eda1 | 57 | |
akashvibhute | 2:608cf8c5c55e | 58 | int main() |
akashvibhute | 0:3982c0e9eda1 | 59 | { |
Giamarchi | 4:25610749c91c | 60 | etat = 0; |
Giamarchi | 4:25610749c91c | 61 | // Test de l'horloge Systeme |
Giamarchi | 4:25610749c91c | 62 | // pc.printf("CPU SystemCoreClock is %d Hz\r\n", SystemCoreClock); |
Giamarchi | 6:b5f1a2ddbb56 | 63 | Init_Spi(); |
Giamarchi | 6:b5f1a2ddbb56 | 64 | Affiche_Display(this_node); |
Giamarchi | 5:7937720a2afe | 65 | /* Set_8Dels(1); |
Giamarchi | 5:7937720a2afe | 66 | wait_ms(1000); |
Giamarchi | 5:7937720a2afe | 67 | Set_8Dels(0); |
Giamarchi | 5:7937720a2afe | 68 | */ |
Giamarchi | 4:25610749c91c | 69 | _node node; |
akashvibhute | 2:608cf8c5c55e | 70 | |
Giamarchi | 4:25610749c91c | 71 | pc.printf("mBed RF24Network Base 00\r\n"); |
akashvibhute | 0:3982c0e9eda1 | 72 | radio.begin(); |
Giamarchi | 5:7937720a2afe | 73 | |
Giamarchi | 4:25610749c91c | 74 | // Choix du canal de communication (128 canaux disponibles, de 0 à 127) |
Giamarchi | 4:25610749c91c | 75 | // et numéro de l'émetteur, ici le node 00 |
Giamarchi | 4:25610749c91c | 76 | network.begin(/*canal*/ 90, /*node address*/ this_node); |
akashvibhute | 0:3982c0e9eda1 | 77 | wait_ms(2000); |
akashvibhute | 2:608cf8c5c55e | 78 | |
Giamarchi | 5:7937720a2afe | 79 | while(1) { |
Giamarchi | 4:25610749c91c | 80 | // Refresh Dels |
Giamarchi | 5:7937720a2afe | 81 | // Set_8Dels(node.del); |
Giamarchi | 5:7937720a2afe | 82 | |
akashvibhute | 0:3982c0e9eda1 | 83 | // Pump the network regularly |
akashvibhute | 0:3982c0e9eda1 | 84 | network.update(); |
akashvibhute | 2:608cf8c5c55e | 85 | |
Giamarchi | 5:7937720a2afe | 86 | // Machine d'états en mode réception par défaut |
Giamarchi | 5:7937720a2afe | 87 | switch (etat) { |
Giamarchi | 4:25610749c91c | 88 | case 0: // ---> Reception <--- |
Giamarchi | 5:7937720a2afe | 89 | while ( network.available() ) { // Si réception |
Giamarchi | 4:25610749c91c | 90 | RF24NetworkHeader header_rx; // Création d'un entête |
Giamarchi | 4:25610749c91c | 91 | payload_t payload_rx; // Création d'une structure pour le message |
Giamarchi | 4:25610749c91c | 92 | network.read(header_rx,&payload_rx,sizeof(payload_rx)); // Lecture du message |
Giamarchi | 4:25610749c91c | 93 | pc.printf("Node %d -> Node %d : msg %d\r\n", payload_rx.src, payload_rx.dest, payload_rx.data); |
Giamarchi | 5:7937720a2afe | 94 | |
Giamarchi | 5:7937720a2afe | 95 | if (payload_rx.dest == 00) { |
Giamarchi | 4:25610749c91c | 96 | node.del = payload_rx.data%6; |
Giamarchi | 4:25610749c91c | 97 | } |
Giamarchi | 5:7937720a2afe | 98 | else { |
Giamarchi | 4:25610749c91c | 99 | etat = 1; |
Giamarchi | 4:25610749c91c | 100 | node.src = payload_rx.src; |
Giamarchi | 4:25610749c91c | 101 | node.dest = payload_rx.dest; |
Giamarchi | 4:25610749c91c | 102 | node.del = payload_rx.data; |
Giamarchi | 4:25610749c91c | 103 | } |
Giamarchi | 4:25610749c91c | 104 | } |
Giamarchi | 4:25610749c91c | 105 | break; |
Giamarchi | 4:25610749c91c | 106 | case 1: // ---> Emission <--- |
Giamarchi | 5:7937720a2afe | 107 | // RF24NetworkHeader header_tx; |
Giamarchi | 5:7937720a2afe | 108 | payload_t payload_tx; |
Giamarchi | 5:7937720a2afe | 109 | payload_tx.src = node.src; |
Giamarchi | 5:7937720a2afe | 110 | payload_tx.dest = node.dest; |
Giamarchi | 5:7937720a2afe | 111 | payload_tx.data = node.del; |
Giamarchi | 5:7937720a2afe | 112 | pc.printf("Envoi..."); |
Giamarchi | 5:7937720a2afe | 113 | RF24NetworkHeader header_tx(payload_tx.dest); |
Giamarchi | 5:7937720a2afe | 114 | bool ok = network.write(header_tx,&payload_tx,sizeof(payload_tx)); |
Giamarchi | 5:7937720a2afe | 115 | if (ok) { |
Giamarchi | 5:7937720a2afe | 116 | pc.printf("ok.\r\n"); |
Giamarchi | 5:7937720a2afe | 117 | } else |
Giamarchi | 5:7937720a2afe | 118 | pc.printf("erreur.\r\n"); |
Giamarchi | 5:7937720a2afe | 119 | |
Giamarchi | 5:7937720a2afe | 120 | etat = 0; |
Giamarchi | 4:25610749c91c | 121 | break; |
Giamarchi | 4:25610749c91c | 122 | default: |
Giamarchi | 4:25610749c91c | 123 | etat = 0; |
Giamarchi | 4:25610749c91c | 124 | break; |
Giamarchi | 5:7937720a2afe | 125 | } // switch |
akashvibhute | 1:5be48a9550c3 | 126 | |
Giamarchi | 5:7937720a2afe | 127 | } // while(1) |
Giamarchi | 5:7937720a2afe | 128 | return 0; |
Giamarchi | 5:7937720a2afe | 129 | } // main |