Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@11:b7b298073e6f, 2020-05-15 (annotated)
- Committer:
- higepi
- Date:
- Fri May 15 08:35:28 2020 +0000
- Revision:
- 11:b7b298073e6f
- Parent:
- 10:72a688ace26d
- Child:
- 12:449badf29d08
Plein de fonctions;
Who changed what in which revision?
User | Revision | Line number | New 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 | 6:a243c013e519 | 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 | 11:b7b298073e6f | 13 | void SetCRSpeed(int ID, float speed); |
higepi | 11:b7b298073e6f | 14 | void SetMode(int mode); |
higepi | 11:b7b298073e6f | 15 | void SetCWLimit (int ID, int degrees); |
higepi | 11:b7b298073e6f | 16 | void SetCCWLimit (int ID, int degrees); |
higepi | 11:b7b298073e6f | 17 | void Write(int ID, int start, int bytes, char* data); |
higepi | 9:11b36174b15e | 18 | |
higepi | 6:a243c013e519 | 19 | char tata[10] = {}; |
higepi | 4:4160376d7d69 | 20 | int position_1; |
higepi | 4:4160376d7d69 | 21 | int position_2; |
higepi | 4:4160376d7d69 | 22 | int position_3; |
higepi | 6:a243c013e519 | 23 | int num_moteur = 1; |
higepi | 4:4160376d7d69 | 24 | int vitesse; |
higepi | 4:4160376d7d69 | 25 | char sens; |
higepi | 4:4160376d7d69 | 26 | |
higepi | 4:4160376d7d69 | 27 | Ticker ticker_10ms; |
higepi | 4:4160376d7d69 | 28 | |
higepi | 4:4160376d7d69 | 29 | //Définition des trames de requête pour le moteur 1 |
higepi | 4:4160376d7d69 | 30 | char trame_demande_pos_1[8]={0xFF,0xFF,0x01,0x4,0x2,0x24,2,0xD2}; |
higepi | 4:4160376d7d69 | 31 | char trame_demande_pos_2[8]={0xFF,0xFF,0x02,0x4,0x2,0x24,2,0xD1}; |
higepi | 4:4160376d7d69 | 32 | char trame_demande_pos_3[8]={0xFF,0xFF,0x03,0x4,0x2,0x24,2,0xD0}; |
higepi | 4:4160376d7d69 | 33 | char trame_demande_vitesse[8]={0xFF,0xFF,0x01,0x4,0x2,0x28,2,0xCE}; |
higepi | 4:4160376d7d69 | 34 | |
higepi | 4:4160376d7d69 | 35 | |
higepi | 4:4160376d7d69 | 36 | #define acq_vitesse 0 |
higepi | 4:4160376d7d69 | 37 | #define acq_position 1 |
higepi | 4:4160376d7d69 | 38 | |
higepi | 4:4160376d7d69 | 39 | //Fonction d'interruption sur réception de charactère sur liaison série |
higepi | 3:ac6eead48a9d | 40 | void Rx_Irq_fonction(void) |
bcostm | 0:d5bd863b2036 | 41 | { |
higepi | 4:4160376d7d69 | 42 | my_led1 = !my_led1; |
higepi | 4:4160376d7d69 | 43 | |
higepi | 4:4160376d7d69 | 44 | static int i_rx=0; |
higepi | 3:ac6eead48a9d | 45 | tata[i_rx]=myserial_ax12.getc(); |
higepi | 4:4160376d7d69 | 46 | |
higepi | 4:4160376d7d69 | 47 | if (tata[0]!=0xFF) // On vérifie que le premier et le deuxième octet sont biens 0xFF |
higepi | 3:ac6eead48a9d | 48 | i_rx=0; |
higepi | 3:ac6eead48a9d | 49 | else i_rx++; |
higepi | 4:4160376d7d69 | 50 | if((i_rx==2)&&(tata[1] != 0xFF)) i_rx=0; |
higepi | 4:4160376d7d69 | 51 | |
higepi | 4:4160376d7d69 | 52 | //Une fois qu'on sait que la trame est "juste" on récupère le reste |
higepi | 3:ac6eead48a9d | 53 | if ((tata[0]==0xFF) && (tata[1]==0xFF) && (tata[2]==0x01) && i_rx==7) |
higepi | 3:ac6eead48a9d | 54 | { |
higepi | 4:4160376d7d69 | 55 | my_led3 = !my_led3; |
higepi | 3:ac6eead48a9d | 56 | i_rx=0; |
higepi | 4:4160376d7d69 | 57 | |
higepi | 6:a243c013e519 | 58 | if(tata[4] == 0){ //si erreur est nulle |
higepi | 4:4160376d7d69 | 59 | //On transforme les données en fonction de ce qu'on lit depuis les moteurs |
higepi | 4:4160376d7d69 | 60 | if (acq_position == 1) position_1 = tata[5]+((uint16_t)tata[6]<<8); |
higepi | 4:4160376d7d69 | 61 | /*if (acq_vitesse == 1){ |
higepi | 4:4160376d7d69 | 62 | sens = ((tata[5]+((uint16_t)tata[6]<<8))&0x40)>>10; |
higepi | 4:4160376d7d69 | 63 | vitesse = tata[5]+((uint16_t)tata[6]<<8); |
higepi | 4:4160376d7d69 | 64 | }*/ |
higepi | 4:4160376d7d69 | 65 | } |
higepi | 3:ac6eead48a9d | 66 | tata[0]=0; |
higepi | 3:ac6eead48a9d | 67 | } |
higepi | 4:4160376d7d69 | 68 | |
higepi | 4:4160376d7d69 | 69 | if ((tata[0]==0xFF) && (tata[1]==0xFF) && (tata[2]==0x02) && i_rx==7) |
higepi | 4:4160376d7d69 | 70 | { |
higepi | 4:4160376d7d69 | 71 | my_led3 = !my_led3; |
higepi | 4:4160376d7d69 | 72 | i_rx=0; |
higepi | 4:4160376d7d69 | 73 | |
higepi | 6:a243c013e519 | 74 | if(tata[4]==00){ //si erreur nulle |
higepi | 4:4160376d7d69 | 75 | //On transforme les données en fonction de ce qu'on lit depuis les moteurs |
higepi | 4:4160376d7d69 | 76 | if (acq_position == 1) position_2 = tata[5]+((uint16_t)tata[6]<<8); |
higepi | 4:4160376d7d69 | 77 | /*if (acq_vitesse == 1){ |
higepi | 4:4160376d7d69 | 78 | sens = ((tata[5]+((uint16_t)tata[6]<<8))&0x40)>>10; |
higepi | 4:4160376d7d69 | 79 | vitesse = tata[5]+((uint16_t)tata[6]<<8); |
higepi | 4:4160376d7d69 | 80 | }*/ |
higepi | 4:4160376d7d69 | 81 | } |
higepi | 4:4160376d7d69 | 82 | tata[0]=0; |
higepi | 4:4160376d7d69 | 83 | } |
higepi | 4:4160376d7d69 | 84 | |
higepi | 4:4160376d7d69 | 85 | if ((tata[0]==0xFF) && (tata[1]==0xFF) && (tata[2]==0x03) && i_rx==7) |
higepi | 3:ac6eead48a9d | 86 | { |
higepi | 4:4160376d7d69 | 87 | my_led3 = !my_led3; |
higepi | 4:4160376d7d69 | 88 | i_rx=0; |
higepi | 4:4160376d7d69 | 89 | |
higepi | 6:a243c013e519 | 90 | if(tata[4]==00){ //si erreur nulle |
higepi | 4:4160376d7d69 | 91 | //On transforme les données en fonction de ce qu'on lit depuis les moteurs |
higepi | 4:4160376d7d69 | 92 | if (acq_position == 1) position_3 = tata[5]+((uint16_t)tata[6]<<8); |
higepi | 4:4160376d7d69 | 93 | /*if (acq_vitesse == 1){ |
higepi | 4:4160376d7d69 | 94 | sens = ((tata[5]+((uint16_t)tata[6]<<8))&0x40)>>10; |
higepi | 4:4160376d7d69 | 95 | vitesse = tata[5]+((uint16_t)tata[6]<<8); |
higepi | 4:4160376d7d69 | 96 | }*/ |
higepi | 4:4160376d7d69 | 97 | } |
higepi | 4:4160376d7d69 | 98 | tata[0]=0; |
higepi | 4:4160376d7d69 | 99 | } |
higepi | 4:4160376d7d69 | 100 | |
higepi | 6:a243c013e519 | 101 | if (i_rx>9) |
higepi | 4:4160376d7d69 | 102 | { |
higepi | 4:4160376d7d69 | 103 | /*for(int i=0;i<10;i++) |
higepi | 4:4160376d7d69 | 104 | tata[i]=0;*/ |
higepi | 3:ac6eead48a9d | 105 | i_rx=0; |
higepi | 3:ac6eead48a9d | 106 | } |
higepi | 3:ac6eead48a9d | 107 | } |
higepi | 3:ac6eead48a9d | 108 | |
higepi | 3:ac6eead48a9d | 109 | void fonction_10ms(void) |
higepi | 3:ac6eead48a9d | 110 | { |
higepi | 5:d65b158dd93d | 111 | /*for(int i=0;i<=19;i++) |
higepi | 4:4160376d7d69 | 112 | { |
higepi | 4:4160376d7d69 | 113 | pc.printf("%X ",tata[i]); |
higepi | 4:4160376d7d69 | 114 | } |
higepi | 5:d65b158dd93d | 115 | pc.printf("\n\r");*/ |
higepi | 5:d65b158dd93d | 116 | |
higepi | 4:4160376d7d69 | 117 | for(int i=0;i<=7;i++) |
higepi | 3:ac6eead48a9d | 118 | { |
higepi | 4:4160376d7d69 | 119 | //On envoi la trame que l'on souhaite |
higepi | 6:a243c013e519 | 120 | if(num_moteur == 1)myserial_ax12.putc(trame_demande_pos_1[i]); |
higepi | 6:a243c013e519 | 121 | if(num_moteur == 2)myserial_ax12.putc(trame_demande_pos_2[i]); |
higepi | 6:a243c013e519 | 122 | if(num_moteur == 3)myserial_ax12.putc(trame_demande_pos_3[i]); |
higepi | 5:d65b158dd93d | 123 | /*if(acq_vitesse){ |
higepi | 4:4160376d7d69 | 124 | myserial_ax12.putc(trame_demande_vitesse[i]); |
higepi | 4:4160376d7d69 | 125 | //pc.printf("\n\rvitesse = %d\n\rsens = %d",vitesse,sens); |
higepi | 5:d65b158dd93d | 126 | }*/ |
bcostm | 0:d5bd863b2036 | 127 | } |
higepi | 5:d65b158dd93d | 128 | num_moteur++; |
higepi | 8:18392048e2cc | 129 | if(num_moteur > 3)num_moteur = 1; |
bcostm | 0:d5bd863b2036 | 130 | } |
higepi | 3:ac6eead48a9d | 131 | |
higepi | 3:ac6eead48a9d | 132 | int main(){ |
higepi | 3:ac6eead48a9d | 133 | //myax12.SetMode(1); //passage en Continuous rotation |
higepi | 4:4160376d7d69 | 134 | |
higepi | 9:11b36174b15e | 135 | //char trame_cmd_speed_1[9]={0xFF,0xFF,0x01,0x5,0x3,0x20,0x10,0x0,0xC6}; |
higepi | 9:11b36174b15e | 136 | //char trame_cmd_speed_2[9]={0xFF,0xFF,0x02,0x5,0x3,0x20,0x10,0x0,0xC5}; |
higepi | 9:11b36174b15e | 137 | //char trame_cmd_speed_3[9]={0xFF,0xFF,0x03,0x5,0x3,0x20,0x10,0x0,0xC4}; |
higepi | 3:ac6eead48a9d | 138 | float Angle; |
higepi | 3:ac6eead48a9d | 139 | short speed; |
higepi | 3:ac6eead48a9d | 140 | char data[10]; |
higepi | 3:ac6eead48a9d | 141 | char s=0; |
higepi | 3:ac6eead48a9d | 142 | float temp; |
higepi | 5:d65b158dd93d | 143 | int position_old_1=0,i,a; |
higepi | 5:d65b158dd93d | 144 | int position_old_2=0; |
higepi | 5:d65b158dd93d | 145 | int position_old_3=0; |
higepi | 3:ac6eead48a9d | 146 | |
higepi | 4:4160376d7d69 | 147 | pc.printf("test lecture AX12\n\r"); |
higepi | 4:4160376d7d69 | 148 | |
higepi | 11:b7b298073e6f | 149 | SetCRSpeed(1,0.2); |
higepi | 11:b7b298073e6f | 150 | SetCRSpeed(2,0.2); |
higepi | 11:b7b298073e6f | 151 | SetCRSpeed(3,0.2); |
higepi | 3:ac6eead48a9d | 152 | |
higepi | 3:ac6eead48a9d | 153 | myserial_ax12.attach(&Rx_Irq_fonction, Serial::RxIrq); |
higepi | 4:4160376d7d69 | 154 | ticker_10ms.attach(&fonction_10ms,1); |
higepi | 3:ac6eead48a9d | 155 | |
higepi | 3:ac6eead48a9d | 156 | while(1) { |
higepi | 4:4160376d7d69 | 157 | |
higepi | 5:d65b158dd93d | 158 | |
higepi | 7:f793a00a6e37 | 159 | if (position_1 != position_old_1) |
higepi | 7:f793a00a6e37 | 160 | { |
higepi | 7:f793a00a6e37 | 161 | pc.printf("\n\rposition moteur 1 = %d :", position_1); |
higepi | 7:f793a00a6e37 | 162 | //pc.printf("\n\rposition moteur 1 = %d\n\r mot recu :",position_1); |
higepi | 7:f793a00a6e37 | 163 | |
higepi | 7:f793a00a6e37 | 164 | /*for(i=0;i<=7;i++) |
higepi | 7:f793a00a6e37 | 165 | { |
higepi | 7:f793a00a6e37 | 166 | pc.printf("%X ",tata[i]); |
higepi | 7:f793a00a6e37 | 167 | }*/ |
higepi | 7:f793a00a6e37 | 168 | position_old_1 = position_1; |
higepi | 3:ac6eead48a9d | 169 | } |
higepi | 7:f793a00a6e37 | 170 | if (position_2 != position_old_2) |
higepi | 7:f793a00a6e37 | 171 | { |
higepi | 7:f793a00a6e37 | 172 | pc.printf("\n\rposition moteur 2 = %d :", position_2); |
higepi | 7:f793a00a6e37 | 173 | |
higepi | 7:f793a00a6e37 | 174 | position_old_2 = position_2; |
higepi | 7:f793a00a6e37 | 175 | } |
higepi | 7:f793a00a6e37 | 176 | if (position_3 != position_old_3) |
higepi | 7:f793a00a6e37 | 177 | { |
higepi | 7:f793a00a6e37 | 178 | pc.printf("\n\rposition moteur 3 = %d :", position_3); |
higepi | 7:f793a00a6e37 | 179 | |
higepi | 7:f793a00a6e37 | 180 | position_old_3 = position_3; |
higepi | 7:f793a00a6e37 | 181 | } |
higepi | 7:f793a00a6e37 | 182 | |
higepi | 4:4160376d7d69 | 183 | |
higepi | 4:4160376d7d69 | 184 | } |
higepi | 3:ac6eead48a9d | 185 | |
higepi | 3:ac6eead48a9d | 186 | } |
higepi | 3:ac6eead48a9d | 187 | |
higepi | 11:b7b298073e6f | 188 | void SetCRSpeed(int ID, float speed) { |
higepi | 11:b7b298073e6f | 189 | |
higepi | 11:b7b298073e6f | 190 | // bit 10 = direction, 0 = CCW, 1=CW |
higepi | 11:b7b298073e6f | 191 | // bits 9-0 = Speed |
higepi | 9:11b36174b15e | 192 | char data[2]; |
higepi | 9:11b36174b15e | 193 | |
higepi | 9:11b36174b15e | 194 | int goal = (0x3ff * abs(speed)); |
higepi | 9:11b36174b15e | 195 | |
higepi | 9:11b36174b15e | 196 | // Set direction CW if we have a negative speed |
higepi | 9:11b36174b15e | 197 | if (speed < 0) { |
higepi | 9:11b36174b15e | 198 | goal |= (0x1 << 10); |
higepi | 9:11b36174b15e | 199 | } |
higepi | 11:b7b298073e6f | 200 | |
higepi | 11:b7b298073e6f | 201 | data[0] = goal & 0xff; // bottom 8 bits |
higepi | 11:b7b298073e6f | 202 | data[1] = goal >> 8; // top 8 bits |
higepi | 11:b7b298073e6f | 203 | |
higepi | 11:b7b298073e6f | 204 | // write the packet, return the error code |
higepi | 11:b7b298073e6f | 205 | Write(ID, 0x20, 2, data); |
higepi | 11:b7b298073e6f | 206 | } |
higepi | 11:b7b298073e6f | 207 | |
higepi | 11:b7b298073e6f | 208 | void SetMode(int ID, int mode) { |
higepi | 11:b7b298073e6f | 209 | |
higepi | 11:b7b298073e6f | 210 | if (mode == 1) { // set CR |
higepi | 11:b7b298073e6f | 211 | SetCWLimit(ID,0); |
higepi | 11:b7b298073e6f | 212 | SetCCWLimit(ID,0); |
higepi | 11:b7b298073e6f | 213 | SetCRSpeed(ID,0.0); |
higepi | 11:b7b298073e6f | 214 | } else { |
higepi | 11:b7b298073e6f | 215 | SetCWLimit(ID,0); |
higepi | 11:b7b298073e6f | 216 | SetCCWLimit(ID,360); |
higepi | 11:b7b298073e6f | 217 | SetCRSpeed(ID,0.0); |
higepi | 11:b7b298073e6f | 218 | } |
higepi | 11:b7b298073e6f | 219 | } |
higepi | 11:b7b298073e6f | 220 | |
higepi | 11:b7b298073e6f | 221 | void SetCWLimit (int ID, int degrees) { |
higepi | 11:b7b298073e6f | 222 | |
higepi | 11:b7b298073e6f | 223 | char data[2]; |
higepi | 11:b7b298073e6f | 224 | short limit = (4095 * degrees) / 360; |
higepi | 11:b7b298073e6f | 225 | |
higepi | 11:b7b298073e6f | 226 | data[0] = limit & 0xff; // bottom 8 bits |
higepi | 11:b7b298073e6f | 227 | data[1] = limit >> 8; // top 8 bits |
higepi | 11:b7b298073e6f | 228 | |
higepi | 11:b7b298073e6f | 229 | Write(ID, 0x06, 2, data); |
higepi | 11:b7b298073e6f | 230 | } |
higepi | 11:b7b298073e6f | 231 | |
higepi | 11:b7b298073e6f | 232 | void SetCCWLimit (int ID, int degrees) { |
higepi | 9:11b36174b15e | 233 | |
higepi | 11:b7b298073e6f | 234 | char data[2]; |
higepi | 11:b7b298073e6f | 235 | short limit = (4095 * degrees) / 360; |
higepi | 11:b7b298073e6f | 236 | |
higepi | 11:b7b298073e6f | 237 | data[0] = limit & 0xff; // bottom 8 bits |
higepi | 11:b7b298073e6f | 238 | data[1] = limit >> 8; // top 8 bits |
higepi | 11:b7b298073e6f | 239 | |
higepi | 11:b7b298073e6f | 240 | Write(ID, 0x08, 2, data); |
higepi | 11:b7b298073e6f | 241 | } |
higepi | 11:b7b298073e6f | 242 | |
higepi | 11:b7b298073e6f | 243 | void Write(int ID, int start, int bytes, char* data){ |
higepi | 11:b7b298073e6f | 244 | char TxBuf[16]; |
higepi | 11:b7b298073e6f | 245 | char sum = 0; |
higepi | 11:b7b298073e6f | 246 | |
higepi | 11:b7b298073e6f | 247 | TxBuf[0] = 0xff; |
higepi | 11:b7b298073e6f | 248 | TxBuf[1] = 0xff; |
higepi | 11:b7b298073e6f | 249 | |
higepi | 11:b7b298073e6f | 250 | // ID |
higepi | 9:11b36174b15e | 251 | TxBuf[2] = ID; |
higepi | 9:11b36174b15e | 252 | sum += TxBuf[2]; |
higepi | 11:b7b298073e6f | 253 | |
higepi | 11:b7b298073e6f | 254 | |
higepi | 11:b7b298073e6f | 255 | // packet Length |
higepi | 11:b7b298073e6f | 256 | TxBuf[3] = 3+bytes; |
higepi | 9:11b36174b15e | 257 | sum += TxBuf[3]; |
higepi | 9:11b36174b15e | 258 | |
higepi | 11:b7b298073e6f | 259 | // Instruction |
higepi | 11:b7b298073e6f | 260 | TxBuf[4]=0x03; |
higepi | 9:11b36174b15e | 261 | sum += TxBuf[4]; |
higepi | 11:b7b298073e6f | 262 | |
higepi | 11:b7b298073e6f | 263 | // Start Address |
higepi | 11:b7b298073e6f | 264 | TxBuf[5] = start; |
higepi | 9:11b36174b15e | 265 | sum += TxBuf[5]; |
higepi | 11:b7b298073e6f | 266 | |
higepi | 11:b7b298073e6f | 267 | // data |
higepi | 11:b7b298073e6f | 268 | for (char i=0; i<bytes ; i++) { |
higepi | 11:b7b298073e6f | 269 | TxBuf[6+i] = data[i]; |
higepi | 11:b7b298073e6f | 270 | sum += TxBuf[6+i]; |
higepi | 11:b7b298073e6f | 271 | |
higepi | 11:b7b298073e6f | 272 | } |
higepi | 11:b7b298073e6f | 273 | |
higepi | 11:b7b298073e6f | 274 | // checksum |
higepi | 11:b7b298073e6f | 275 | TxBuf[6+bytes] = 0xFF - sum; |
higepi | 11:b7b298073e6f | 276 | |
higepi | 11:b7b298073e6f | 277 | // Transmit the packet in one burst with no pausing |
higepi | 11:b7b298073e6f | 278 | for (int i = 0; i < (7 + bytes) ; i++) { |
higepi | 9:11b36174b15e | 279 | myserial_ax12.putc(TxBuf[i]); |
higepi | 9:11b36174b15e | 280 | } |
higepi | 11:b7b298073e6f | 281 | |
higepi | 11:b7b298073e6f | 282 | wait(0.00002); |
higepi | 11:b7b298073e6f | 283 | |
higepi | 9:11b36174b15e | 284 | } |
higepi | 9:11b36174b15e | 285 | |
higepi | 4:4160376d7d69 | 286 | //void set_speed(ID,speed) |
higepi | 4:4160376d7d69 | 287 | //void demande_lecture_pos(ID) |
higepi | 3:ac6eead48a9d | 288 | |
higepi | 3:ac6eead48a9d | 289 | |
higepi | 3:ac6eead48a9d | 290 | /* |
higepi | 3:ac6eead48a9d | 291 | #include "mbed.h" |
higepi | 3:ac6eead48a9d | 292 | |
higepi | 3:ac6eead48a9d | 293 | //AX12 myax12 (PC_4, PC_5, 1,115200); |
higepi | 3:ac6eead48a9d | 294 | Serial myserial_ax12(PC_4,PC_5,115200); |
higepi | 3:ac6eead48a9d | 295 | char tata[10]; |
higepi | 3:ac6eead48a9d | 296 | int position; |
higepi | 3:ac6eead48a9d | 297 | |
higepi | 3:ac6eead48a9d | 298 | void Rx_Irq_fonction(void) |
higepi | 3:ac6eead48a9d | 299 | { |
higepi | 3:ac6eead48a9d | 300 | static int i_rx; |
higepi | 3:ac6eead48a9d | 301 | tata[i_rx]=myserial_ax12.getc(); |
higepi | 3:ac6eead48a9d | 302 | if (tata[0]!=0xFF) |
higepi | 3:ac6eead48a9d | 303 | i_rx=0; |
higepi | 3:ac6eead48a9d | 304 | else i_rx++; |
higepi | 3:ac6eead48a9d | 305 | if ((tata[0]==0xFF) && (tata[1]==0xFF) && (tata[2]==0x01) && i_rx==7) |
higepi | 3:ac6eead48a9d | 306 | { |
higepi | 3:ac6eead48a9d | 307 | i_rx=0; |
higepi | 3:ac6eead48a9d | 308 | if(tata[4]==00) //si erreur est nulle |
higepi | 3:ac6eead48a9d | 309 | position = tata[5]+((uint16_t)tata[6]<<8); |
higepi | 3:ac6eead48a9d | 310 | tata[0]=0; |
higepi | 3:ac6eead48a9d | 311 | } |
higepi | 3:ac6eead48a9d | 312 | if (i_rx>9) |
higepi | 3:ac6eead48a9d | 313 | { |
higepi | 3:ac6eead48a9d | 314 | for(int i=0;i<10;i++) |
higepi | 3:ac6eead48a9d | 315 | tata[i]=0; |
higepi | 3:ac6eead48a9d | 316 | i_rx=0; |
higepi | 3:ac6eead48a9d | 317 | } |
higepi | 3:ac6eead48a9d | 318 | } |
higepi | 3:ac6eead48a9d | 319 | |
higepi | 3:ac6eead48a9d | 320 | int main(){ |
higepi | 3:ac6eead48a9d | 321 | //myax12.SetMode(1); //passage en Continuous rotation |
higepi | 3:ac6eead48a9d | 322 | char trame_demande_pos[8]={0xFF,0xFF,0x01,0x4,0x2,0x24,2,0xD2}; |
higepi | 3:ac6eead48a9d | 323 | char trame_cmd_speed[9]={0xFF,0xFF,0x01,0x5,0x3,0x20,0x10,0x0,0xC6}; |
higepi | 3:ac6eead48a9d | 324 | float Angle; |
higepi | 3:ac6eead48a9d | 325 | short speed; |
higepi | 3:ac6eead48a9d | 326 | char data[10]; |
higepi | 3:ac6eead48a9d | 327 | char s=0; |
higepi | 3:ac6eead48a9d | 328 | float temp; |
higepi | 3:ac6eead48a9d | 329 | int position_old=0,i,a; |
higepi | 3:ac6eead48a9d | 330 | //myax12.SetCRSpeed(0.05); |
higepi | 3:ac6eead48a9d | 331 | |
higepi | 3:ac6eead48a9d | 332 | for(i=0;i<=8;i++) |
higepi | 3:ac6eead48a9d | 333 | { |
higepi | 3:ac6eead48a9d | 334 | myserial_ax12.putc(trame_cmd_speed[i]); |
higepi | 3:ac6eead48a9d | 335 | } |
higepi | 3:ac6eead48a9d | 336 | |
higepi | 3:ac6eead48a9d | 337 | for(i=0;i<=7;i++) |
higepi | 3:ac6eead48a9d | 338 | { |
higepi | 3:ac6eead48a9d | 339 | myserial_ax12.putc(trame_demande_pos[i]); |
higepi | 3:ac6eead48a9d | 340 | } |
higepi | 3:ac6eead48a9d | 341 | myserial_ax12.attach(&Rx_Irq_fonction, Serial::RxIrq); |
higepi | 3:ac6eead48a9d | 342 | |
higepi | 3:ac6eead48a9d | 343 | |
higepi | 3:ac6eead48a9d | 344 | while(1) { |
higepi | 3:ac6eead48a9d | 345 | if (position != position_old) |
higepi | 3:ac6eead48a9d | 346 | { |
higepi | 3:ac6eead48a9d | 347 | printf("\n\rposition = %d\n\r mot recu :",position); |
higepi | 3:ac6eead48a9d | 348 | for(i=0;i<=7;i++) |
higepi | 3:ac6eead48a9d | 349 | { |
higepi | 3:ac6eead48a9d | 350 | printf("%X ",tata[i]); |
higepi | 3:ac6eead48a9d | 351 | } |
higepi | 3:ac6eead48a9d | 352 | position_old=position; |
higepi | 3:ac6eead48a9d | 353 | } |
higepi | 3:ac6eead48a9d | 354 | wait(0.01); |
higepi | 3:ac6eead48a9d | 355 | a++; |
higepi | 3:ac6eead48a9d | 356 | if(!(a % 20)) |
higepi | 3:ac6eead48a9d | 357 | for(i=0;i<=7;i++) |
higepi | 3:ac6eead48a9d | 358 | { |
higepi | 3:ac6eead48a9d | 359 | myserial_ax12.putc(trame_demande_pos[i]); |
higepi | 3:ac6eead48a9d | 360 | } |
higepi | 3:ac6eead48a9d | 361 | } |
higepi | 3:ac6eead48a9d | 362 | |
higepi | 3:ac6eead48a9d | 363 | } |
higepi | 3:ac6eead48a9d | 364 | |
higepi | 3:ac6eead48a9d | 365 | void set_speed(ID,speed)*/ |