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