Mise en place d'une communication utilisant le module ZigBee pour piloter un robot.

Dependencies:   mbed

Committer:
stersky
Date:
Fri May 15 07:40:48 2020 +0000
Revision:
0:4e367db5ca6b
MAJ_fonctionnelle(normalement);

Who changed what in which revision?

UserRevisionLine numberNew contents of line
stersky 0:4e367db5ca6b 1 #include "mbed.h"
stersky 0:4e367db5ca6b 2 #include <string.h>
stersky 0:4e367db5ca6b 3
stersky 0:4e367db5ca6b 4 //Serial PC(USBTX, USBRX);
stersky 0:4e367db5ca6b 5 Serial ZigBee(A4, A5);//Série (Tx,Rx)
stersky 0:4e367db5ca6b 6
stersky 0:4e367db5ca6b 7 DigitalOut del(LED1);
stersky 0:4e367db5ca6b 8 char drapeau_envoi = 0;
stersky 0:4e367db5ca6b 9
stersky 0:4e367db5ca6b 10 int reception_ZigBee(int id,int* commande_coach,float* velnormal,float* velangular,float* veltangent,int* wheelspeed,int* spinner);
stersky 0:4e367db5ca6b 11 void envoi_ZigBee(int ZB_id,int ZB_statut,int ZB_pos_x,int ZB_pos_y);
stersky 0:4e367db5ca6b 12
stersky 0:4e367db5ca6b 13 int main()
stersky 0:4e367db5ca6b 14 {
stersky 0:4e367db5ca6b 15 //Varaibles avec toutes les données
stersky 0:4e367db5ca6b 16 int id = 1;
stersky 0:4e367db5ca6b 17 int commande_coach = 32;
stersky 0:4e367db5ca6b 18 float velnormal = 32;
stersky 0:4e367db5ca6b 19 float velangular = 33;
stersky 0:4e367db5ca6b 20 float veltangent = 43;
stersky 0:4e367db5ca6b 21 int wheelspeed = 23;
stersky 0:4e367db5ca6b 22 int spinner = 43;
stersky 0:4e367db5ca6b 23
stersky 0:4e367db5ca6b 24 int statut = 0;
stersky 0:4e367db5ca6b 25 int pos_x = 324;
stersky 0:4e367db5ca6b 26 int pos_y = 345;
stersky 0:4e367db5ca6b 27 char drapeau_reception;
stersky 0:4e367db5ca6b 28
stersky 0:4e367db5ca6b 29 //PC.baud(115200);
stersky 0:4e367db5ca6b 30 ZigBee.baud(115200);
stersky 0:4e367db5ca6b 31
stersky 0:4e367db5ca6b 32 while (1) {
stersky 0:4e367db5ca6b 33 drapeau_reception = reception_ZigBee(id,&commande_coach,&velnormal,&velangular,&veltangent,&wheelspeed,&spinner);
stersky 0:4e367db5ca6b 34 if(drapeau_reception == 1){
stersky 0:4e367db5ca6b 35 envoi_ZigBee(id,statut,pos_x,pos_y);
stersky 0:4e367db5ca6b 36 drapeau_reception = 0;
stersky 0:4e367db5ca6b 37 }
stersky 0:4e367db5ca6b 38 wait(0.01);
stersky 0:4e367db5ca6b 39 }
stersky 0:4e367db5ca6b 40 }
stersky 0:4e367db5ca6b 41
stersky 0:4e367db5ca6b 42 void envoi_ZigBee(int ZB_id,int ZB_statut,int ZB_pos_x,int ZB_pos_y){
stersky 0:4e367db5ca6b 43 //Envoi de trames de la forme : "Did(int)|controle(int)|x(float)|y(float)F"
stersky 0:4e367db5ca6b 44 char message[200];
stersky 0:4e367db5ca6b 45 sprintf(message,"D%d|%d|%d|%dF",ZB_id,ZB_statut,ZB_pos_x,ZB_pos_y);
stersky 0:4e367db5ca6b 46 ZigBee.printf(message);
stersky 0:4e367db5ca6b 47 }
stersky 0:4e367db5ca6b 48
stersky 0:4e367db5ca6b 49 int reception_ZigBee(int id,int* commande_coach,float* velnormal,float* velangular,float* veltangent,int* wheelspeed,int* spinner){
stersky 0:4e367db5ca6b 50 del = !del;
stersky 0:4e367db5ca6b 51 //Chaine de caractères qui va recevoir les données
stersky 0:4e367db5ca6b 52 char message[200];
stersky 0:4e367db5ca6b 53 char drapeau = 0;
stersky 0:4e367db5ca6b 54 unsigned char i = 0;
stersky 0:4e367db5ca6b 55 int test_id = 0;
stersky 0:4e367db5ca6b 56
stersky 0:4e367db5ca6b 57 //Tant qu'il y a quelque chose dans le buffer, on l'ajoute à une chaîne de caractères
stersky 0:4e367db5ca6b 58 while(ZigBee.readable()) {
stersky 0:4e367db5ca6b 59 message[i] = ZigBee.getc();
stersky 0:4e367db5ca6b 60 i++;
stersky 0:4e367db5ca6b 61 }
stersky 0:4e367db5ca6b 62
stersky 0:4e367db5ca6b 63 //Si on a reçu quelque chose
stersky 0:4e367db5ca6b 64 if(i>0){
stersky 0:4e367db5ca6b 65 //Séparation des données
stersky 0:4e367db5ca6b 66 sscanf(message,"D%d|%d|%f|%f|%f|%d|%dF\n\r",
stersky 0:4e367db5ca6b 67 &test_id,
stersky 0:4e367db5ca6b 68 commande_coach,
stersky 0:4e367db5ca6b 69 veltangent,
stersky 0:4e367db5ca6b 70 velnormal,
stersky 0:4e367db5ca6b 71 velangular,
stersky 0:4e367db5ca6b 72 spinner,
stersky 0:4e367db5ca6b 73 wheelspeed
stersky 0:4e367db5ca6b 74 );
stersky 0:4e367db5ca6b 75
stersky 0:4e367db5ca6b 76 //On vide la chaîne de caractères contenant le message
stersky 0:4e367db5ca6b 77 for(i=0;i<sizeof(message);i++){
stersky 0:4e367db5ca6b 78 message[i] = 0;
stersky 0:4e367db5ca6b 79 }
stersky 0:4e367db5ca6b 80 i=0;
stersky 0:4e367db5ca6b 81 drapeau = 1;
stersky 0:4e367db5ca6b 82
stersky 0:4e367db5ca6b 83 }
stersky 0:4e367db5ca6b 84 return drapeau;
stersky 0:4e367db5ca6b 85 }