Yncréa ISEN Nimes CSI3 Electronique Numérique RF24Network Base 00

Dependencies:   mbed RF24Network RF24

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?

UserRevisionLine numberNew 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