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

Dependencies:   mbed RF24Network RF24

Committer:
Giamarchi
Date:
Sun May 23 23:40:19 2021 +0000
Revision:
5:7937720a2afe
Parent:
4:25610749c91c
Child:
6:b5f1a2ddbb56
no modif

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 5:7937720a2afe 10 // Note : Utilisation du 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 4:25610749c91c 63 // pc.baud(9600);
Giamarchi 5:7937720a2afe 64 /* Set_8Dels(1);
Giamarchi 5:7937720a2afe 65 wait_ms(1000);
Giamarchi 5:7937720a2afe 66 Set_8Dels(0);
Giamarchi 5:7937720a2afe 67 */
Giamarchi 4:25610749c91c 68 _node node;
akashvibhute 2:608cf8c5c55e 69
Giamarchi 4:25610749c91c 70 pc.printf("mBed RF24Network Base 00\r\n");
akashvibhute 0:3982c0e9eda1 71 radio.begin();
Giamarchi 5:7937720a2afe 72
Giamarchi 4:25610749c91c 73 // Choix du canal de communication (128 canaux disponibles, de 0 à 127)
Giamarchi 4:25610749c91c 74 // et numéro de l'émetteur, ici le node 00
Giamarchi 4:25610749c91c 75 network.begin(/*canal*/ 90, /*node address*/ this_node);
akashvibhute 0:3982c0e9eda1 76 wait_ms(2000);
akashvibhute 2:608cf8c5c55e 77
Giamarchi 5:7937720a2afe 78 while(1) {
Giamarchi 4:25610749c91c 79 // Refresh Dels
Giamarchi 5:7937720a2afe 80 // Set_8Dels(node.del);
Giamarchi 5:7937720a2afe 81
akashvibhute 0:3982c0e9eda1 82 // Pump the network regularly
akashvibhute 0:3982c0e9eda1 83 network.update();
akashvibhute 2:608cf8c5c55e 84
Giamarchi 5:7937720a2afe 85 // Machine d'états en mode réception par défaut
Giamarchi 5:7937720a2afe 86 switch (etat) {
Giamarchi 4:25610749c91c 87 case 0: // ---> Reception <---
Giamarchi 5:7937720a2afe 88 while ( network.available() ) { // Si réception
Giamarchi 4:25610749c91c 89 RF24NetworkHeader header_rx; // Création d'un entête
Giamarchi 4:25610749c91c 90 payload_t payload_rx; // Création d'une structure pour le message
Giamarchi 4:25610749c91c 91 network.read(header_rx,&payload_rx,sizeof(payload_rx)); // Lecture du message
Giamarchi 4:25610749c91c 92 pc.printf("Node %d -> Node %d : msg %d\r\n", payload_rx.src, payload_rx.dest, payload_rx.data);
Giamarchi 5:7937720a2afe 93
Giamarchi 5:7937720a2afe 94 if (payload_rx.dest == 00) {
Giamarchi 4:25610749c91c 95 node.del = payload_rx.data%6;
Giamarchi 4:25610749c91c 96 }
Giamarchi 5:7937720a2afe 97 else {
Giamarchi 4:25610749c91c 98 etat = 1;
Giamarchi 4:25610749c91c 99 node.src = payload_rx.src;
Giamarchi 4:25610749c91c 100 node.dest = payload_rx.dest;
Giamarchi 4:25610749c91c 101 node.del = payload_rx.data;
Giamarchi 4:25610749c91c 102 }
Giamarchi 4:25610749c91c 103 }
Giamarchi 4:25610749c91c 104 break;
Giamarchi 4:25610749c91c 105 case 1: // ---> Emission <---
Giamarchi 5:7937720a2afe 106 // RF24NetworkHeader header_tx;
Giamarchi 5:7937720a2afe 107 payload_t payload_tx;
Giamarchi 5:7937720a2afe 108 payload_tx.src = node.src;
Giamarchi 5:7937720a2afe 109 payload_tx.dest = node.dest;
Giamarchi 5:7937720a2afe 110 payload_tx.data = node.del;
Giamarchi 5:7937720a2afe 111 pc.printf("Envoi...");
Giamarchi 5:7937720a2afe 112 RF24NetworkHeader header_tx(payload_tx.dest);
Giamarchi 5:7937720a2afe 113 bool ok = network.write(header_tx,&payload_tx,sizeof(payload_tx));
Giamarchi 5:7937720a2afe 114 if (ok) {
Giamarchi 5:7937720a2afe 115 pc.printf("ok.\r\n");
Giamarchi 5:7937720a2afe 116 } else
Giamarchi 5:7937720a2afe 117 pc.printf("erreur.\r\n");
Giamarchi 5:7937720a2afe 118
Giamarchi 5:7937720a2afe 119 etat = 0;
Giamarchi 4:25610749c91c 120 break;
Giamarchi 4:25610749c91c 121 default:
Giamarchi 4:25610749c91c 122 etat = 0;
Giamarchi 4:25610749c91c 123 break;
Giamarchi 5:7937720a2afe 124 } // switch
akashvibhute 1:5be48a9550c3 125
Giamarchi 5:7937720a2afe 126 } // while(1)
Giamarchi 5:7937720a2afe 127 return 0;
Giamarchi 5:7937720a2afe 128 } // main