
Adaptation K22F
Serie.cpp@0:6004a7230f87, 2014-12-16 (annotated)
- Committer:
- singularity
- Date:
- Tue Dec 16 15:52:17 2014 +0000
- Revision:
- 0:6004a7230f87
Creation k22F
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
singularity | 0:6004a7230f87 | 1 | #include "Serie.h" |
singularity | 0:6004a7230f87 | 2 | |
singularity | 0:6004a7230f87 | 3 | //INSTANCIATION DES INSTANCES GLOBALES ET EXTERNES |
singularity | 0:6004a7230f87 | 4 | Serial xbee(XBEE_PIN_TX,XBEE_PIN_RX); |
singularity | 0:6004a7230f87 | 5 | |
singularity | 0:6004a7230f87 | 6 | //INSTANCES GLOBALES ET INTERNES |
singularity | 0:6004a7230f87 | 7 | char commande[TAILLE_COMMANDE]; |
singularity | 0:6004a7230f87 | 8 | int curseur; |
singularity | 0:6004a7230f87 | 9 | bool wait_com; |
singularity | 0:6004a7230f87 | 10 | |
singularity | 0:6004a7230f87 | 11 | |
singularity | 0:6004a7230f87 | 12 | /* LA COMMANDE POUR PAPI BROSSARD |
singularity | 0:6004a7230f87 | 13 | reception d'un chaine :"Cam:23521/4521/451/.../6532/\n" |
singularity | 0:6004a7230f87 | 14 | Utilisation du split java avec pour delimiteur / et : |
singularity | 0:6004a7230f87 | 15 | String s="27/03/2008"; |
singularity | 0:6004a7230f87 | 16 | String str[]=s.split("/"); |
singularity | 0:6004a7230f87 | 17 | |
singularity | 0:6004a7230f87 | 18 | On peut eventuellement utilisé la classe Scanner de JAVA*/ |
singularity | 0:6004a7230f87 | 19 | void envoyerCamera() |
singularity | 0:6004a7230f87 | 20 | { |
singularity | 0:6004a7230f87 | 21 | xbee.printf("Cam:"); |
singularity | 0:6004a7230f87 | 22 | for(int i=0;i<128;i++) { |
singularity | 0:6004a7230f87 | 23 | xbee.printf("%u/",valeurs[i]); |
singularity | 0:6004a7230f87 | 24 | } |
singularity | 0:6004a7230f87 | 25 | xbee.printf("\n"); |
singularity | 0:6004a7230f87 | 26 | } |
singularity | 0:6004a7230f87 | 27 | |
singularity | 0:6004a7230f87 | 28 | typedef enum IdVar IdVar; |
singularity | 0:6004a7230f87 | 29 | enum Idvar {CAM1,TASSERV,VPROP,}; |
singularity | 0:6004a7230f87 | 30 | |
singularity | 0:6004a7230f87 | 31 | //Si quelqu'un trouve pourquoi un parametre de type enumeration n'est pas accepte par le compilo |
singularity | 0:6004a7230f87 | 32 | /*void getVar(IdVar id) { |
singularity | 0:6004a7230f87 | 33 | switch(id) { |
singularity | 0:6004a7230f87 | 34 | case CAM1 : |
singularity | 0:6004a7230f87 | 35 | envoyerCamera(); |
singularity | 0:6004a7230f87 | 36 | break; |
singularity | 0:6004a7230f87 | 37 | |
singularity | 0:6004a7230f87 | 38 | } |
singularity | 0:6004a7230f87 | 39 | }*/ |
singularity | 0:6004a7230f87 | 40 | |
singularity | 0:6004a7230f87 | 41 | void getVar(int id) { |
singularity | 0:6004a7230f87 | 42 | switch(id) { |
singularity | 0:6004a7230f87 | 43 | case CAM1 : |
singularity | 0:6004a7230f87 | 44 | envoyerCamera(); |
singularity | 0:6004a7230f87 | 45 | break; |
singularity | 0:6004a7230f87 | 46 | } |
singularity | 0:6004a7230f87 | 47 | } |
singularity | 0:6004a7230f87 | 48 | void help() { |
singularity | 0:6004a7230f87 | 49 | } |
singularity | 0:6004a7230f87 | 50 | |
singularity | 0:6004a7230f87 | 51 | void traiter(char commande[]) { |
singularity | 0:6004a7230f87 | 52 | switch(commande[0]) { |
singularity | 0:6004a7230f87 | 53 | case 'G': |
singularity | 0:6004a7230f87 | 54 | getVar(commande[1]); |
singularity | 0:6004a7230f87 | 55 | |
singularity | 0:6004a7230f87 | 56 | break; |
singularity | 0:6004a7230f87 | 57 | |
singularity | 0:6004a7230f87 | 58 | case 'S': |
singularity | 0:6004a7230f87 | 59 | int t; |
singularity | 0:6004a7230f87 | 60 | sscanf(commande, "S%d\n",t); |
singularity | 0:6004a7230f87 | 61 | //setTIntegration(t); |
singularity | 0:6004a7230f87 | 62 | |
singularity | 0:6004a7230f87 | 63 | break; |
singularity | 0:6004a7230f87 | 64 | case 'D': |
singularity | 0:6004a7230f87 | 65 | float t; |
singularity | 0:6004a7230f87 | 66 | char a,b; |
singularity | 0:6004a7230f87 | 67 | sscanf(commande,"%c%c%f\n",&a,&b,&t); |
singularity | 0:6004a7230f87 | 68 | |
singularity | 0:6004a7230f87 | 69 | switch(commande[2]) { |
singularity | 0:6004a7230f87 | 70 | case 'P': |
singularity | 0:6004a7230f87 | 71 | propulsion.setDKp(t); |
singularity | 0:6004a7230f87 | 72 | break; |
singularity | 0:6004a7230f87 | 73 | case 'I': |
singularity | 0:6004a7230f87 | 74 | propulsion.setDKi(t); |
singularity | 0:6004a7230f87 | 75 | break; |
singularity | 0:6004a7230f87 | 76 | case 'D': |
singularity | 0:6004a7230f87 | 77 | propulsion.setDKd(t); |
singularity | 0:6004a7230f87 | 78 | break; |
singularity | 0:6004a7230f87 | 79 | } |
singularity | 0:6004a7230f87 | 80 | break; |
singularity | 0:6004a7230f87 | 81 | case 'L': |
singularity | 0:6004a7230f87 | 82 | float w; |
singularity | 0:6004a7230f87 | 83 | char a,b; |
singularity | 0:6004a7230f87 | 84 | sscanf(commande,"%c%c%f\n",&a,&b,&w); |
singularity | 0:6004a7230f87 | 85 | |
singularity | 0:6004a7230f87 | 86 | switch(commande[2]) { |
singularity | 0:6004a7230f87 | 87 | case 'P': |
singularity | 0:6004a7230f87 | 88 | propulsion.setGKp(w); |
singularity | 0:6004a7230f87 | 89 | break; |
singularity | 0:6004a7230f87 | 90 | case 'I': |
singularity | 0:6004a7230f87 | 91 | propulsion.setGKi(w); |
singularity | 0:6004a7230f87 | 92 | break; |
singularity | 0:6004a7230f87 | 93 | case 'D': |
singularity | 0:6004a7230f87 | 94 | propulsion.setGKd(w); |
singularity | 0:6004a7230f87 | 95 | break; |
singularity | 0:6004a7230f87 | 96 | } |
singularity | 0:6004a7230f87 | 97 | break; |
singularity | 0:6004a7230f87 | 98 | |
singularity | 0:6004a7230f87 | 99 | case 'C': |
singularity | 0:6004a7230f87 | 100 | setDirection(((float)commande[1])/(2000*256.0f)); |
singularity | 0:6004a7230f87 | 101 | float a1 = (float)commande[1]/(2000*256.0f); |
singularity | 0:6004a7230f87 | 102 | float a2 = (commande[2]-128.0f)/128.0f; |
singularity | 0:6004a7230f87 | 103 | float a3 = (commande[3]-128.0f)/128.0f; |
singularity | 0:6004a7230f87 | 104 | //setPuissanceMoteurs((commande[2]-128.0f)/(128.0f),(commande[3]-128.0f)/(128.0f)); |
singularity | 0:6004a7230f87 | 105 | xbee.printf("Commande (C)ontrol reconnue\n"); |
singularity | 0:6004a7230f87 | 106 | xbee.printf(" C:%s dir(int):%d M1(int):%d M2(int):%d\n",commande[0],commande[1],commande[2],commande[3]); |
singularity | 0:6004a7230f87 | 107 | xbee.printf(" Valeur: Dir(float)%f\n",direction.read()); |
singularity | 0:6004a7230f87 | 108 | xbee.printf("%f %f %f\n\n\n",a1,a2,a3); |
singularity | 0:6004a7230f87 | 109 | |
singularity | 0:6004a7230f87 | 110 | break; |
singularity | 0:6004a7230f87 | 111 | |
singularity | 0:6004a7230f87 | 112 | default: |
singularity | 0:6004a7230f87 | 113 | xbee.printf("Commande non reconnue\n"); |
singularity | 0:6004a7230f87 | 114 | break; |
singularity | 0:6004a7230f87 | 115 | } |
singularity | 0:6004a7230f87 | 116 | xbee.printf(" Commande(ASCII) : %s\n",commande); |
singularity | 0:6004a7230f87 | 117 | } |
singularity | 0:6004a7230f87 | 118 | |
singularity | 0:6004a7230f87 | 119 | void callbackSerie() { |
singularity | 0:6004a7230f87 | 120 | int donne; |
singularity | 0:6004a7230f87 | 121 | |
singularity | 0:6004a7230f87 | 122 | while(xbee.readable()) |
singularity | 0:6004a7230f87 | 123 | { |
singularity | 0:6004a7230f87 | 124 | donne = xbee.getc(); |
singularity | 0:6004a7230f87 | 125 | |
singularity | 0:6004a7230f87 | 126 | if(wait_com) { |
singularity | 0:6004a7230f87 | 127 | /*On ecoute la commande*/ |
singularity | 0:6004a7230f87 | 128 | |
singularity | 0:6004a7230f87 | 129 | if(donne == '\n') { |
singularity | 0:6004a7230f87 | 130 | /*Fin de la commande*/ |
singularity | 0:6004a7230f87 | 131 | if(curseur != 0) { |
singularity | 0:6004a7230f87 | 132 | commande[curseur] = '\n'; |
singularity | 0:6004a7230f87 | 133 | traiter(commande); |
singularity | 0:6004a7230f87 | 134 | } |
singularity | 0:6004a7230f87 | 135 | wait_com = false; |
singularity | 0:6004a7230f87 | 136 | } else { |
singularity | 0:6004a7230f87 | 137 | if(curseur >= TAILLE_COMMANDE) { |
singularity | 0:6004a7230f87 | 138 | xbee.printf("Xbee Freescale: Buffer overflown"); |
singularity | 0:6004a7230f87 | 139 | wait_com = false; |
singularity | 0:6004a7230f87 | 140 | } else { |
singularity | 0:6004a7230f87 | 141 | commande[curseur] = donne; |
singularity | 0:6004a7230f87 | 142 | curseur++; |
singularity | 0:6004a7230f87 | 143 | } |
singularity | 0:6004a7230f87 | 144 | } |
singularity | 0:6004a7230f87 | 145 | |
singularity | 0:6004a7230f87 | 146 | } else { |
singularity | 0:6004a7230f87 | 147 | /*On attends le symbole START pour prendre commande*/ |
singularity | 0:6004a7230f87 | 148 | if(donne == 'S') { |
singularity | 0:6004a7230f87 | 149 | wait_com = true; |
singularity | 0:6004a7230f87 | 150 | curseur = 0; |
singularity | 0:6004a7230f87 | 151 | } |
singularity | 0:6004a7230f87 | 152 | } |
singularity | 0:6004a7230f87 | 153 | } |
singularity | 0:6004a7230f87 | 154 | } |
singularity | 0:6004a7230f87 | 155 | |
singularity | 0:6004a7230f87 | 156 | |
singularity | 0:6004a7230f87 | 157 | void initSerie() { |
singularity | 0:6004a7230f87 | 158 | for(int i=0 ; i< TAILLE_COMMANDE ; i++) { |
singularity | 0:6004a7230f87 | 159 | commande[i] = 0; |
singularity | 0:6004a7230f87 | 160 | } |
singularity | 0:6004a7230f87 | 161 | xbee.baud(XBEE_SPEED); |
singularity | 0:6004a7230f87 | 162 | xbee.printf("Xbee Freescale: Hello...\n"); |
singularity | 0:6004a7230f87 | 163 | xbee.attach(&callbackSerie); |
singularity | 0:6004a7230f87 | 164 | curseur = 0; |
singularity | 0:6004a7230f87 | 165 | wait_com = false; |
singularity | 0:6004a7230f87 | 166 | } |