Programme Émetteur pour les TelecoBots - IUT Nice 2019

Dependencies:   mbed

Committer:
Boborski
Date:
Mon Jun 17 13:17:22 2019 +0000
Revision:
1:bac396443157
Parent:
0:0b449162e362
TelecoBot Recepteur V2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Boborski 0:0b449162e362 1 /*
Boborski 0:0b449162e362 2 TélécoBot Emetteur V1
Boborski 0:0b449162e362 3 Bagrowski 2019
Boborski 0:0b449162e362 4
Boborski 0:0b449162e362 5 pour pairer 2 robots changer l'adresse dans le .h de la bibliothèque
Boborski 0:0b449162e362 6
Boborski 0:0b449162e362 7 Le code n'est pas optimisé, car la trame envoyé est l'état de tous les boutons
Boborski 0:0b449162e362 8 et ils sont stockés dans une variable giBPDec à la réception, il vaudrait mieux
Boborski 0:0b449162e362 9 créer cette variable avant l'émission et l'envoyer seule, ça racourcirait la trame,
Boborski 0:0b449162e362 10 donc le temps d'émission et on pourrait émettre plus souvent
Boborski 0:0b449162e362 11 */
Boborski 0:0b449162e362 12
Boborski 0:0b449162e362 13
Boborski 0:0b449162e362 14 #include "mbed.h"
Boborski 0:0b449162e362 15 #include "nRF24L01P.h"
Boborski 0:0b449162e362 16
Boborski 0:0b449162e362 17
Boborski 0:0b449162e362 18 //////////////////////////////////////// DEFINE ////////////////////////////////////////
Boborski 0:0b449162e362 19 //longeur de la trame de la mbed1 vers la mbed2
Boborski 0:0b449162e362 20 #define LONGTRAME 8
Boborski 0:0b449162e362 21 //mode débugage (0= sans, 1= avec)
Boborski 0:0b449162e362 22 #define DEBUG 1
Boborski 0:0b449162e362 23
Boborski 0:0b449162e362 24 //emplacement des données dans la trame
Boborski 0:0b449162e362 25 #define TRAMEETAT 0
Boborski 0:0b449162e362 26 #define TRAMEBPG 1
Boborski 0:0b449162e362 27 #define TRAMEBPD 2
Boborski 0:0b449162e362 28 #define TRAMEBPH 3
Boborski 0:0b449162e362 29 #define TRAMEBPB 4
Boborski 0:0b449162e362 30 #define TRAMEBPBOOST 5
Boborski 0:0b449162e362 31 #define TRAMEBPSERVO 6
Boborski 0:0b449162e362 32 #define TRAMEFIN 7
Boborski 0:0b449162e362 33
Boborski 0:0b449162e362 34 //caractère de fin trame
Boborski 0:0b449162e362 35 #define CARACFIN 42
Boborski 0:0b449162e362 36
Boborski 0:0b449162e362 37 #define PERIODLED 100
Boborski 0:0b449162e362 38
Boborski 0:0b449162e362 39 //////////////////////////////////////// Entrées ////////////////////////////////////////
Boborski 0:0b449162e362 40 DigitalIn BPGauche (p10);
Boborski 0:0b449162e362 41 DigitalIn BPDoite (p11);
Boborski 0:0b449162e362 42 DigitalIn BPHaut (p12);
Boborski 0:0b449162e362 43 DigitalIn BPBas (p13);
Boborski 0:0b449162e362 44 DigitalIn BPBoost (p14);
Boborski 0:0b449162e362 45 DigitalIn BPServo (p15);
Boborski 0:0b449162e362 46 AnalogIn UBat5V (p20);
Boborski 0:0b449162e362 47
Boborski 0:0b449162e362 48
Boborski 0:0b449162e362 49 //////////////////////////////////////// Sorties ////////////////////////////////////////
Boborski 0:0b449162e362 50 PwmOut LedServo (p21);
Boborski 0:0b449162e362 51 PwmOut LedBoost (p22);
Boborski 0:0b449162e362 52 DigitalOut myled1(LED1);
Boborski 0:0b449162e362 53
Boborski 0:0b449162e362 54
Boborski 0:0b449162e362 55 //////////////////////////////////////// Liaison SPI ////////////////////////////////////////
Boborski 0:0b449162e362 56 nRF24L01P my_nrf24l01p(p5, p6, p7, p9, p8, p16); // mosi, miso, sck, csn, ce, irq: non connecté
Boborski 0:0b449162e362 57
Boborski 0:0b449162e362 58
Boborski 0:0b449162e362 59 //////////////////////////////////////// Timer/Ticker ////////////////////////////////////////
Boborski 0:0b449162e362 60 //Ticker appelant la fonction d'envoi
Boborski 0:0b449162e362 61 Ticker ticEnvoi;
Boborski 0:0b449162e362 62
Boborski 0:0b449162e362 63
Boborski 0:0b449162e362 64 //////////////////////////////////////// Prototypes ////////////////////////////////////////
Boborski 0:0b449162e362 65 //Initialisation
Boborski 0:0b449162e362 66 void Init (void);
Boborski 0:0b449162e362 67 //Envoi des données à la mbed2
Boborski 0:0b449162e362 68 void Envoi (void);
Boborski 0:0b449162e362 69 //Acquisition état Boutons Poussoirs
Boborski 0:0b449162e362 70 void Acquisition (void);
Boborski 0:0b449162e362 71 //Affectation de la valeur des BP dans la Trame
Boborski 0:0b449162e362 72 void AffectTrameBp (void);
Boborski 0:0b449162e362 73
Boborski 0:0b449162e362 74
Boborski 0:0b449162e362 75 //////////////////////////////////////// Variables globales ////////////////////////////////////////
Boborski 0:0b449162e362 76 //Trames d'envoi vers le mbed 2
Boborski 0:0b449162e362 77 char gctabTrame[LONGTRAME];
Boborski 0:0b449162e362 78 //Boutons poussoirs
Boborski 0:0b449162e362 79 int giBpGauche, giBpDroite, giBpHaut, giBpBas, giBpBoost, giBpServo;
Boborski 0:0b449162e362 80 //Etat Principal
Boborski 0:0b449162e362 81 int giEtat1= 0;
Boborski 0:0b449162e362 82
Boborski 0:0b449162e362 83
Boborski 0:0b449162e362 84 //////////////////////////////////////// Liaison série ////////////////////////////////////////
Boborski 0:0b449162e362 85 Serial pc(USBTX, USBRX); // tx, rx
Boborski 0:0b449162e362 86
Boborski 0:0b449162e362 87
Boborski 0:0b449162e362 88 //////////////////////////////////////// Main ////////////////////////////////////////
Boborski 0:0b449162e362 89 int main() {
Boborski 0:0b449162e362 90 int i;
Boborski 0:0b449162e362 91
Boborski 0:0b449162e362 92 Init();
Boborski 0:0b449162e362 93
Boborski 0:0b449162e362 94 while(1) {
Boborski 0:0b449162e362 95 Acquisition();
Boborski 0:0b449162e362 96 AffectTrameBp();
Boborski 0:0b449162e362 97
Boborski 0:0b449162e362 98 /*
Boborski 0:0b449162e362 99 if(giBpBoost == 1) LedBoost.write(1);
Boborski 0:0b449162e362 100 else LedBoost.write(0);
Boborski 0:0b449162e362 101 if(giBpServo == 1) LedServo.write(1);
Boborski 0:0b449162e362 102 else LedServo.write(0);
Boborski 0:0b449162e362 103 */
Boborski 0:0b449162e362 104 }
Boborski 0:0b449162e362 105 }
Boborski 0:0b449162e362 106
Boborski 0:0b449162e362 107 //////////////////////////////////////// Fonctions ////////////////////////////////////////
Boborski 0:0b449162e362 108 //Initialisation
Boborski 0:0b449162e362 109 void Init(void)
Boborski 0:0b449162e362 110 {
Boborski 0:0b449162e362 111 //Mode PullUp des Boutons Poussoirs
Boborski 0:0b449162e362 112 BPGauche.mode(PullUp);
Boborski 0:0b449162e362 113 BPDoite.mode(PullUp);
Boborski 0:0b449162e362 114 BPHaut.mode(PullUp);
Boborski 0:0b449162e362 115 BPBas.mode(PullUp);
Boborski 0:0b449162e362 116 BPBoost.mode(PullUp);
Boborski 0:0b449162e362 117 BPServo.mode(PullUp);
Boborski 0:0b449162e362 118
Boborski 0:0b449162e362 119 //Envoi
Boborski 0:0b449162e362 120 ticEnvoi.attach(&Envoi, 0.02);
Boborski 0:0b449162e362 121
Boborski 0:0b449162e362 122 //Affectation du caractère de fin dans la trame
Boborski 0:0b449162e362 123 gctabTrame[TRAMEFIN]= CARACFIN;
Boborski 0:0b449162e362 124
Boborski 0:0b449162e362 125 //Emetteur Recepteur 2,4GHz
Boborski 0:0b449162e362 126 my_nrf24l01p.powerUp();
Boborski 0:0b449162e362 127 my_nrf24l01p.setTransferSize(LONGTRAME);
Boborski 0:0b449162e362 128 my_nrf24l01p.setReceiveMode();
Boborski 0:0b449162e362 129 my_nrf24l01p.disable();
Boborski 0:0b449162e362 130 my_nrf24l01p.enable();
Boborski 0:0b449162e362 131
Boborski 0:0b449162e362 132 // Display the (default) setup of the nRF24L01+ chip
Boborski 0:0b449162e362 133 printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() );
Boborski 0:0b449162e362 134 printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() );
Boborski 0:0b449162e362 135 printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
Boborski 0:0b449162e362 136 printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
Boborski 0:0b449162e362 137 printf( "nRF24L01+ RX Address : 0x%010llX\r\n\n", my_nrf24l01p.getRxAddress() );
Boborski 0:0b449162e362 138
Boborski 0:0b449162e362 139
Boborski 0:0b449162e362 140 //PWM
Boborski 0:0b449162e362 141 LedServo.period_us(PERIODLED);
Boborski 0:0b449162e362 142 LedBoost.period_us(PERIODLED);
Boborski 0:0b449162e362 143 }
Boborski 0:0b449162e362 144
Boborski 0:0b449162e362 145 //Envoi des données à la mbed2
Boborski 0:0b449162e362 146 void Envoi ()
Boborski 0:0b449162e362 147 {
Boborski 0:0b449162e362 148 // Send the transmitbuffer via the nRF24L01+
Boborski 0:0b449162e362 149 my_nrf24l01p.write(NRF24L01P_PIPE_P0, gctabTrame, LONGTRAME);
Boborski 0:0b449162e362 150
Boborski 0:0b449162e362 151 //printf("\n\rEnvoi\n");
Boborski 0:0b449162e362 152 myled1 = !myled1;
Boborski 0:0b449162e362 153 }
Boborski 0:0b449162e362 154
Boborski 0:0b449162e362 155 //Acquisition valeurs Boutons Poussoirs
Boborski 0:0b449162e362 156 void Acquisition (void)
Boborski 0:0b449162e362 157 {
Boborski 0:0b449162e362 158 //Acquisition et stockage de la valeur des BP
Boborski 0:0b449162e362 159 giBpGauche= !BPGauche.read();
Boborski 0:0b449162e362 160 giBpDroite= !BPDoite.read();
Boborski 0:0b449162e362 161 giBpHaut= !BPHaut.read();
Boborski 0:0b449162e362 162 giBpBas= !BPBas.read();
Boborski 0:0b449162e362 163 giBpBoost= BPBoost.read();
Boborski 0:0b449162e362 164 giBpServo= BPServo.read();
Boborski 0:0b449162e362 165
Boborski 0:0b449162e362 166 if(DEBUG == 1)
Boborski 0:0b449162e362 167 {
Boborski 0:0b449162e362 168 //Affichage de l'état des BP pour le débugage
Boborski 0:0b449162e362 169 printf("\n\n\rBpGauche: %d",giBpGauche);
Boborski 0:0b449162e362 170 printf("\n\rBpDroite: %d",giBpDroite);
Boborski 0:0b449162e362 171 printf("\n\rBpHaut: %d",giBpHaut);
Boborski 0:0b449162e362 172 printf("\n\rBpBas: %d",giBpBas);
Boborski 0:0b449162e362 173 printf("\n\rgiBpBoost: %d",giBpBoost);
Boborski 0:0b449162e362 174 printf("\n\rgiBpServo: %d",giBpServo);
Boborski 0:0b449162e362 175 }
Boborski 0:0b449162e362 176 }
Boborski 0:0b449162e362 177
Boborski 0:0b449162e362 178 //Affectation de la valeur des BP dans la Trame
Boborski 0:0b449162e362 179 void AffectTrameBp()
Boborski 0:0b449162e362 180 {
Boborski 0:0b449162e362 181 gctabTrame[TRAMEETAT] = 48+(char)giEtat1 ;
Boborski 0:0b449162e362 182
Boborski 0:0b449162e362 183 gctabTrame[TRAMEBPG]= 48+(char)giBpGauche;
Boborski 0:0b449162e362 184 gctabTrame[TRAMEBPD]= 48+(char)giBpDroite;
Boborski 0:0b449162e362 185 gctabTrame[TRAMEBPH]= 48+(char)giBpHaut;
Boborski 0:0b449162e362 186 gctabTrame[TRAMEBPB]= 48+(char)giBpBas;
Boborski 0:0b449162e362 187 gctabTrame[TRAMEBPBOOST]= 48+(char)giBpBoost;
Boborski 0:0b449162e362 188 gctabTrame[TRAMEBPSERVO]= 48+(char)BPServo;
Boborski 0:0b449162e362 189 }