Saša Radosavljevic / Mbed 2 deprecated Lecture_os_2

Dependencies:   mbed

Committer:
higepi
Date:
Thu May 07 09:57:06 2020 +0000
Revision:
4:4160376d7d69
Parent:
3:ac6eead48a9d
Child:
5:d65b158dd93d
Test position 3 roues;

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