Saša Radosavljevic / Mbed 2 deprecated Lecture_os_2

Dependencies:   mbed

Committer:
higepi
Date:
Thu May 07 10:25:38 2020 +0000
Revision:
5:d65b158dd93d
Parent:
4:4160376d7d69
Child:
6:a243c013e519
Nouveau test 3 mot;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bcostm 0:d5bd863b2036 1 #include "mbed.h"
bcostm 0:d5bd863b2036 2
higepi 3:ac6eead48a9d 3 //AX12 myax12 (PC_4, PC_5, 1,115200);
higepi 3:ac6eead48a9d 4 Serial myserial_ax12(PC_4,PC_5,115200);
higepi 4:4160376d7d69 5 Serial pc(USBTX,USBRX,115200);
higepi 4:4160376d7d69 6 Serial zigBee(PC_1,PC_0,115200);
higepi 4:4160376d7d69 7
higepi 4:4160376d7d69 8
higepi 4:4160376d7d69 9 DigitalOut my_led1(LED1);
higepi 4:4160376d7d69 10 DigitalOut my_led2(LED2);
higepi 4:4160376d7d69 11 DigitalOut my_led3(LED3);
bcostm 0:d5bd863b2036 12
higepi 4:4160376d7d69 13 char tata[20] = {};
higepi 4:4160376d7d69 14 int position_1;
higepi 4:4160376d7d69 15 int position_2;
higepi 4:4160376d7d69 16 int position_3;
higepi 5:d65b158dd93d 17 int num_moteur = 0;
higepi 4:4160376d7d69 18 int vitesse;
higepi 4:4160376d7d69 19 char sens;
higepi 4:4160376d7d69 20
higepi 4:4160376d7d69 21 Ticker ticker_10ms;
higepi 4:4160376d7d69 22
higepi 4:4160376d7d69 23 //Définition des trames de requête pour le moteur 1
higepi 4:4160376d7d69 24 char trame_demande_pos_1[8]={0xFF,0xFF,0x01,0x4,0x2,0x24,2,0xD2};
higepi 4:4160376d7d69 25 char trame_demande_pos_2[8]={0xFF,0xFF,0x02,0x4,0x2,0x24,2,0xD1};
higepi 4:4160376d7d69 26 char trame_demande_pos_3[8]={0xFF,0xFF,0x03,0x4,0x2,0x24,2,0xD0};
higepi 4:4160376d7d69 27 char trame_demande_vitesse[8]={0xFF,0xFF,0x01,0x4,0x2,0x28,2,0xCE};
higepi 4:4160376d7d69 28
higepi 4:4160376d7d69 29
higepi 4:4160376d7d69 30 #define acq_vitesse 0
higepi 4:4160376d7d69 31 #define acq_position 1
higepi 4:4160376d7d69 32
higepi 4:4160376d7d69 33 //Fonction d'interruption sur réception de charactère sur liaison série
higepi 3:ac6eead48a9d 34 void Rx_Irq_fonction(void)
bcostm 0:d5bd863b2036 35 {
higepi 4:4160376d7d69 36 my_led1 = !my_led1;
higepi 4:4160376d7d69 37
higepi 4:4160376d7d69 38 static int i_rx=0;
higepi 3:ac6eead48a9d 39 tata[i_rx]=myserial_ax12.getc();
higepi 4:4160376d7d69 40
higepi 4:4160376d7d69 41 if (tata[0]!=0xFF) // On vérifie que le premier et le deuxième octet sont biens 0xFF
higepi 3:ac6eead48a9d 42 i_rx=0;
higepi 3:ac6eead48a9d 43 else i_rx++;
higepi 4:4160376d7d69 44 if((i_rx==2)&&(tata[1] != 0xFF)) i_rx=0;
higepi 4:4160376d7d69 45
higepi 4:4160376d7d69 46 //Une fois qu'on sait que la trame est "juste" on récupère le reste
higepi 3:ac6eead48a9d 47 if ((tata[0]==0xFF) && (tata[1]==0xFF) && (tata[2]==0x01) && i_rx==7)
higepi 3:ac6eead48a9d 48 {
higepi 4:4160376d7d69 49 my_led3 = !my_led3;
higepi 4:4160376d7d69 50
higepi 3:ac6eead48a9d 51 i_rx=0;
higepi 4:4160376d7d69 52 if(tata[4]==00){ //si erreur est nulle
higepi 4:4160376d7d69 53
higepi 4:4160376d7d69 54 //On transforme les données en fonction de ce qu'on lit depuis les moteurs
higepi 4:4160376d7d69 55 if (acq_position == 1) position_1 = tata[5]+((uint16_t)tata[6]<<8);
higepi 4:4160376d7d69 56 /*if (acq_vitesse == 1){
higepi 4:4160376d7d69 57 sens = ((tata[5]+((uint16_t)tata[6]<<8))&0x40)>>10;
higepi 4:4160376d7d69 58 vitesse = tata[5]+((uint16_t)tata[6]<<8);
higepi 4:4160376d7d69 59 }*/
higepi 4:4160376d7d69 60 }
higepi 3:ac6eead48a9d 61 tata[0]=0;
higepi 3:ac6eead48a9d 62 }
higepi 4:4160376d7d69 63
higepi 4:4160376d7d69 64 if ((tata[0]==0xFF) && (tata[1]==0xFF) && (tata[2]==0x02) && i_rx==7)
higepi 4:4160376d7d69 65 {
higepi 4:4160376d7d69 66 my_led3 = !my_led3;
higepi 4:4160376d7d69 67
higepi 4:4160376d7d69 68 i_rx=0;
higepi 4:4160376d7d69 69 if(tata[4]==00){ //si erreur est nulle
higepi 4:4160376d7d69 70
higepi 4:4160376d7d69 71 //On transforme les données en fonction de ce qu'on lit depuis les moteurs
higepi 4:4160376d7d69 72 if (acq_position == 1) position_2 = tata[5]+((uint16_t)tata[6]<<8);
higepi 4:4160376d7d69 73 /*if (acq_vitesse == 1){
higepi 4:4160376d7d69 74 sens = ((tata[5]+((uint16_t)tata[6]<<8))&0x40)>>10;
higepi 4:4160376d7d69 75 vitesse = tata[5]+((uint16_t)tata[6]<<8);
higepi 4:4160376d7d69 76 }*/
higepi 4:4160376d7d69 77 }
higepi 4:4160376d7d69 78 tata[0]=0;
higepi 4:4160376d7d69 79 }
higepi 4:4160376d7d69 80
higepi 4:4160376d7d69 81 if ((tata[0]==0xFF) && (tata[1]==0xFF) && (tata[2]==0x03) && i_rx==7)
higepi 3:ac6eead48a9d 82 {
higepi 4:4160376d7d69 83 my_led3 = !my_led3;
higepi 4:4160376d7d69 84
higepi 4:4160376d7d69 85 i_rx=0;
higepi 4:4160376d7d69 86 if(tata[4]==00){ //si erreur est nulle
higepi 4:4160376d7d69 87
higepi 4:4160376d7d69 88 //On transforme les données en fonction de ce qu'on lit depuis les moteurs
higepi 4:4160376d7d69 89 if (acq_position == 1) position_3 = tata[5]+((uint16_t)tata[6]<<8);
higepi 4:4160376d7d69 90 /*if (acq_vitesse == 1){
higepi 4:4160376d7d69 91 sens = ((tata[5]+((uint16_t)tata[6]<<8))&0x40)>>10;
higepi 4:4160376d7d69 92 vitesse = tata[5]+((uint16_t)tata[6]<<8);
higepi 4:4160376d7d69 93 }*/
higepi 4:4160376d7d69 94 }
higepi 4:4160376d7d69 95 tata[0]=0;
higepi 4:4160376d7d69 96 }
higepi 4:4160376d7d69 97
higepi 4:4160376d7d69 98 if (i_rx>19)
higepi 4:4160376d7d69 99 {
higepi 4:4160376d7d69 100 /*for(int i=0;i<10;i++)
higepi 4:4160376d7d69 101 tata[i]=0;*/
higepi 3:ac6eead48a9d 102 i_rx=0;
higepi 3:ac6eead48a9d 103 }
higepi 3:ac6eead48a9d 104 }
higepi 3:ac6eead48a9d 105
higepi 3:ac6eead48a9d 106 void fonction_10ms(void)
higepi 3:ac6eead48a9d 107 {
higepi 5:d65b158dd93d 108 /*for(int i=0;i<=19;i++)
higepi 4:4160376d7d69 109 {
higepi 4:4160376d7d69 110 pc.printf("%X ",tata[i]);
higepi 4:4160376d7d69 111 }
higepi 5:d65b158dd93d 112 pc.printf("\n\r");*/
higepi 5:d65b158dd93d 113
higepi 4:4160376d7d69 114 for(int i=0;i<=7;i++)
higepi 3:ac6eead48a9d 115 {
higepi 4:4160376d7d69 116 //On envoi la trame que l'on souhaite
higepi 5:d65b158dd93d 117 if(acq_position){
higepi 5:d65b158dd93d 118 if(num_moteur == 0)myserial_ax12.putc(trame_demande_pos_1[i]);
higepi 5:d65b158dd93d 119 if(num_moteur == 1)myserial_ax12.putc(trame_demande_pos_2[i]);
higepi 5:d65b158dd93d 120 if(num_moteur == 2)myserial_ax12.putc(trame_demande_pos_3[i]);
higepi 5:d65b158dd93d 121 }
higepi 5:d65b158dd93d 122 /*if(acq_vitesse){
higepi 4:4160376d7d69 123 myserial_ax12.putc(trame_demande_vitesse[i]);
higepi 4:4160376d7d69 124 //pc.printf("\n\rvitesse = %d\n\rsens = %d",vitesse,sens);
higepi 5:d65b158dd93d 125 }*/
bcostm 0:d5bd863b2036 126 }
higepi 5:d65b158dd93d 127 num_moteur++;
higepi 5:d65b158dd93d 128 if(num_moteur==3)num_moteur=0;
bcostm 0:d5bd863b2036 129 }
higepi 3:ac6eead48a9d 130
higepi 3:ac6eead48a9d 131 int main(){
higepi 3:ac6eead48a9d 132 //myax12.SetMode(1); //passage en Continuous rotation
higepi 4:4160376d7d69 133
higepi 5:d65b158dd93d 134 char trame_cmd_speed_1[9]={0xFF,0xFF,0x01,0x5,0x3,0x20,0x10,0x0,0xC6};
higepi 5:d65b158dd93d 135 char trame_cmd_speed_2[9]={0xFF,0xFF,0x02,0x5,0x3,0x20,0x10,0x0,0xC5};
higepi 5:d65b158dd93d 136 char trame_cmd_speed_3[9]={0xFF,0xFF,0x03,0x5,0x3,0x20,0x10,0x0,0xC4};
higepi 3:ac6eead48a9d 137 float Angle;
higepi 3:ac6eead48a9d 138 short speed;
higepi 3:ac6eead48a9d 139 char data[10];
higepi 3:ac6eead48a9d 140 char s=0;
higepi 3:ac6eead48a9d 141 float temp;
higepi 5:d65b158dd93d 142 int position_old_1=0,i,a;
higepi 5:d65b158dd93d 143 int position_old_2=0;
higepi 5:d65b158dd93d 144 int position_old_3=0;
higepi 3:ac6eead48a9d 145
higepi 4:4160376d7d69 146 pc.printf("test lecture AX12\n\r");
higepi 4:4160376d7d69 147
higepi 3:ac6eead48a9d 148 //myax12.SetCRSpeed(0.05);
higepi 3:ac6eead48a9d 149 for(i=0;i<=8;i++)
higepi 3:ac6eead48a9d 150 {
higepi 5:d65b158dd93d 151 myserial_ax12.putc(trame_cmd_speed_1[i]);
higepi 5:d65b158dd93d 152 }
higepi 5:d65b158dd93d 153 for(i=0;i<=8;i++)
higepi 5:d65b158dd93d 154 {
higepi 5:d65b158dd93d 155 myserial_ax12.putc(trame_cmd_speed_2[i]);
higepi 5:d65b158dd93d 156 }
higepi 5:d65b158dd93d 157 for(i=0;i<=8;i++)
higepi 5:d65b158dd93d 158 {
higepi 5:d65b158dd93d 159 myserial_ax12.putc(trame_cmd_speed_3[i]);
higepi 3:ac6eead48a9d 160 }
higepi 3:ac6eead48a9d 161
higepi 3:ac6eead48a9d 162 myserial_ax12.attach(&Rx_Irq_fonction, Serial::RxIrq);
higepi 4:4160376d7d69 163 ticker_10ms.attach(&fonction_10ms,1);
higepi 3:ac6eead48a9d 164
higepi 3:ac6eead48a9d 165
higepi 3:ac6eead48a9d 166 while(1) {
higepi 4:4160376d7d69 167
higepi 4:4160376d7d69 168 if(acq_position == 1){
higepi 5:d65b158dd93d 169 if (position_1 != position_old_1)
higepi 4:4160376d7d69 170 {
higepi 4:4160376d7d69 171 pc.printf("\n\rposition moteur 3 = %d :", position_3);
higepi 4:4160376d7d69 172 //pc.printf("\n\rposition moteur 1 = %d\n\r mot recu :",position_1);
higepi 4:4160376d7d69 173
higepi 4:4160376d7d69 174 /*for(i=0;i<=7;i++)
higepi 4:4160376d7d69 175 {
higepi 4:4160376d7d69 176 pc.printf("%X ",tata[i]);
higepi 4:4160376d7d69 177 }*/
higepi 5:d65b158dd93d 178 position_old_1=position_1;
higepi 5:d65b158dd93d 179 }
higepi 5:d65b158dd93d 180 if (position_2 != position_old_2)
higepi 5:d65b158dd93d 181 {
higepi 5:d65b158dd93d 182 pc.printf("\n\rposition moteur 2 = %d :", position_2);
higepi 5:d65b158dd93d 183
higepi 5:d65b158dd93d 184 position_old_2=position_2;
higepi 5:d65b158dd93d 185 }
higepi 5:d65b158dd93d 186 if (position_3 != position_old_3)
higepi 5:d65b158dd93d 187 {
higepi 5:d65b158dd93d 188 pc.printf("\n\rposition moteur 3 = %d :", position_3);
higepi 5:d65b158dd93d 189
higepi 5:d65b158dd93d 190 position_old_3=position_3;
higepi 3:ac6eead48a9d 191 }
higepi 3:ac6eead48a9d 192 }
higepi 4:4160376d7d69 193
higepi 4:4160376d7d69 194 }
higepi 3:ac6eead48a9d 195
higepi 3:ac6eead48a9d 196 }
higepi 3:ac6eead48a9d 197
higepi 4:4160376d7d69 198 //void set_speed(ID,speed)
higepi 4:4160376d7d69 199 //void demande_lecture_pos(ID)
higepi 3:ac6eead48a9d 200
higepi 3:ac6eead48a9d 201
higepi 3:ac6eead48a9d 202 /*
higepi 3:ac6eead48a9d 203 #include "mbed.h"
higepi 3:ac6eead48a9d 204
higepi 3:ac6eead48a9d 205 //AX12 myax12 (PC_4, PC_5, 1,115200);
higepi 3:ac6eead48a9d 206 Serial myserial_ax12(PC_4,PC_5,115200);
higepi 3:ac6eead48a9d 207 char tata[10];
higepi 3:ac6eead48a9d 208 int position;
higepi 3:ac6eead48a9d 209
higepi 3:ac6eead48a9d 210 void Rx_Irq_fonction(void)
higepi 3:ac6eead48a9d 211 {
higepi 3:ac6eead48a9d 212 static int i_rx;
higepi 3:ac6eead48a9d 213 tata[i_rx]=myserial_ax12.getc();
higepi 3:ac6eead48a9d 214 if (tata[0]!=0xFF)
higepi 3:ac6eead48a9d 215 i_rx=0;
higepi 3:ac6eead48a9d 216 else i_rx++;
higepi 3:ac6eead48a9d 217 if ((tata[0]==0xFF) && (tata[1]==0xFF) && (tata[2]==0x01) && i_rx==7)
higepi 3:ac6eead48a9d 218 {
higepi 3:ac6eead48a9d 219 i_rx=0;
higepi 3:ac6eead48a9d 220 if(tata[4]==00) //si erreur est nulle
higepi 3:ac6eead48a9d 221 position = tata[5]+((uint16_t)tata[6]<<8);
higepi 3:ac6eead48a9d 222 tata[0]=0;
higepi 3:ac6eead48a9d 223 }
higepi 3:ac6eead48a9d 224 if (i_rx>9)
higepi 3:ac6eead48a9d 225 {
higepi 3:ac6eead48a9d 226 for(int i=0;i<10;i++)
higepi 3:ac6eead48a9d 227 tata[i]=0;
higepi 3:ac6eead48a9d 228 i_rx=0;
higepi 3:ac6eead48a9d 229 }
higepi 3:ac6eead48a9d 230 }
higepi 3:ac6eead48a9d 231
higepi 3:ac6eead48a9d 232 int main(){
higepi 3:ac6eead48a9d 233 //myax12.SetMode(1); //passage en Continuous rotation
higepi 3:ac6eead48a9d 234 char trame_demande_pos[8]={0xFF,0xFF,0x01,0x4,0x2,0x24,2,0xD2};
higepi 3:ac6eead48a9d 235 char trame_cmd_speed[9]={0xFF,0xFF,0x01,0x5,0x3,0x20,0x10,0x0,0xC6};
higepi 3:ac6eead48a9d 236 float Angle;
higepi 3:ac6eead48a9d 237 short speed;
higepi 3:ac6eead48a9d 238 char data[10];
higepi 3:ac6eead48a9d 239 char s=0;
higepi 3:ac6eead48a9d 240 float temp;
higepi 3:ac6eead48a9d 241 int position_old=0,i,a;
higepi 3:ac6eead48a9d 242 //myax12.SetCRSpeed(0.05);
higepi 3:ac6eead48a9d 243
higepi 3:ac6eead48a9d 244 for(i=0;i<=8;i++)
higepi 3:ac6eead48a9d 245 {
higepi 3:ac6eead48a9d 246 myserial_ax12.putc(trame_cmd_speed[i]);
higepi 3:ac6eead48a9d 247 }
higepi 3:ac6eead48a9d 248
higepi 3:ac6eead48a9d 249 for(i=0;i<=7;i++)
higepi 3:ac6eead48a9d 250 {
higepi 3:ac6eead48a9d 251 myserial_ax12.putc(trame_demande_pos[i]);
higepi 3:ac6eead48a9d 252 }
higepi 3:ac6eead48a9d 253 myserial_ax12.attach(&Rx_Irq_fonction, Serial::RxIrq);
higepi 3:ac6eead48a9d 254
higepi 3:ac6eead48a9d 255
higepi 3:ac6eead48a9d 256 while(1) {
higepi 3:ac6eead48a9d 257 if (position != position_old)
higepi 3:ac6eead48a9d 258 {
higepi 3:ac6eead48a9d 259 printf("\n\rposition = %d\n\r mot recu :",position);
higepi 3:ac6eead48a9d 260 for(i=0;i<=7;i++)
higepi 3:ac6eead48a9d 261 {
higepi 3:ac6eead48a9d 262 printf("%X ",tata[i]);
higepi 3:ac6eead48a9d 263 }
higepi 3:ac6eead48a9d 264 position_old=position;
higepi 3:ac6eead48a9d 265 }
higepi 3:ac6eead48a9d 266 wait(0.01);
higepi 3:ac6eead48a9d 267 a++;
higepi 3:ac6eead48a9d 268 if(!(a % 20))
higepi 3:ac6eead48a9d 269 for(i=0;i<=7;i++)
higepi 3:ac6eead48a9d 270 {
higepi 3:ac6eead48a9d 271 myserial_ax12.putc(trame_demande_pos[i]);
higepi 3:ac6eead48a9d 272 }
higepi 3:ac6eead48a9d 273 }
higepi 3:ac6eead48a9d 274
higepi 3:ac6eead48a9d 275 }
higepi 3:ac6eead48a9d 276
higepi 3:ac6eead48a9d 277 void set_speed(ID,speed)*/