Lucas B
/
TelecoBot_Recepteur
Programme Récepteur (V1) pour les TelecoBots - IUT Nice 2019
main.cpp@1:86813b72c1aa, 2019-06-17 (annotated)
- 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?
User | Revision | Line number | New 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 | } |