Etienne Stransky
/
ZigBee
Mise en place d'une communication utilisant le module ZigBee pour piloter un robot.
main.cpp@0:4e367db5ca6b, 2020-05-15 (annotated)
- Committer:
- stersky
- Date:
- Fri May 15 07:40:48 2020 +0000
- Revision:
- 0:4e367db5ca6b
MAJ_fonctionnelle(normalement);
Who changed what in which revision?
User | Revision | Line number | New 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 | } |