Programme Récepteur (V1) pour les TelecoBots - IUT Nice 2019

Dependencies:   mbed

Committer:
Boborski
Date:
Mon Jun 17 13:18:11 2019 +0000
Revision:
1:86813b72c1aa
Parent:
0:e73569376c9a
TelecoBot Recepteur V1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Boborski 0:e73569376c9a 1 /*
Boborski 0:e73569376c9a 2 TélécoBot Recepteur V1
Boborski 0:e73569376c9a 3 Bagrowski 2019
Boborski 0:e73569376c9a 4
Boborski 0:e73569376c9a 5 pour pairer 2 robots changer l'adresse dans le .h de la bibliothèque
Boborski 0:e73569376c9a 6 */
Boborski 0:e73569376c9a 7
Boborski 0:e73569376c9a 8
Boborski 0:e73569376c9a 9 #include "mbed.h"
Boborski 0:e73569376c9a 10 #include "nRF24L01P.h"
Boborski 0:e73569376c9a 11
Boborski 0:e73569376c9a 12
Boborski 0:e73569376c9a 13 //////////////////////////////////////// DEFINE ////////////////////////////////////////
Boborski 0:e73569376c9a 14 //longeur de la trame de la mbed1 vers la mbed2
Boborski 0:e73569376c9a 15 #define LONGTRAME 8
Boborski 0:e73569376c9a 16 //mode débugage (0= sans, 1= avec)
Boborski 0:e73569376c9a 17 #define DEBUG 0
Boborski 0:e73569376c9a 18
Boborski 0:e73569376c9a 19 //emplacement des données dans la trame
Boborski 0:e73569376c9a 20 #define TRAMEETAT 0
Boborski 0:e73569376c9a 21 #define TRAMEBPG 1
Boborski 0:e73569376c9a 22 #define TRAMEBPD 2
Boborski 0:e73569376c9a 23 #define TRAMEBPH 3
Boborski 0:e73569376c9a 24 #define TRAMEBPB 4
Boborski 0:e73569376c9a 25 #define TRAMEBPBOOST 5
Boborski 0:e73569376c9a 26 #define TRAMEBPSERVO 6
Boborski 0:e73569376c9a 27 #define TRAMEFIN 7
Boborski 0:e73569376c9a 28
Boborski 0:e73569376c9a 29 //caractère de fin trame
Boborski 0:e73569376c9a 30 #define CARACFIN 42
Boborski 0:e73569376c9a 31
Boborski 0:e73569376c9a 32 //période moteurs
Boborski 0:e73569376c9a 33 #define PERIODMOTEUR 0.00005
Boborski 0:e73569376c9a 34
Boborski 0:e73569376c9a 35 //vitesse des moteurs
Boborski 0:e73569376c9a 36 #define VMOTARRET 0
Boborski 0:e73569376c9a 37 #define VMOT1 25
Boborski 0:e73569376c9a 38 #define VMOT2 20
Boborski 0:e73569376c9a 39 #define VMOTROTATION 10
Boborski 0:e73569376c9a 40 #define VMOTBOOST 30
Boborski 0:e73569376c9a 41 #define AVANT 1
Boborski 0:e73569376c9a 42 #define ARRIERE 0
Boborski 0:e73569376c9a 43
Boborski 0:e73569376c9a 44
Boborski 0:e73569376c9a 45 //////////////////////////////////////// Entrées ////////////////////////////////////////
Boborski 0:e73569376c9a 46 AnalogIn UBat5V (p20);
Boborski 0:e73569376c9a 47 AnalogIn UBat12V (p19);
Boborski 0:e73569376c9a 48
Boborski 0:e73569376c9a 49
Boborski 0:e73569376c9a 50 //////////////////////////////////////// Sorties ////////////////////////////////////////
Boborski 0:e73569376c9a 51 DigitalOut myled1(LED1);
Boborski 0:e73569376c9a 52
Boborski 0:e73569376c9a 53 //Sens des 2 moteurs
Boborski 0:e73569376c9a 54 DigitalOut MotGSens (p24);
Boborski 0:e73569376c9a 55 DigitalOut MotDSens (p30);
Boborski 0:e73569376c9a 56
Boborski 0:e73569376c9a 57 //PWM des moteurs
Boborski 0:e73569376c9a 58 PwmOut MotGPwm (p25);
Boborski 0:e73569376c9a 59 PwmOut MotDPwm (p26);
Boborski 0:e73569376c9a 60
Boborski 0:e73569376c9a 61 PwmOut ServoMoteur (p21);
Boborski 0:e73569376c9a 62
Boborski 0:e73569376c9a 63
Boborski 0:e73569376c9a 64 //////////////////////////////////////// Liaison SPI ////////////////////////////////////////
Boborski 0:e73569376c9a 65 nRF24L01P my_nrf24l01p(p5, p6, p7, p9, p8, p16); // mosi, miso, sck, csn, ce, irq: non connecté
Boborski 0:e73569376c9a 66
Boborski 0:e73569376c9a 67
Boborski 0:e73569376c9a 68 //////////////////////////////////////// Timer/Ticker ////////////////////////////////////////
Boborski 0:e73569376c9a 69
Boborski 0:e73569376c9a 70
Boborski 0:e73569376c9a 71 //////////////////////////////////////// Prototypes ////////////////////////////////////////
Boborski 0:e73569376c9a 72 //Initialisation
Boborski 0:e73569376c9a 73 void Init (void);
Boborski 0:e73569376c9a 74 //Réception des données de la mbed1
Boborski 0:e73569376c9a 75 void Reception24 (void);
Boborski 0:e73569376c9a 76 //Deplacement
Boborski 0:e73569376c9a 77 void Move(void);
Boborski 0:e73569376c9a 78
Boborski 0:e73569376c9a 79
Boborski 0:e73569376c9a 80 //////////////////////////////////////// Variables globales ////////////////////////////////////////
Boborski 0:e73569376c9a 81 //Trames de réception vers le mbed 1
Boborski 0:e73569376c9a 82 char gctabTrame[LONGTRAME];
Boborski 0:e73569376c9a 83 char gctabTrameR[LONGTRAME];
Boborski 0:e73569376c9a 84 //Trame dans laquelle on stocke la Trame de réception lorsqu'elle est valide
Boborski 0:e73569376c9a 85 char gctabUtile[LONGTRAME];
Boborski 0:e73569376c9a 86 //Etat Principal
Boborski 0:e73569376c9a 87 int giEtat1=0, giLTrameRecue=0, i=0;
Boborski 0:e73569376c9a 88 int giBPDec=0;
Boborski 0:e73569376c9a 89 int giVMotG=0, giVMotD=0, giSMotG= 0, giSMotD= 0;
Boborski 0:e73569376c9a 90
Boborski 0:e73569376c9a 91
Boborski 0:e73569376c9a 92 //////////////////////////////////////// Liaison série ////////////////////////////////////////
Boborski 0:e73569376c9a 93 Serial pc(USBTX, USBRX); // tx, rx
Boborski 0:e73569376c9a 94
Boborski 0:e73569376c9a 95
Boborski 0:e73569376c9a 96 //////////////////////////////////////// Main ////////////////////////////////////////
Boborski 0:e73569376c9a 97 int main() {
Boborski 0:e73569376c9a 98
Boborski 0:e73569376c9a 99 Init();
Boborski 0:e73569376c9a 100
Boborski 0:e73569376c9a 101 while(1) {
Boborski 0:e73569376c9a 102 Reception24();
Boborski 0:e73569376c9a 103
Boborski 0:e73569376c9a 104 //Création d'un bus avec les valeurs entières du tableau d'état des BP
Boborski 0:e73569376c9a 105 giBPDec = 8*(gctabTrame[TRAMEBPG]-48) + 4*(gctabTrame[TRAMEBPD]-48) + 2*(gctabTrame[TRAMEBPH]-48) + 1*(gctabTrame[TRAMEBPB]-48);
Boborski 0:e73569376c9a 106
Boborski 0:e73569376c9a 107 //gestion des états des BP
Boborski 0:e73569376c9a 108 switch(giBPDec){
Boborski 0:e73569376c9a 109 //Arrière
Boborski 0:e73569376c9a 110 case 1:
Boborski 0:e73569376c9a 111 giVMotG= VMOT1;
Boborski 0:e73569376c9a 112 giSMotG= ARRIERE;
Boborski 0:e73569376c9a 113
Boborski 0:e73569376c9a 114 giVMotD= VMOT1;
Boborski 0:e73569376c9a 115 giSMotD= ARRIERE;
Boborski 0:e73569376c9a 116 break;
Boborski 0:e73569376c9a 117
Boborski 0:e73569376c9a 118 //Avant
Boborski 0:e73569376c9a 119 case 2:
Boborski 0:e73569376c9a 120 giVMotG= VMOT1;
Boborski 0:e73569376c9a 121 giSMotG= AVANT;
Boborski 0:e73569376c9a 122
Boborski 0:e73569376c9a 123 giVMotD= VMOT1;
Boborski 0:e73569376c9a 124 giSMotD= AVANT;
Boborski 0:e73569376c9a 125 break;
Boborski 0:e73569376c9a 126 //Droite
Boborski 0:e73569376c9a 127 case 4:
Boborski 0:e73569376c9a 128 giVMotG= VMOTROTATION;
Boborski 0:e73569376c9a 129 giSMotG= AVANT;
Boborski 0:e73569376c9a 130
Boborski 0:e73569376c9a 131 giVMotD= VMOTROTATION;
Boborski 0:e73569376c9a 132 giSMotD= ARRIERE;
Boborski 0:e73569376c9a 133 break;
Boborski 0:e73569376c9a 134 //Arrière droite
Boborski 0:e73569376c9a 135 case 5:
Boborski 0:e73569376c9a 136 giVMotG= VMOTARRET;
Boborski 0:e73569376c9a 137 giSMotG= AVANT;
Boborski 0:e73569376c9a 138
Boborski 0:e73569376c9a 139 giVMotD= VMOT2;
Boborski 0:e73569376c9a 140 giSMotD= ARRIERE;
Boborski 0:e73569376c9a 141 break;
Boborski 0:e73569376c9a 142 //Avant droite
Boborski 0:e73569376c9a 143 case 6:
Boborski 0:e73569376c9a 144 giVMotG= VMOT2;
Boborski 0:e73569376c9a 145 giSMotG= AVANT;
Boborski 0:e73569376c9a 146
Boborski 0:e73569376c9a 147 giVMotD= VMOTARRET;
Boborski 0:e73569376c9a 148 giSMotD= AVANT;
Boborski 0:e73569376c9a 149 break;
Boborski 0:e73569376c9a 150 //Gauche
Boborski 0:e73569376c9a 151 case 8:
Boborski 0:e73569376c9a 152 giVMotG= VMOTROTATION;
Boborski 0:e73569376c9a 153 giSMotG= ARRIERE;
Boborski 0:e73569376c9a 154
Boborski 0:e73569376c9a 155 giVMotD= VMOTROTATION;
Boborski 0:e73569376c9a 156 giSMotD= AVANT;
Boborski 0:e73569376c9a 157 break;
Boborski 0:e73569376c9a 158 //Arrière gauche
Boborski 0:e73569376c9a 159 case 9:
Boborski 0:e73569376c9a 160 giVMotG= VMOT2;
Boborski 0:e73569376c9a 161 giSMotG= ARRIERE;
Boborski 0:e73569376c9a 162
Boborski 0:e73569376c9a 163 giVMotD= VMOTARRET;
Boborski 0:e73569376c9a 164 giSMotD= AVANT;
Boborski 0:e73569376c9a 165 break;
Boborski 0:e73569376c9a 166 //Avant gauche
Boborski 0:e73569376c9a 167 case 10:
Boborski 0:e73569376c9a 168 giVMotG= VMOTARRET;
Boborski 0:e73569376c9a 169 giSMotG= AVANT;
Boborski 0:e73569376c9a 170
Boborski 0:e73569376c9a 171 giVMotD= VMOT2;
Boborski 0:e73569376c9a 172 giSMotD= AVANT;
Boborski 0:e73569376c9a 173 break;
Boborski 0:e73569376c9a 174 default:
Boborski 0:e73569376c9a 175 giVMotG= VMOTARRET;
Boborski 0:e73569376c9a 176 giSMotG= AVANT;
Boborski 0:e73569376c9a 177
Boborski 0:e73569376c9a 178 giVMotD= VMOTARRET;
Boborski 0:e73569376c9a 179 giSMotD= AVANT;
Boborski 0:e73569376c9a 180 }
Boborski 0:e73569376c9a 181
Boborski 0:e73569376c9a 182 //Boost
Boborski 0:e73569376c9a 183 if(gctabTrame[TRAMEBPBOOST] == 49 && giBPDec == 2)
Boborski 0:e73569376c9a 184 {
Boborski 0:e73569376c9a 185 giVMotG= VMOTBOOST;
Boborski 0:e73569376c9a 186 giSMotG= AVANT;
Boborski 0:e73569376c9a 187
Boborski 0:e73569376c9a 188 giVMotD= VMOTBOOST;
Boborski 0:e73569376c9a 189 giSMotD= AVANT;
Boborski 0:e73569376c9a 190 }
Boborski 0:e73569376c9a 191
Boborski 0:e73569376c9a 192 Move();
Boborski 0:e73569376c9a 193 }
Boborski 0:e73569376c9a 194 }
Boborski 0:e73569376c9a 195
Boborski 0:e73569376c9a 196 //////////////////////////////////////// Fonctions ////////////////////////////////////////
Boborski 0:e73569376c9a 197 //Initialisation
Boborski 0:e73569376c9a 198 void Init ()
Boborski 0:e73569376c9a 199 {
Boborski 0:e73569376c9a 200 //Emetteur Recepteur 2,4GHz
Boborski 0:e73569376c9a 201 my_nrf24l01p.powerUp();
Boborski 0:e73569376c9a 202 my_nrf24l01p.setTransferSize(LONGTRAME);
Boborski 0:e73569376c9a 203 my_nrf24l01p.setReceiveMode();
Boborski 0:e73569376c9a 204 my_nrf24l01p.disable();
Boborski 0:e73569376c9a 205 my_nrf24l01p.enable();
Boborski 0:e73569376c9a 206
Boborski 0:e73569376c9a 207 // Display the (default) setup of the nRF24L01+ chip
Boborski 0:e73569376c9a 208 pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() );
Boborski 0:e73569376c9a 209 pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() );
Boborski 0:e73569376c9a 210 //pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() );
Boborski 0:e73569376c9a 211 pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
Boborski 0:e73569376c9a 212 pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n\n", my_nrf24l01p.getRxAddress() );
Boborski 0:e73569376c9a 213
Boborski 0:e73569376c9a 214 //Moteurs
Boborski 0:e73569376c9a 215 MotGPwm.period(PERIODMOTEUR);
Boborski 0:e73569376c9a 216 MotDPwm.period(PERIODMOTEUR);
Boborski 0:e73569376c9a 217 }
Boborski 0:e73569376c9a 218
Boborski 0:e73569376c9a 219 //Réception des données du mbed1
Boborski 0:e73569376c9a 220 void Reception24 ()
Boborski 0:e73569376c9a 221 {
Boborski 0:e73569376c9a 222 // If we've received anything in the nRF24L01+...
Boborski 0:e73569376c9a 223 if ( my_nrf24l01p.readable() ) {
Boborski 0:e73569376c9a 224 // ...read the data into the receive buffer
Boborski 0:e73569376c9a 225 giLTrameRecue = my_nrf24l01p.read( NRF24L01P_PIPE_P0, gctabTrame, LONGTRAME);
Boborski 0:e73569376c9a 226 myled1 = !myled1;
Boborski 0:e73569376c9a 227 }
Boborski 0:e73569376c9a 228
Boborski 0:e73569376c9a 229 if(DEBUG == 1)
Boborski 0:e73569376c9a 230 {
Boborski 0:e73569376c9a 231 if(gctabTrame[TRAMEBPG] == 49) printf("\n\n\r Bouton Gauche");
Boborski 0:e73569376c9a 232 if(gctabTrame[TRAMEBPD] == 49) printf("\n\n\r Bouton Droit");
Boborski 0:e73569376c9a 233 if(gctabTrame[TRAMEBPH] == 49) printf("\n\n\r Bouton Haut");
Boborski 0:e73569376c9a 234 if(gctabTrame[TRAMEBPB] == 49) printf("\n\n\r Bouton Bas");
Boborski 0:e73569376c9a 235 if(gctabTrame[TRAMEBPBOOST] == 49) printf("\n\n\r Bouton Boost");
Boborski 0:e73569376c9a 236 if(gctabTrame[TRAMEBPSERVO] == 49) printf("\n\n\r Bouton Servo");
Boborski 0:e73569376c9a 237 }
Boborski 0:e73569376c9a 238 }
Boborski 0:e73569376c9a 239
Boborski 0:e73569376c9a 240 //Deplacement
Boborski 0:e73569376c9a 241 void Move()
Boborski 0:e73569376c9a 242 {
Boborski 0:e73569376c9a 243 MotGSens.write(giSMotG);
Boborski 0:e73569376c9a 244 MotGPwm.pulsewidth_us(giVMotG);
Boborski 0:e73569376c9a 245
Boborski 0:e73569376c9a 246 MotDSens.write(giSMotD);
Boborski 0:e73569376c9a 247 MotDPwm.pulsewidth_us(giVMotD);
Boborski 0:e73569376c9a 248 }