prog robocup equip2

Dependencies:   nRF24L01P MX12 BSP_B-L475E-IOT01

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /*
00002 TRANSFER_SIZE = 24
00003 id_robot, vx, vy, angle_robot, vangulaire, v_tir, cmd_rouleau 
00004 */
00005 
00006 #include "mbed.h"
00007 #include "MX12.h"
00008 #include <iostream>
00009 #include "stm32l475e_iot01_magneto.h"
00010 #include "Projet.h"
00011 #include "nRF24L01P.h"
00012 #include "string.h"
00013 
00014 static UnbufferedSerial pc(USBTX, USBRX,115200); // tx, rx
00015 
00016 nRF24L01P my_nrf24l01p(D11, D12, D13, D9, D10, D8);    // mosi, miso, sck, csn, ce, irq
00017 
00018 DigitalOut myled2(LED2);
00019 
00020 DigitalOut led(LED1);
00021 MX12 mx (PC_4, PC_5,115200);
00022 
00023 int main()
00024 {
00025     
00026 // Nombre de caractères transmis à chaque envoi
00027 #define TRANSFER_SIZE   24
00028     char texte[100];
00029     char txData[TRANSFER_SIZE]= {};
00030     char rxData[TRANSFER_SIZE+1]= {};
00031     char caractere_recu=0;
00032     int txDataCnt = 0;
00033     int rxDataCnt = 0;
00034     int statut_nrF;
00035     int id_robot, vx, vy, angle_robot, vangulaire, v_tir, cmd_rouleau;
00036     int consigneData[6];
00037 
00038     pc.baud(115200); // Débit de la liaison série PC
00039     
00040     my_nrf24l01p.powerUp();
00041 
00042     my_nrf24l01p.setRfFrequency(2414);
00043     my_nrf24l01p.setRxAddress(0xA1A1A1A1A1);
00044     my_nrf24l01p.setTxAddress(0xB1A1A1A1A1);
00045     my_nrf24l01p.setAirDataRate(NRF24L01P_DATARATE_1_MBPS);
00046 
00047     my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
00048     my_nrf24l01p.setRfOutputPower(-6);
00049     
00050     
00051     sprintf(texte,"DISCO\r\n");
00052     pc.write(texte,strlen(texte));
00053     
00054     sprintf(texte,"nRF24L01+ Frequency    : %d MHz\r\n",  my_nrf24l01p.getRfFrequency());
00055     pc.write(texte,strlen(texte));
00056     
00057     sprintf(texte,"nRF24L01+ Output power : %d dBm\r\n",  my_nrf24l01p.getRfOutputPower() );
00058     pc.write(texte,strlen(texte));
00059     
00060     sprintf(texte,"nRF24L01+ Data Rate    : %d kbps\r\n", my_nrf24l01p.getAirDataRate()  );
00061     pc.write(texte,strlen(texte));
00062     
00063     sprintf(texte,"nRF24L01+ TX Address   : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() );
00064     pc.write(texte,strlen(texte));
00065     
00066     sprintf(texte,"nRF24L01+ RX Address   : 0x%010llX\r\n", my_nrf24l01p.getRxAddress()  );
00067     pc.write(texte,strlen(texte));
00068 
00069 
00070     my_nrf24l01p.setTransferSize( TRANSFER_SIZE );
00071     my_nrf24l01p.setReceiveMode();
00072     my_nrf24l01p.enable();
00073   
00074 
00075     sprintf(texte,"Pret a recevoir, led2 ON\n\r" );
00076     pc.write(texte,strlen(texte));
00077 
00078     myled2=!myled2;
00079 
00080     while(1) {
00081         
00082     // RECEPTION DE DONNEES ------------------------------------------------------------------
00083         
00084         for(int k=0;k<10000000;k++);
00085         statut_nrF=my_nrf24l01p.readable(NRF24L01P_PIPE_P0);
00086         
00087         if ( statut_nrF != 0) {
00088             
00089             myled2 = !myled2;
00090             
00091             sprintf(texte,"Reception\n\r");
00092             pc.write(texte,strlen(texte));
00093  
00094             rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, TRANSFER_SIZE );
00095             
00096             //Traitement donnees--------------------------------
00097             
00098             if(sscanf(rxData, "%d,%d,%d,%d,%d,%d,%d",&id_robot,&vx,&vy,&angle_robot,&vangulaire,&v_tir,&cmd_rouleau)==7){ // lecture et parsing de la chaîne
00099             
00100             
00101             sprintf(texte,"Valeur de id_robot : %d \r\n",id_robot);
00102             pc.write(texte,strlen(texte));
00103             
00104             sprintf(texte,"Valeur de vx : %d \r\n",vx);
00105             pc.write(texte,strlen(texte));
00106             
00107             sprintf(texte,"Valeur de vy : %d \r\n",vy);
00108             pc.write(texte,strlen(texte));
00109             
00110             sprintf(texte,"Valeur de angle_robot : %d \r\n",angle_robot);
00111             pc.write(texte,strlen(texte));
00112 
00113             sprintf(texte,"Valeur de vangulaire : %d \r\n",vangulaire);
00114             pc.write(texte,strlen(texte));
00115 
00116             sprintf(texte,"Valeur de v_tir : %d \r\n",v_tir);
00117             pc.write(texte,strlen(texte));
00118 
00119             sprintf(texte,"Valeur de cmd_rouleau : %d \r\n",cmd_rouleau);
00120             pc.write(texte,strlen(texte));
00121             
00122             
00123             }
00124             
00125             else {sprintf(texte,rxData);
00126             pc.write(texte,strlen(texte));}
00127             
00128             
00129             consigneData[0] = id_robot;
00130             consigneData[1] = vx;
00131             consigneData[2] = vy;
00132             consigneData[3] = angle_robot;
00133             consigneData[4] = vangulaire;
00134             consigneData[5] = v_tir;
00135             consigneData[6] = cmd_rouleau;
00136 
00137 
00138             sprintf(texte,rxData);
00139             pc.write(texte,strlen(texte));
00140 
00141             sprintf(texte,"   Taille %d\r\n",rxDataCnt);
00142             pc.write(texte,strlen(texte));
00143             
00144 
00145         led = 1;
00146         cmd_inverse(vx,vy,vangulaire,angle_robot,&mx);
00147 
00148         }
00149     }
00150 }