Program wich pilot a step motor board.

Dependencies:   TextLCD mbed

Committer:
dcharala
Date:
Mon Jun 30 11:54:00 2014 +0000
Revision:
0:b031f05749d0
This programm permit to drive a specific card forstep motors

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dcharala 0:b031f05749d0 1 #include "mbed.h"
dcharala 0:b031f05749d0 2
dcharala 0:b031f05749d0 3 #include <sstream>
dcharala 0:b031f05749d0 4 #include <string>
dcharala 0:b031f05749d0 5 // Version 1.0 : Fait uniquement marcher les moteurs d'une position à une autre donnée en nb d'impulsion
dcharala 0:b031f05749d0 6 // Version 1.1.0 : non utilisation du PWM mais du mode ticker pour piloter le moteur
dcharala 0:b031f05749d0 7 //validation 1.1 : Rajout d'une rampe sur le pin de control du moteur en 500ms, et gestion du pin par ticker au lieu d'une PWM
dcharala 0:b031f05749d0 8 // fonction stop?
dcharala 0:b031f05749d0 9
dcharala 0:b031f05749d0 10 // Version 1.2.0 : integration du code QEI(quadrature encoder input) , nécessiste 2 ports : pin 15 et 16
dcharala 0:b031f05749d0 11 // position transformé directement en cm
dcharala 0:b031f05749d0 12
dcharala 0:b031f05749d0 13 // Version 1.3 : mesure de temps entre impulsion + résolution encodeur 1/800 e de tour au lieu de 1/400e
dcharala 0:b031f05749d0 14
dcharala 0:b031f05749d0 15 // version 1.3.2 : envoi de la position réelle
dcharala 0:b031f05749d0 16
dcharala 0:b031f05749d0 17 //A little test in order to slipt a string in two part, as following :
dcharala 0:b031f05749d0 18 // "This string" => arg[0]="This" arg[1]="string"
dcharala 0:b031f05749d0 19 // After a test with split
dcharala 0:b031f05749d0 20
dcharala 0:b031f05749d0 21
dcharala 0:b031f05749d0 22
dcharala 0:b031f05749d0 23 //This programm is designed in order to move on a z-axis a device by a step motot
dcharala 0:b031f05749d0 24 // a card sold by selectronic controlling a step motor through a L297 and a L6203 from ST
dcharala 0:b031f05749d0 25 //see:
dcharala 0:b031f05749d0 26 //http://www.selectronic.fr/c/robotique-moteurs-accessoires/modules-de-commande/commandes-de-moteur-pas-a-pas/carte-de-commande-pour-moteur-pas-a-pas-a-l6203-version-montee.html
dcharala 0:b031f05749d0 27 //Ref. 6950-11
dcharala 0:b031f05749d0 28
dcharala 0:b031f05749d0 29 //Config LCD
dcharala 0:b031f05749d0 30 //TextLCD lcd(p14,p19,p24,p23,p22,p21); //rs, e, d4-d7
dcharala 0:b031f05749d0 31
dcharala 0:b031f05749d0 32
dcharala 0:b031f05749d0 33 //config LEDS
dcharala 0:b031f05749d0 34 DigitalOut led1(LED1);
dcharala 0:b031f05749d0 35 DigitalOut led2(LED2);
dcharala 0:b031f05749d0 36 DigitalOut led3(LED3);
dcharala 0:b031f05749d0 37 DigitalOut led4(LED4);
dcharala 0:b031f05749d0 38
dcharala 0:b031f05749d0 39 //In some Future version :
dcharala 0:b031f05749d0 40
dcharala 0:b031f05749d0 41 DigitalOut PinEnable(p17);
dcharala 0:b031f05749d0 42 DigitalOut PinControl(p18);
dcharala 0:b031f05749d0 43
dcharala 0:b031f05749d0 44 DigitalOut Pin_HF_Pas(p27);
dcharala 0:b031f05749d0 45
dcharala 0:b031f05749d0 46 // QEI Voie A et B
dcharala 0:b031f05749d0 47 InterruptIn VoieA(p16);
dcharala 0:b031f05749d0 48 InterruptIn VoieB(p15);
dcharala 0:b031f05749d0 49 Timer t;
dcharala 0:b031f05749d0 50 //PwmOut Clock(p25); // CHANGE :: tranforn in Digital OUt and put a ticker on
dcharala 0:b031f05749d0 51 DigitalOut Clock(p25);
dcharala 0:b031f05749d0 52 Ticker Clocker;
dcharala 0:b031f05749d0 53 Timeout flipper;
dcharala 0:b031f05749d0 54 DigitalOut PinDrct(p28);
dcharala 0:b031f05749d0 55 DigitalOut PinReset(p26);
dcharala 0:b031f05749d0 56 //InterruptIn PinCount(p29); //counter of PWM so it's count the number of step of the motor. pin free from 1.1 version
dcharala 0:b031f05749d0 57
dcharala 0:b031f05749d0 58 /*union FloatBytes {
dcharala 0:b031f05749d0 59 char c[4];
dcharala 0:b031f05749d0 60 float f;
dcharala 0:b031f05749d0 61
dcharala 0:b031f05749d0 62
dcharala 0:b031f05749d0 63 };*/
dcharala 0:b031f05749d0 64
dcharala 0:b031f05749d0 65 float speed=5e-3; // speed is the period of the motot pulse by default the frequency is 200Hz => 1.2 cm/s
dcharala 0:b031f05749d0 66
dcharala 0:b031f05749d0 67 // Variables of position : given here vers 1.0 like an int af after 1.1 in cm as an float.
dcharala 0:b031f05749d0 68 float NewPos=0.0;
dcharala 0:b031f05749d0 69 //int position=0;
dcharala 0:b031f05749d0 70 float dir=0.0;
dcharala 0:b031f05749d0 71 int RealPosition=0;
dcharala 0:b031f05749d0 72 float p=1.0/200.0*1.2;
dcharala 0:b031f05749d0 73 int run=0;
dcharala 0:b031f05749d0 74 int Stop=0;
dcharala 0:b031f05749d0 75 float positionCm=0;// positionCm=position/200*1.2
dcharala 0:b031f05749d0 76 float RealPositionCm=0;// RealPositionCm=RealPosition/400*1.2
dcharala 0:b031f05749d0 77 int i=0;
dcharala 0:b031f05749d0 78 int count=0;
dcharala 0:b031f05749d0 79
dcharala 0:b031f05749d0 80 Serial pc(USBTX,USBRX); //tx, rx
dcharala 0:b031f05749d0 81
dcharala 0:b031f05749d0 82 //QEI variables :
dcharala 0:b031f05749d0 83
dcharala 0:b031f05749d0 84 float periode=0;
dcharala 0:b031f05749d0 85 int k=0;
dcharala 0:b031f05749d0 86 float drpm=1.0/800.0*1.2;
dcharala 0:b031f05749d0 87 float velocity=0; //in mm/s
dcharala 0:b031f05749d0 88
dcharala 0:b031f05749d0 89
dcharala 0:b031f05749d0 90 float array_time_pos[40];
dcharala 0:b031f05749d0 91
dcharala 0:b031f05749d0 92 float array_time_pulse[14];
dcharala 0:b031f05749d0 93
dcharala 0:b031f05749d0 94 //*************************
dcharala 0:b031f05749d0 95
dcharala 0:b031f05749d0 96 char s1[20],s2[20];// s1 and s2 will be the two arg off the string
dcharala 0:b031f05749d0 97 // I will do just an echo as following:
dcharala 0:b031f05749d0 98 // string1 = ...
dcharala 0:b031f05749d0 99 //string 2 = ...
dcharala 0:b031f05749d0 100
dcharala 0:b031f05749d0 101 //TO DO LIST 1.1
dcharala 0:b031f05749d0 102 /*
dcharala 0:b031f05749d0 103 func POW => DONE
dcharala 0:b031f05749d0 104 func PAS => DONE
dcharala 0:b031f05749d0 105 func VIT => DONE
dcharala 0:b031f05749d0 106 func DRCT => DONE
dcharala 0:b031f05749d0 107 func ZERO => DONE
dcharala 0:b031f05749d0 108 func POS => DONE
dcharala 0:b031f05749d0 109 func MOVE => DONE
dcharala 0:b031f05749d0 110
dcharala 0:b031f05749d0 111
dcharala 0:b031f05749d0 112 */
dcharala 0:b031f05749d0 113 //TO DO LIST 1.2
dcharala 0:b031f05749d0 114 /*Integration QEI :
dcharala 0:b031f05749d0 115 Integration QEI :
dcharala 0:b031f05749d0 116 - injection code init dans main : FAIT
dcharala 0:b031f05749d0 117 - inclure fonction fall et rise : FAIT
dcharala 0:b031f05749d0 118 - inclure déclaration de variables utilisées dans fall and rise :FAIT
dcharala 0:b031f05749d0 119 - exploitation de l'information QEI dans le code : à faire
dcharala 0:b031f05749d0 120 - non utilisation de la variable timeout t : pour l'instant à voir
dcharala 0:b031f05749d0 121
dcharala 0:b031f05749d0 122 */
dcharala 0:b031f05749d0 123
dcharala 0:b031f05749d0 124 //values return by text the status of the controller
dcharala 0:b031f05749d0 125
dcharala 0:b031f05749d0 126
dcharala 0:b031f05749d0 127 void Values()
dcharala 0:b031f05749d0 128 {
dcharala 0:b031f05749d0 129 int pas=Pin_HF_Pas;
dcharala 0:b031f05749d0 130 int power=PinEnable;
dcharala 0:b031f05749d0 131
dcharala 0:b031f05749d0 132
dcharala 0:b031f05749d0 133 pc.printf("\n\rStates\n\r");
dcharala 0:b031f05749d0 134 pc.printf("Half/Full %d\n",pas); //half 0 full 1
dcharala 0:b031f05749d0 135 pc.printf("Period_speed %f\n",speed);
dcharala 0:b031f05749d0 136 pc.printf("Actual_position %fcm\n",positionCm);
dcharala 0:b031f05749d0 137 pc.printf("Real_position %fcm\n",RealPositionCm);
dcharala 0:b031f05749d0 138 pc.printf("Power %d\n@",power);
dcharala 0:b031f05749d0 139
dcharala 0:b031f05749d0 140 }
dcharala 0:b031f05749d0 141 // Moving() permit to manage the movement of the step motor
dcharala 0:b031f05749d0 142 void compt_rise_A(void)
dcharala 0:b031f05749d0 143 {
dcharala 0:b031f05749d0 144
dcharala 0:b031f05749d0 145 //t.start();
dcharala 0:b031f05749d0 146 if(VoieB) {
dcharala 0:b031f05749d0 147
dcharala 0:b031f05749d0 148 RealPositionCm=RealPositionCm+drpm;
dcharala 0:b031f05749d0 149 } else {
dcharala 0:b031f05749d0 150
dcharala 0:b031f05749d0 151 RealPositionCm=RealPositionCm-drpm;
dcharala 0:b031f05749d0 152
dcharala 0:b031f05749d0 153 }
dcharala 0:b031f05749d0 154
dcharala 0:b031f05749d0 155 array_time_pos[i]=t.read();
dcharala 0:b031f05749d0 156 //i++;
dcharala 0:b031f05749d0 157 }
dcharala 0:b031f05749d0 158
dcharala 0:b031f05749d0 159 void compt_rise_B(void)
dcharala 0:b031f05749d0 160 {
dcharala 0:b031f05749d0 161 //t.start();
dcharala 0:b031f05749d0 162 if(VoieA) {
dcharala 0:b031f05749d0 163
dcharala 0:b031f05749d0 164 RealPositionCm=RealPositionCm-drpm;
dcharala 0:b031f05749d0 165 } else {
dcharala 0:b031f05749d0 166
dcharala 0:b031f05749d0 167 RealPositionCm=RealPositionCm+drpm;
dcharala 0:b031f05749d0 168
dcharala 0:b031f05749d0 169 }
dcharala 0:b031f05749d0 170
dcharala 0:b031f05749d0 171 array_time_pos[i]=t.read();
dcharala 0:b031f05749d0 172 //i++;
dcharala 0:b031f05749d0 173 }
dcharala 0:b031f05749d0 174
dcharala 0:b031f05749d0 175 void compt_fall_A(void)
dcharala 0:b031f05749d0 176 {
dcharala 0:b031f05749d0 177 // t.stop();
dcharala 0:b031f05749d0 178 //periode=t.read()*2;
dcharala 0:b031f05749d0 179 // velocity=Pas/(periode*PPR*2);//in µm/s
dcharala 0:b031f05749d0 180
dcharala 0:b031f05749d0 181 //t.reset();
dcharala 0:b031f05749d0 182 if(!VoieB) {
dcharala 0:b031f05749d0 183
dcharala 0:b031f05749d0 184 RealPositionCm=RealPositionCm+drpm;
dcharala 0:b031f05749d0 185 } else {
dcharala 0:b031f05749d0 186
dcharala 0:b031f05749d0 187 RealPositionCm=RealPositionCm-drpm;
dcharala 0:b031f05749d0 188 }
dcharala 0:b031f05749d0 189
dcharala 0:b031f05749d0 190 array_time_pos[i]=t.read();
dcharala 0:b031f05749d0 191 //i++;
dcharala 0:b031f05749d0 192 }
dcharala 0:b031f05749d0 193
dcharala 0:b031f05749d0 194 void compt_fall_B(void)
dcharala 0:b031f05749d0 195 {
dcharala 0:b031f05749d0 196 // t.stop();
dcharala 0:b031f05749d0 197 //periode=t.read()*2;
dcharala 0:b031f05749d0 198 // velocity=Pas/(periode*PPR*2);//in µm/s
dcharala 0:b031f05749d0 199
dcharala 0:b031f05749d0 200 //t.reset();
dcharala 0:b031f05749d0 201 if(!VoieA) {
dcharala 0:b031f05749d0 202
dcharala 0:b031f05749d0 203 RealPositionCm=RealPositionCm-drpm;
dcharala 0:b031f05749d0 204 } else {
dcharala 0:b031f05749d0 205
dcharala 0:b031f05749d0 206 RealPositionCm=RealPositionCm+drpm;
dcharala 0:b031f05749d0 207 }
dcharala 0:b031f05749d0 208
dcharala 0:b031f05749d0 209 array_time_pos[i]=t.read();
dcharala 0:b031f05749d0 210 //i++;
dcharala 0:b031f05749d0 211 }
dcharala 0:b031f05749d0 212 LocalFileSystem local("local"); // Create the local filesystem under the name "local"
dcharala 0:b031f05749d0 213 FILE *fp = fopen("/local/out.txt", "w"); // Open "out.txt" on the local file system for writing
dcharala 0:b031f05749d0 214
dcharala 0:b031f05749d0 215
dcharala 0:b031f05749d0 216 /*void Write()
dcharala 0:b031f05749d0 217 {
dcharala 0:b031f05749d0 218 int j=0;
dcharala 0:b031f05749d0 219 fp = fopen("/local/out.txt", "w");
dcharala 0:b031f05749d0 220 for( j =0; j<=i ; j++ ) {
dcharala 0:b031f05749d0 221 fprintf(fp, "%f\n",array_time_pos[j]);
dcharala 0:b031f05749d0 222 }
dcharala 0:b031f05749d0 223
dcharala 0:b031f05749d0 224 fclose(fp);
dcharala 0:b031f05749d0 225 j=0;
dcharala 0:b031f05749d0 226
dcharala 0:b031f05749d0 227 fp=fopen("/local/out_pulse.txt", "w");
dcharala 0:b031f05749d0 228 for( j =0; j<=k ; j++ ) {
dcharala 0:b031f05749d0 229 fprintf(fp, "%f\n",array_time_pulse[j]);
dcharala 0:b031f05749d0 230 }
dcharala 0:b031f05749d0 231 fclose(fp);
dcharala 0:b031f05749d0 232
dcharala 0:b031f05749d0 233
dcharala 0:b031f05749d0 234
dcharala 0:b031f05749d0 235 }*/
dcharala 0:b031f05749d0 236
dcharala 0:b031f05749d0 237 void flip(){
dcharala 0:b031f05749d0 238
dcharala 0:b031f05749d0 239 Clock=1;
dcharala 0:b031f05749d0 240
dcharala 0:b031f05749d0 241 }
dcharala 0:b031f05749d0 242
dcharala 0:b031f05749d0 243 void Moving()
dcharala 0:b031f05749d0 244 {
dcharala 0:b031f05749d0 245 if(positionCm*dir>=NewPos*dir||Stop==1) {
dcharala 0:b031f05749d0 246
dcharala 0:b031f05749d0 247 Clock=1;// set the PWM at 1 so it switch off the controller at pull up
dcharala 0:b031f05749d0 248 Clocker.detach();// this action detach the funxctio Moving() from PinCount
dcharala 0:b031f05749d0 249 PinEnable=0;
dcharala 0:b031f05749d0 250 pc.printf("\narrived at %fcm\nReal_position %fcm\n@",positionCm,RealPositionCm);
dcharala 0:b031f05749d0 251 //Write();
dcharala 0:b031f05749d0 252 Stop=0;
dcharala 0:b031f05749d0 253 t.stop();
dcharala 0:b031f05749d0 254 t.reset();
dcharala 0:b031f05749d0 255 k=0;
dcharala 0:b031f05749d0 256 i=0;
dcharala 0:b031f05749d0 257 } else {
dcharala 0:b031f05749d0 258 Clock=0;
dcharala 0:b031f05749d0 259 array_time_pulse[k]= t.read();
dcharala 0:b031f05749d0 260 //k++;
dcharala 0:b031f05749d0 261
dcharala 0:b031f05749d0 262 flipper.attach_us(&flip,500);
dcharala 0:b031f05749d0 263 if(PinDrct==1) {
dcharala 0:b031f05749d0 264 //position++;
dcharala 0:b031f05749d0 265 positionCm=positionCm+p;
dcharala 0:b031f05749d0 266 }
dcharala 0:b031f05749d0 267 if(PinDrct==0) {
dcharala 0:b031f05749d0 268 //position--;
dcharala 0:b031f05749d0 269 positionCm=positionCm-p;
dcharala 0:b031f05749d0 270 }
dcharala 0:b031f05749d0 271 }
dcharala 0:b031f05749d0 272
dcharala 0:b031f05749d0 273 }
dcharala 0:b031f05749d0 274
dcharala 0:b031f05749d0 275
dcharala 0:b031f05749d0 276
dcharala 0:b031f05749d0 277
dcharala 0:b031f05749d0 278 void POW(char p)//DONE
dcharala 0:b031f05749d0 279 // rend "enable" l'action des moteur
dcharala 0:b031f05749d0 280 {
dcharala 0:b031f05749d0 281 //To be optimized later
dcharala 0:b031f05749d0 282 if(p=='1') {
dcharala 0:b031f05749d0 283 PinEnable=1;
dcharala 0:b031f05749d0 284 }
dcharala 0:b031f05749d0 285 if(p=='0') {
dcharala 0:b031f05749d0 286 PinEnable=0;
dcharala 0:b031f05749d0 287 }
dcharala 0:b031f05749d0 288 }
dcharala 0:b031f05749d0 289
dcharala 0:b031f05749d0 290
dcharala 0:b031f05749d0 291 void PAS(char t)//DONE
dcharala 0:b031f05749d0 292 {
dcharala 0:b031f05749d0 293 if(t=='0') {// FULL
dcharala 0:b031f05749d0 294 Pin_HF_Pas=0;
dcharala 0:b031f05749d0 295 p=1.0/200.0*1.2;
dcharala 0:b031f05749d0 296 }
dcharala 0:b031f05749d0 297 if(t=='1') {
dcharala 0:b031f05749d0 298 Pin_HF_Pas=1;// Half
dcharala 0:b031f05749d0 299 p=1.0/400.0*1.2;
dcharala 0:b031f05749d0 300 }
dcharala 0:b031f05749d0 301
dcharala 0:b031f05749d0 302 }
dcharala 0:b031f05749d0 303
dcharala 0:b031f05749d0 304
dcharala 0:b031f05749d0 305 void VIT(char SpeedTxt[7])//DONE
dcharala 0:b031f05749d0 306 {
dcharala 0:b031f05749d0 307 speed=atof(SpeedTxt); // speed is a period of frenquency of the step motor
dcharala 0:b031f05749d0 308 }
dcharala 0:b031f05749d0 309
dcharala 0:b031f05749d0 310
dcharala 0:b031f05749d0 311 void DRCT(char t)//DONE
dcharala 0:b031f05749d0 312 {
dcharala 0:b031f05749d0 313 if(t=='0')
dcharala 0:b031f05749d0 314 PinDrct=0;
dcharala 0:b031f05749d0 315 if(t=='1')
dcharala 0:b031f05749d0 316 PinDrct=1;
dcharala 0:b031f05749d0 317 }
dcharala 0:b031f05749d0 318
dcharala 0:b031f05749d0 319
dcharala 0:b031f05749d0 320 void ZERO()//DONE
dcharala 0:b031f05749d0 321 {
dcharala 0:b031f05749d0 322 positionCm=0.0;
dcharala 0:b031f05749d0 323
dcharala 0:b031f05749d0 324 }
dcharala 0:b031f05749d0 325
dcharala 0:b031f05749d0 326
dcharala 0:b031f05749d0 327 void POS(char PosTxt[7])//DONE
dcharala 0:b031f05749d0 328 {
dcharala 0:b031f05749d0 329 positionCm = atof(PosTxt);
dcharala 0:b031f05749d0 330 RealPosition= positionCm;
dcharala 0:b031f05749d0 331
dcharala 0:b031f05749d0 332 }
dcharala 0:b031f05749d0 333
dcharala 0:b031f05749d0 334 void MOVE(char PosTxt[7])//DOING
dcharala 0:b031f05749d0 335 {
dcharala 0:b031f05749d0 336 float f,diff;
dcharala 0:b031f05749d0 337 int dirdir=0;
dcharala 0:b031f05749d0 338 // compt=0;
dcharala 0:b031f05749d0 339 k=0;
dcharala 0:b031f05749d0 340 i=0;
dcharala 0:b031f05749d0 341
dcharala 0:b031f05749d0 342
dcharala 0:b031f05749d0 343 f=1/speed;
dcharala 0:b031f05749d0 344 NewPos = atof(PosTxt);
dcharala 0:b031f05749d0 345 diff=NewPos-positionCm;
dcharala 0:b031f05749d0 346 diff=abs(diff);
dcharala 0:b031f05749d0 347 if(diff>0) {
dcharala 0:b031f05749d0 348 POW('1');
dcharala 0:b031f05749d0 349 if(NewPos>positionCm) {
dcharala 0:b031f05749d0 350 PinDrct=1;
dcharala 0:b031f05749d0 351 //position=position+2; // code non nécessaire depuis vers 1.1
dcharala 0:b031f05749d0 352 } else {
dcharala 0:b031f05749d0 353 //position=position-2; // code non nécessaire depuis vers 1.1
dcharala 0:b031f05749d0 354 PinDrct=0;
dcharala 0:b031f05749d0 355 }
dcharala 0:b031f05749d0 356 dirdir=PinDrct;
dcharala 0:b031f05749d0 357 dir=dirdir;
dcharala 0:b031f05749d0 358 dir=dir*2.0-1.0;
dcharala 0:b031f05749d0 359 pc.printf("\n\rPos= %f Newpos= %f \nDirection = %f\n Frequency = %f\n\r@",positionCm,NewPos,dir,f);
dcharala 0:b031f05749d0 360 //distance of run unit ste (version 1.0) and in version 1.1 : the unit will be the cm
dcharala 0:b031f05749d0 361 //PinCount.rise(&Moving);
dcharala 0:b031f05749d0 362 //Clock=0.5; // switch on clock count
dcharala 0:b031f05749d0 363 t.reset();
dcharala 0:b031f05749d0 364 t.start();
dcharala 0:b031f05749d0 365 Clocker.attach(&Moving,speed);
dcharala 0:b031f05749d0 366 }
dcharala 0:b031f05749d0 367
dcharala 0:b031f05749d0 368 }
dcharala 0:b031f05749d0 369
dcharala 0:b031f05749d0 370
dcharala 0:b031f05749d0 371
dcharala 0:b031f05749d0 372 void reception()
dcharala 0:b031f05749d0 373 {
dcharala 0:b031f05749d0 374 //char s[]="";
dcharala 0:b031f05749d0 375 sprintf(s1,"");
dcharala 0:b031f05749d0 376 sprintf(s2,"");
dcharala 0:b031f05749d0 377 //long longueur=100000;
dcharala 0:b031f05749d0 378
dcharala 0:b031f05749d0 379 if(pc.readable()) {
dcharala 0:b031f05749d0 380 pc.scanf("%s %s",&s1,&s2);
dcharala 0:b031f05749d0 381
dcharala 0:b031f05749d0 382 if (strcmp(s1,"POW")==0) {
dcharala 0:b031f05749d0 383 POW(s2[0]);
dcharala 0:b031f05749d0 384 pc.printf("POW\n\r@");
dcharala 0:b031f05749d0 385 }
dcharala 0:b031f05749d0 386 if (strcmp(s1,"PAS")==0) {
dcharala 0:b031f05749d0 387 PAS(s2[0]);
dcharala 0:b031f05749d0 388 pc.printf("\n\r@");
dcharala 0:b031f05749d0 389 }
dcharala 0:b031f05749d0 390 if (strcmp(s1,"VIT")==0) {
dcharala 0:b031f05749d0 391 VIT(s2);
dcharala 0:b031f05749d0 392 pc.printf("\n\r@");
dcharala 0:b031f05749d0 393 }
dcharala 0:b031f05749d0 394 if (strcmp(s1,"DRCT")==0) {
dcharala 0:b031f05749d0 395 DRCT(s2[0]);
dcharala 0:b031f05749d0 396 pc.printf("\n\r@");
dcharala 0:b031f05749d0 397 }
dcharala 0:b031f05749d0 398 if (strcmp(s1,"ZERO")==0) {
dcharala 0:b031f05749d0 399 ZERO();
dcharala 0:b031f05749d0 400 pc.printf("\n\r@");
dcharala 0:b031f05749d0 401
dcharala 0:b031f05749d0 402 }
dcharala 0:b031f05749d0 403 if (strcmp(s1,"STOP")==0) {
dcharala 0:b031f05749d0 404 Stop=1;
dcharala 0:b031f05749d0 405
dcharala 0:b031f05749d0 406 pc.printf("\n Stop received\r@");
dcharala 0:b031f05749d0 407 }
dcharala 0:b031f05749d0 408
dcharala 0:b031f05749d0 409
dcharala 0:b031f05749d0 410 if (strcmp(s1,"MOVE")==0) {
dcharala 0:b031f05749d0 411 MOVE(s2);
dcharala 0:b031f05749d0 412 pc.printf("\nMoving\n\r@");
dcharala 0:b031f05749d0 413
dcharala 0:b031f05749d0 414 }
dcharala 0:b031f05749d0 415 if (strcmp(s1,"POS")==0) {
dcharala 0:b031f05749d0 416 //function to see array to integer or something like that
dcharala 0:b031f05749d0 417 // in order to transform a string (s2) into an int and after a float(version 1.1)
dcharala 0:b031f05749d0 418 float oldpos=positionCm;
dcharala 0:b031f05749d0 419 positionCm=atof(s2);
dcharala 0:b031f05749d0 420 RealPositionCm=positionCm;
dcharala 0:b031f05749d0 421 count++;
dcharala 0:b031f05749d0 422
dcharala 0:b031f05749d0 423 pc.printf("Old position : %f\n\rNew Position : %f\n@",oldpos,positionCm);
dcharala 0:b031f05749d0 424 }
dcharala 0:b031f05749d0 425
dcharala 0:b031f05749d0 426 if (strcmp(s1,"CONT")==0) {
dcharala 0:b031f05749d0 427 PinControl=atoi(s2);
dcharala 0:b031f05749d0 428 }
dcharala 0:b031f05749d0 429
dcharala 0:b031f05749d0 430 if (strcmp(s1,"POS?")==0) {
dcharala 0:b031f05749d0 431 pc.printf("\nPosition = %f cm\nRealPosition = %f cm\n\@",positionCm,RealPositionCm);
dcharala 0:b031f05749d0 432 }
dcharala 0:b031f05749d0 433 if (strcmp(s1,"VAL?")==0) {
dcharala 0:b031f05749d0 434 Values();
dcharala 0:b031f05749d0 435 }
dcharala 0:b031f05749d0 436
dcharala 0:b031f05749d0 437
dcharala 0:b031f05749d0 438 }
dcharala 0:b031f05749d0 439 }
dcharala 0:b031f05749d0 440
dcharala 0:b031f05749d0 441
dcharala 0:b031f05749d0 442 int main()
dcharala 0:b031f05749d0 443 {
dcharala 0:b031f05749d0 444 PinControl=0;
dcharala 0:b031f05749d0 445 PinReset=1; //reset on 0
dcharala 0:b031f05749d0 446 PinDrct=1;
dcharala 0:b031f05749d0 447 Pin_HF_Pas=0; //full step:0 Half step:1
dcharala 0:b031f05749d0 448 // could be programmable later if necessairly.
dcharala 0:b031f05749d0 449 //pc.baud(115200);
dcharala 0:b031f05749d0 450 pc.baud(921600);
dcharala 0:b031f05749d0 451
dcharala 0:b031f05749d0 452 VoieA.mode(PullUp);
dcharala 0:b031f05749d0 453 VoieA.rise(&compt_rise_A);
dcharala 0:b031f05749d0 454 VoieA.fall(&compt_fall_A);
dcharala 0:b031f05749d0 455 VoieB.mode(PullUp);
dcharala 0:b031f05749d0 456 VoieB.rise(&compt_rise_B);
dcharala 0:b031f05749d0 457 VoieB.fall(&compt_fall_B);
dcharala 0:b031f05749d0 458 pc.printf("MBED\r\n\r@");
dcharala 0:b031f05749d0 459 fclose(fp);
dcharala 0:b031f05749d0 460
dcharala 0:b031f05749d0 461
dcharala 0:b031f05749d0 462
dcharala 0:b031f05749d0 463
dcharala 0:b031f05749d0 464
dcharala 0:b031f05749d0 465 //PinCount.mode(PullDown);
dcharala 0:b031f05749d0 466 positionCm=0;
dcharala 0:b031f05749d0 467 Clock=1;
dcharala 0:b031f05749d0 468 while(1) {
dcharala 0:b031f05749d0 469
dcharala 0:b031f05749d0 470 pc.attach(&reception);
dcharala 0:b031f05749d0 471
dcharala 0:b031f05749d0 472 }
dcharala 0:b031f05749d0 473
dcharala 0:b031f05749d0 474
dcharala 0:b031f05749d0 475 }
dcharala 0:b031f05749d0 476
dcharala 0:b031f05749d0 477