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

Dependencies:   mbed

Committer:
Boborski
Date:
Mon Jun 17 13:20:09 2019 +0000
Revision:
1:1db93a0206a6
Parent:
0:6bcc127a6e3d
TelecoBot Recepteur V2

Who changed what in which revision?

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