Grupo T / Mbed OS GRUPOT
Committer:
lucasfontenla
Date:
Tue May 15 15:31:29 2018 +0000
Revision:
23:d64d37561b4a
Parent:
22:000890b38b32
Child:
24:92f612ca218b
Serial funcionando, executando jog, savando pontos e executando pontos salvos.;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lucasfontenla 21:c6c33381fc5f 1 // LIBs ------------------------------------------------------------------------------------
lucasfontenla 0:cc562f78f889 2 #include "mbed.h"
lucasfontenla 22:000890b38b32 3 #include "string"
lucasfontenla 0:cc562f78f889 4
lucasfontenla 5:0cbf491f703d 5 // MACHINE SETUP ---------------------------------------------------------------------------
lucasfontenla 22:000890b38b32 6 #define tx PC_10
lucasfontenla 22:000890b38b32 7 #define rx PC_11
lucasfontenla 22:000890b38b32 8
lucasfontenla 22:000890b38b32 9 Serial ihm(tx, rx); //tx e rx (D1 e D0)
lucasfontenla 23:d64d37561b4a 10 Timer t;
lucasfontenla 5:0cbf491f703d 11
lucasfontenla 5:0cbf491f703d 12 // drivers output signal
lucasfontenla 14:7cc41420a12c 13 DigitalOut enable(D2);
lucasfontenla 14:7cc41420a12c 14
lucasfontenla 4:48717b42eab2 15 DigitalOut dirX(D3);
lucasfontenla 15:4604a7ee9c77 16 DigitalOut stepX(D4);
lucasfontenla 4:48717b42eab2 17
lucasfontenla 15:4604a7ee9c77 18 DigitalOut dirY(D5);
lucasfontenla 15:4604a7ee9c77 19 DigitalOut stepY(D6);
lucasfontenla 4:48717b42eab2 20
lucasfontenla 15:4604a7ee9c77 21 DigitalOut dirZ(D7);
lucasfontenla 15:4604a7ee9c77 22 DigitalOut stepZ(D8);
lucasfontenla 4:48717b42eab2 23
lucasfontenla 5:0cbf491f703d 24 // hardware input signal
lucasfontenla 5:0cbf491f703d 25 // end-of-stroke sensors
lucasfontenla 16:3adab04d42a6 26 InterruptIn endX(A2);
lucasfontenla 16:3adab04d42a6 27 InterruptIn endY(A3);
lucasfontenla 16:3adab04d42a6 28 InterruptIn endZ(A4);
lucasfontenla 5:0cbf491f703d 29
lucasfontenla 23:d64d37561b4a 30 InterruptIn user(USER_BUTTON);
lucasfontenla 23:d64d37561b4a 31
lucasfontenla 23:d64d37561b4a 32 // JOG Controls
lucasfontenla 9:d771a576e4fc 33 AnalogIn joyX(A0);
lucasfontenla 9:d771a576e4fc 34 AnalogIn joyY(A1);
lucasfontenla 4:48717b42eab2 35
lucasfontenla 16:3adab04d42a6 36 DigitalIn zUp(D15);
lucasfontenla 16:3adab04d42a6 37 DigitalIn zDwn(D14);
lucasfontenla 4:48717b42eab2 38
lucasfontenla 5:0cbf491f703d 39 // variables definition
lucasfontenla 23:d64d37561b4a 40 int modeStatus = 1;
lucasfontenla 5:0cbf491f703d 41
lucasfontenla 4:48717b42eab2 42 float valX;
lucasfontenla 4:48717b42eab2 43 float valY;
lucasfontenla 4:48717b42eab2 44 int valZUp;
lucasfontenla 4:48717b42eab2 45 int valZDwn;
lucasfontenla 4:48717b42eab2 46
lucasfontenla 4:48717b42eab2 47 int activeX = 1;
lucasfontenla 4:48717b42eab2 48 int activeY = 1;
lucasfontenla 4:48717b42eab2 49 int activeZ = 1;
lucasfontenla 4:48717b42eab2 50
lucasfontenla 5:0cbf491f703d 51 int x_dir;
lucasfontenla 5:0cbf491f703d 52 int y_dir;
lucasfontenla 5:0cbf491f703d 53 int z_dir;
lucasfontenla 5:0cbf491f703d 54
lucasfontenla 13:0f385bfe3e0d 55 int x_plus = 0;
lucasfontenla 13:0f385bfe3e0d 56 int x_minus = 1;
lucasfontenla 17:55e6270adab5 57 int y_plus = 0;
lucasfontenla 17:55e6270adab5 58 int y_minus = 1;
lucasfontenla 16:3adab04d42a6 59 int z_plus = 0;
lucasfontenla 16:3adab04d42a6 60 int z_minus = 1;
lucasfontenla 9:d771a576e4fc 61
lucasfontenla 15:4604a7ee9c77 62 int x_limit = 0;
lucasfontenla 16:3adab04d42a6 63 int x_block_max = 0;
lucasfontenla 16:3adab04d42a6 64 int x_block_min = 0;
lucasfontenla 12:801e58a7137c 65
lucasfontenla 15:4604a7ee9c77 66 int y_limit = 0;
lucasfontenla 16:3adab04d42a6 67 int y_block_max = 0;
lucasfontenla 16:3adab04d42a6 68 int y_block_min = 0;
lucasfontenla 15:4604a7ee9c77 69
lucasfontenla 15:4604a7ee9c77 70 int z_limit = 0;
lucasfontenla 16:3adab04d42a6 71 int z_block_max = 0;
lucasfontenla 16:3adab04d42a6 72 int z_block_min = 0;
lucasfontenla 9:d771a576e4fc 73
lucasfontenla 5:0cbf491f703d 74 float ppsMax = 600.0;
lucasfontenla 5:0cbf491f703d 75
lucasfontenla 7:27ea14e58788 76 int totalX = 0;
lucasfontenla 7:27ea14e58788 77 int totalY = 0;
lucasfontenla 15:4604a7ee9c77 78 int totalZ = 0;
lucasfontenla 7:27ea14e58788 79
lucasfontenla 17:55e6270adab5 80 int x_steps_to_run;
lucasfontenla 17:55e6270adab5 81 int y_steps_to_run;
lucasfontenla 17:55e6270adab5 82 int z_steps_to_run;
lucasfontenla 17:55e6270adab5 83
lucasfontenla 18:174b4ff351b5 84 float x_distance_to_run;
lucasfontenla 18:174b4ff351b5 85 float y_distance_to_run;
lucasfontenla 18:174b4ff351b5 86 float z_distance_to_run;
lucasfontenla 18:174b4ff351b5 87
lucasfontenla 7:27ea14e58788 88 float X = 0;
lucasfontenla 7:27ea14e58788 89 float Y = 0;
lucasfontenla 15:4604a7ee9c77 90 float Z = 0;
lucasfontenla 7:27ea14e58788 91
lucasfontenla 9:d771a576e4fc 92 int endX1Status;
lucasfontenla 9:d771a576e4fc 93 int endX2Status;
lucasfontenla 9:d771a576e4fc 94
lucasfontenla 7:27ea14e58788 95 // machine parameters
lucasfontenla 8:de64672c240f 96 float xPitch = 3.0;
lucasfontenla 8:de64672c240f 97 float yPitch = 3.0;
lucasfontenla 15:4604a7ee9c77 98 float zPitch = 3.0;
lucasfontenla 7:27ea14e58788 99
lucasfontenla 7:27ea14e58788 100 float motor_steps_by_rotation = 200.0;
lucasfontenla 7:27ea14e58788 101 float step_mode = 0.5;
lucasfontenla 7:27ea14e58788 102 float steps_by_rotation = motor_steps_by_rotation/step_mode;
lucasfontenla 7:27ea14e58788 103
lucasfontenla 18:174b4ff351b5 104 int saved = 0;
lucasfontenla 19:e69ff16f35aa 105 const int maxPoints = 10;
lucasfontenla 22:000890b38b32 106 float points[3][maxPoints]; // [0] X; [1] Y; [2] Z;
lucasfontenla 22:000890b38b32 107 float path[2][maxPoints]; // [0] speed; [1] mode;
lucasfontenla 22:000890b38b32 108 int resting_points = 0;
lucasfontenla 18:174b4ff351b5 109
lucasfontenla 18:174b4ff351b5 110 int startSaved = 0;
lucasfontenla 20:1d98a6f51dee 111 int autoReload = 0;
lucasfontenla 20:1d98a6f51dee 112 int exitSavedPointsLoop = 0;
lucasfontenla 20:1d98a6f51dee 113 int keepSavedPointsReload = 0;
lucasfontenla 18:174b4ff351b5 114
lucasfontenla 23:d64d37561b4a 115 int kill_jog;
lucasfontenla 23:d64d37561b4a 116
lucasfontenla 21:c6c33381fc5f 117 // PROTOTYPE FUNCTIONS -------------------------------------------------------------------------------
lucasfontenla 23:d64d37561b4a 118 void jog(void);
lucasfontenla 23:d64d37561b4a 119 void killJog(void);
lucasfontenla 23:d64d37561b4a 120
lucasfontenla 23:d64d37561b4a 121 void x(void);
lucasfontenla 23:d64d37561b4a 122
lucasfontenla 23:d64d37561b4a 123 void automatic_run(int);
lucasfontenla 23:d64d37561b4a 124
lucasfontenla 5:0cbf491f703d 125 void move(int pps, int x_dir, int y_dir, int z_dir, int x_step, int y_step, int z_step);
lucasfontenla 17:55e6270adab5 126
lucasfontenla 17:55e6270adab5 127 float steps_to_distance(int steps, float pitch);
lucasfontenla 17:55e6270adab5 128 int distance_to_steps(float distance, float pitch);
lucasfontenla 7:27ea14e58788 129
lucasfontenla 15:4604a7ee9c77 130 void endX_press(void);
lucasfontenla 15:4604a7ee9c77 131 void endX_release(void);
lucasfontenla 11:0e22a6fc7f87 132
lucasfontenla 15:4604a7ee9c77 133 void endY_press(void);
lucasfontenla 15:4604a7ee9c77 134 void endY_release(void);
lucasfontenla 15:4604a7ee9c77 135
lucasfontenla 15:4604a7ee9c77 136 void endZ_press(void);
lucasfontenla 15:4604a7ee9c77 137 void endZ_release(void);
lucasfontenla 9:d771a576e4fc 138
lucasfontenla 12:801e58a7137c 139 void zeroX(int pps);
lucasfontenla 11:0e22a6fc7f87 140 void zeroY(int pps);
lucasfontenla 11:0e22a6fc7f87 141
lucasfontenla 18:174b4ff351b5 142 void savePoint(void);
lucasfontenla 18:174b4ff351b5 143 void startSavedPoints(void);
lucasfontenla 18:174b4ff351b5 144
lucasfontenla 17:55e6270adab5 145 void printDistance(void);
lucasfontenla 17:55e6270adab5 146
lucasfontenla 23:d64d37561b4a 147 void readSerial(void);
lucasfontenla 22:000890b38b32 148
lucasfontenla 21:c6c33381fc5f 149 // MAIN PROGRAM ----------------------------------------------------------------------------------------------
lucasfontenla 1:b2e395e50a45 150 int main(){
lucasfontenla 16:3adab04d42a6 151 printf("\nStarting...\r\n");
lucasfontenla 14:7cc41420a12c 152
lucasfontenla 22:000890b38b32 153 enable = 0;
lucasfontenla 17:55e6270adab5 154
lucasfontenla 23:d64d37561b4a 155 user.rise(&x);
lucasfontenla 22:000890b38b32 156
lucasfontenla 21:c6c33381fc5f 157 // interrupções de fim de curso
lucasfontenla 22:000890b38b32 158 /*
lucasfontenla 15:4604a7ee9c77 159 endX.fall(&endX_press);
lucasfontenla 15:4604a7ee9c77 160 endX.rise(&endX_release);
lucasfontenla 5:0cbf491f703d 161
lucasfontenla 15:4604a7ee9c77 162 endY.fall(&endY_press);
lucasfontenla 15:4604a7ee9c77 163 endY.rise(&endY_release);
lucasfontenla 15:4604a7ee9c77 164
lucasfontenla 15:4604a7ee9c77 165 endZ.fall(&endZ_press);
lucasfontenla 23:d64d37561b4a 166 endZ.rise(&endZ_release);*/
lucasfontenla 20:1d98a6f51dee 167
lucasfontenla 23:d64d37561b4a 168 while(1){
lucasfontenla 23:d64d37561b4a 169 if(ihm.readable()){
lucasfontenla 23:d64d37561b4a 170 readSerial();
lucasfontenla 23:d64d37561b4a 171 }
lucasfontenla 5:0cbf491f703d 172 }
lucasfontenla 9:d771a576e4fc 173 }
lucasfontenla 9:d771a576e4fc 174
lucasfontenla 9:d771a576e4fc 175 // FUNCTIONS ----------------------------------------------------------------
lucasfontenla 23:d64d37561b4a 176 void x(void){
lucasfontenla 23:d64d37561b4a 177 printf("User\n\r");
lucasfontenla 23:d64d37561b4a 178 }
lucasfontenla 23:d64d37561b4a 179
lucasfontenla 15:4604a7ee9c77 180 void endX_press(void){
lucasfontenla 15:4604a7ee9c77 181 printf("X - press\n\r");
lucasfontenla 15:4604a7ee9c77 182 if(dirX == x_plus){
lucasfontenla 16:3adab04d42a6 183 x_block_max = 1;
lucasfontenla 15:4604a7ee9c77 184 }
lucasfontenla 15:4604a7ee9c77 185 else {
lucasfontenla 16:3adab04d42a6 186 x_block_min = 1;
lucasfontenla 15:4604a7ee9c77 187 }
lucasfontenla 12:801e58a7137c 188 }
lucasfontenla 15:4604a7ee9c77 189 void endX_release(void){
lucasfontenla 15:4604a7ee9c77 190 printf("X - release\n\r");
lucasfontenla 16:3adab04d42a6 191 x_block_min = 0;
lucasfontenla 16:3adab04d42a6 192 x_block_max = 0;
lucasfontenla 12:801e58a7137c 193 }
lucasfontenla 16:3adab04d42a6 194
lucasfontenla 15:4604a7ee9c77 195 void endY_press(void){
lucasfontenla 16:3adab04d42a6 196 printf("Y - press\n\r");
lucasfontenla 16:3adab04d42a6 197 if(dirY == y_plus){
lucasfontenla 16:3adab04d42a6 198 y_block_max = 1;
lucasfontenla 16:3adab04d42a6 199 }
lucasfontenla 16:3adab04d42a6 200 else {
lucasfontenla 16:3adab04d42a6 201 y_block_min = 1;
lucasfontenla 16:3adab04d42a6 202 }
lucasfontenla 15:4604a7ee9c77 203 }
lucasfontenla 15:4604a7ee9c77 204 void endY_release(void){
lucasfontenla 15:4604a7ee9c77 205 printf("Y - release\n\r");
lucasfontenla 16:3adab04d42a6 206 y_block_min = 0;
lucasfontenla 16:3adab04d42a6 207 y_block_max = 0;
lucasfontenla 9:d771a576e4fc 208 }
lucasfontenla 9:d771a576e4fc 209
lucasfontenla 15:4604a7ee9c77 210 void endZ_press(void){
lucasfontenla 15:4604a7ee9c77 211 printf("Z - press\n\r");
lucasfontenla 16:3adab04d42a6 212 if(dirZ == z_plus){
lucasfontenla 16:3adab04d42a6 213 z_block_max = 1;
lucasfontenla 16:3adab04d42a6 214 }
lucasfontenla 16:3adab04d42a6 215 else {
lucasfontenla 16:3adab04d42a6 216 z_block_min = 1;
lucasfontenla 16:3adab04d42a6 217 }
lucasfontenla 9:d771a576e4fc 218 }
lucasfontenla 15:4604a7ee9c77 219 void endZ_release(void){
lucasfontenla 15:4604a7ee9c77 220 printf("Z - release\n\r");
lucasfontenla 16:3adab04d42a6 221 z_block_min = 0;
lucasfontenla 16:3adab04d42a6 222 z_block_max = 0;
lucasfontenla 9:d771a576e4fc 223 }
lucasfontenla 7:27ea14e58788 224
lucasfontenla 5:0cbf491f703d 225 void move(int pps, int x_dir, int y_dir, int z_dir, int x_step, int y_step, int z_step){
lucasfontenla 5:0cbf491f703d 226 float time = 1.0/pps/2.0;
lucasfontenla 5:0cbf491f703d 227
lucasfontenla 5:0cbf491f703d 228 dirX = x_dir;
lucasfontenla 5:0cbf491f703d 229 dirY = y_dir;
lucasfontenla 5:0cbf491f703d 230 dirZ = z_dir;
lucasfontenla 5:0cbf491f703d 231
lucasfontenla 16:3adab04d42a6 232 // X
lucasfontenla 16:3adab04d42a6 233 if((x_dir == x_plus) && x_block_max){
lucasfontenla 16:3adab04d42a6 234 x_step = 0;
lucasfontenla 16:3adab04d42a6 235 }
lucasfontenla 16:3adab04d42a6 236 if((x_dir == x_minus) && x_block_min){
lucasfontenla 12:801e58a7137c 237 x_step = 0;
lucasfontenla 12:801e58a7137c 238 }
lucasfontenla 12:801e58a7137c 239
lucasfontenla 16:3adab04d42a6 240 // Y
lucasfontenla 16:3adab04d42a6 241 if((y_dir == y_plus) && y_block_max){
lucasfontenla 16:3adab04d42a6 242 y_step = 0;
lucasfontenla 16:3adab04d42a6 243 }
lucasfontenla 16:3adab04d42a6 244 if((y_dir == y_minus) && y_block_min){
lucasfontenla 11:0e22a6fc7f87 245 y_step = 0;
lucasfontenla 11:0e22a6fc7f87 246 }
lucasfontenla 16:3adab04d42a6 247
lucasfontenla 16:3adab04d42a6 248 // Z
lucasfontenla 16:3adab04d42a6 249 if((z_dir == z_plus) && z_block_max){
lucasfontenla 16:3adab04d42a6 250 z_step = 0;
lucasfontenla 16:3adab04d42a6 251 }
lucasfontenla 16:3adab04d42a6 252 if((z_dir == z_minus) && z_block_min){
lucasfontenla 15:4604a7ee9c77 253 z_step = 0;
lucasfontenla 11:0e22a6fc7f87 254 }
lucasfontenla 11:0e22a6fc7f87 255
lucasfontenla 5:0cbf491f703d 256 int max_val;
lucasfontenla 5:0cbf491f703d 257
lucasfontenla 6:af32c68ff4cf 258 // maior número de passos -------
lucasfontenla 5:0cbf491f703d 259 if(x_step > y_step){
lucasfontenla 5:0cbf491f703d 260 if(x_step > z_step){
lucasfontenla 5:0cbf491f703d 261 max_val = x_step;
lucasfontenla 4:48717b42eab2 262 }
lucasfontenla 4:48717b42eab2 263 else {
lucasfontenla 5:0cbf491f703d 264 max_val = z_step;
lucasfontenla 4:48717b42eab2 265 }
lucasfontenla 5:0cbf491f703d 266 } else if(y_step > z_step){
lucasfontenla 5:0cbf491f703d 267 max_val = y_step;
lucasfontenla 5:0cbf491f703d 268 }
lucasfontenla 5:0cbf491f703d 269 else {
lucasfontenla 5:0cbf491f703d 270 max_val = z_step;
lucasfontenla 5:0cbf491f703d 271 }
lucasfontenla 5:0cbf491f703d 272
lucasfontenla 5:0cbf491f703d 273 for(int i = 0; i < max_val; i++){
lucasfontenla 6:af32c68ff4cf 274 if(i >= x_step){
lucasfontenla 5:0cbf491f703d 275 stepX = 0;
lucasfontenla 5:0cbf491f703d 276 }
lucasfontenla 5:0cbf491f703d 277 else { stepX = 1; }
lucasfontenla 4:48717b42eab2 278
lucasfontenla 6:af32c68ff4cf 279 if(i >= y_step){
lucasfontenla 5:0cbf491f703d 280 stepY = 0;
lucasfontenla 5:0cbf491f703d 281 }
lucasfontenla 11:0e22a6fc7f87 282 else {
lucasfontenla 11:0e22a6fc7f87 283 stepY = 1;}
lucasfontenla 5:0cbf491f703d 284
lucasfontenla 6:af32c68ff4cf 285 if(i >= z_step){
lucasfontenla 5:0cbf491f703d 286 stepZ = 0;
lucasfontenla 5:0cbf491f703d 287 }
lucasfontenla 5:0cbf491f703d 288 else { stepZ = 1; }
lucasfontenla 5:0cbf491f703d 289
lucasfontenla 5:0cbf491f703d 290 wait(time);
lucasfontenla 4:48717b42eab2 291 stepX = 0;
lucasfontenla 4:48717b42eab2 292 stepY = 0;
lucasfontenla 4:48717b42eab2 293 stepZ = 0;
lucasfontenla 5:0cbf491f703d 294 wait(time);
lucasfontenla 4:48717b42eab2 295 }
lucasfontenla 17:55e6270adab5 296
lucasfontenla 17:55e6270adab5 297 if(dirX == x_minus){
lucasfontenla 17:55e6270adab5 298 totalX-=x_step;
lucasfontenla 17:55e6270adab5 299 }
lucasfontenla 17:55e6270adab5 300 else { totalX+=x_step; }
lucasfontenla 17:55e6270adab5 301
lucasfontenla 17:55e6270adab5 302 if(dirY == y_minus){
lucasfontenla 17:55e6270adab5 303 totalY-=y_step;
lucasfontenla 17:55e6270adab5 304 } else { totalY+=y_step; }
lucasfontenla 17:55e6270adab5 305
lucasfontenla 17:55e6270adab5 306 if(dirZ == z_minus){
lucasfontenla 17:55e6270adab5 307 totalZ-=z_step;
lucasfontenla 17:55e6270adab5 308 } else { totalZ+=z_step; }
lucasfontenla 5:0cbf491f703d 309 }
lucasfontenla 17:55e6270adab5 310
lucasfontenla 12:801e58a7137c 311 void zeroX(int pps){
lucasfontenla 12:801e58a7137c 312 float time = 1.0/pps/2.0;
lucasfontenla 12:801e58a7137c 313
lucasfontenla 17:55e6270adab5 314 if(dirX != x_minus){
lucasfontenla 17:55e6270adab5 315 dirX = x_minus;
lucasfontenla 17:55e6270adab5 316 }
lucasfontenla 17:55e6270adab5 317
lucasfontenla 17:55e6270adab5 318 while(!x_block_min){
lucasfontenla 12:801e58a7137c 319 stepX = 1;
lucasfontenla 12:801e58a7137c 320 wait(time);
lucasfontenla 12:801e58a7137c 321 stepX = 0;
lucasfontenla 12:801e58a7137c 322 wait(time);
lucasfontenla 12:801e58a7137c 323 }
lucasfontenla 12:801e58a7137c 324
lucasfontenla 12:801e58a7137c 325 printf("X zero\n\r");
lucasfontenla 12:801e58a7137c 326
lucasfontenla 17:55e6270adab5 327 totalX = 0;
lucasfontenla 12:801e58a7137c 328 }
lucasfontenla 11:0e22a6fc7f87 329 void zeroY(int pps){
lucasfontenla 11:0e22a6fc7f87 330 float time = 1.0/pps/2.0;
lucasfontenla 11:0e22a6fc7f87 331
lucasfontenla 17:55e6270adab5 332 if(dirY != y_minus){
lucasfontenla 17:55e6270adab5 333 dirY = y_minus;
lucasfontenla 17:55e6270adab5 334 }
lucasfontenla 17:55e6270adab5 335
lucasfontenla 17:55e6270adab5 336 while(!y_block_min){
lucasfontenla 11:0e22a6fc7f87 337 stepY = 1;
lucasfontenla 11:0e22a6fc7f87 338 wait(time);
lucasfontenla 11:0e22a6fc7f87 339 stepY = 0;
lucasfontenla 11:0e22a6fc7f87 340 wait(time);
lucasfontenla 11:0e22a6fc7f87 341 }
lucasfontenla 11:0e22a6fc7f87 342
lucasfontenla 11:0e22a6fc7f87 343 printf("Y zero\n\r");
lucasfontenla 11:0e22a6fc7f87 344
lucasfontenla 17:55e6270adab5 345 totalY = 0;
lucasfontenla 17:55e6270adab5 346 }
lucasfontenla 11:0e22a6fc7f87 347
lucasfontenla 17:55e6270adab5 348 float steps_to_distance(int steps, float pitch){
lucasfontenla 7:27ea14e58788 349 float delta_S = (((float)steps)/steps_by_rotation)*pitch;
lucasfontenla 7:27ea14e58788 350 return delta_S;
lucasfontenla 7:27ea14e58788 351 }
lucasfontenla 17:55e6270adab5 352
lucasfontenla 17:55e6270adab5 353 int distance_to_steps(float distance, float pitch){
lucasfontenla 17:55e6270adab5 354 int steps = (int)(distance*steps_by_rotation/pitch);
lucasfontenla 17:55e6270adab5 355 return steps;
lucasfontenla 17:55e6270adab5 356 }
lucasfontenla 17:55e6270adab5 357
lucasfontenla 17:55e6270adab5 358 void printDistance(void){
lucasfontenla 17:55e6270adab5 359 X = steps_to_distance(totalX, xPitch);
lucasfontenla 17:55e6270adab5 360 Y = steps_to_distance(totalY, yPitch);
lucasfontenla 17:55e6270adab5 361 Z = steps_to_distance(totalZ, zPitch);
lucasfontenla 17:55e6270adab5 362 printf("X: %.2f Y: %.2f Z: %.2f\r\n", X, Y, Z);
lucasfontenla 18:174b4ff351b5 363 }
lucasfontenla 18:174b4ff351b5 364
lucasfontenla 22:000890b38b32 365 void savePoint(string speed, string mode){
lucasfontenla 20:1d98a6f51dee 366 if(!autoReload){
lucasfontenla 20:1d98a6f51dee 367 keepSavedPointsReload = 0;
lucasfontenla 20:1d98a6f51dee 368 exitSavedPointsLoop = 0;
lucasfontenla 20:1d98a6f51dee 369 printf("\nSave selected\n\r");
lucasfontenla 20:1d98a6f51dee 370 if(saved >= maxPoints){
lucasfontenla 20:1d98a6f51dee 371 printf("Max points reached\n\r");
lucasfontenla 20:1d98a6f51dee 372 } else{
lucasfontenla 20:1d98a6f51dee 373 X = steps_to_distance(totalX, xPitch);
lucasfontenla 20:1d98a6f51dee 374 Y = steps_to_distance(totalY, yPitch);
lucasfontenla 20:1d98a6f51dee 375 Z = steps_to_distance(totalZ, zPitch);
lucasfontenla 20:1d98a6f51dee 376
lucasfontenla 20:1d98a6f51dee 377 points[0][saved] = X;
lucasfontenla 20:1d98a6f51dee 378 points[1][saved] = Y;
lucasfontenla 20:1d98a6f51dee 379 points[2][saved] = Z;
lucasfontenla 22:000890b38b32 380 path[0][saved] = atof(speed.c_str());
lucasfontenla 22:000890b38b32 381 path[1][saved] = atof(mode.c_str());
lucasfontenla 20:1d98a6f51dee 382 saved+=1;
lucasfontenla 20:1d98a6f51dee 383 }
lucasfontenla 20:1d98a6f51dee 384 // save code
lucasfontenla 20:1d98a6f51dee 385 printf("Saved --> X: %.2f Y: %.2f Z: %.2f\r\n", X, Y, Z);
lucasfontenla 22:000890b38b32 386 printf("Path --> Speed: %.2f Mode: %.2f\n\r", path[0][saved-1], path[1][saved-1]);
lucasfontenla 22:000890b38b32 387 resting_points = maxPoints-saved;
lucasfontenla 23:d64d37561b4a 388 printf("Pontos restantes: %d\n\r", resting_points);
lucasfontenla 20:1d98a6f51dee 389 }
lucasfontenla 20:1d98a6f51dee 390 else {
lucasfontenla 20:1d98a6f51dee 391 exitSavedPointsLoop = 1;
lucasfontenla 20:1d98a6f51dee 392 keepSavedPointsReload = 0;
lucasfontenla 20:1d98a6f51dee 393 }
lucasfontenla 18:174b4ff351b5 394 }
lucasfontenla 18:174b4ff351b5 395
lucasfontenla 23:d64d37561b4a 396 void jog(void){
lucasfontenla 23:d64d37561b4a 397 kill_jog = 0;
lucasfontenla 23:d64d37561b4a 398 int contador = 0;
lucasfontenla 23:d64d37561b4a 399 printf("JOG Selected %d\n\r", kill_jog);
lucasfontenla 23:d64d37561b4a 400
lucasfontenla 23:d64d37561b4a 401 while(1){
lucasfontenla 23:d64d37561b4a 402 if(ihm.readable()){
lucasfontenla 23:d64d37561b4a 403 readSerial();
lucasfontenla 23:d64d37561b4a 404 }
lucasfontenla 23:d64d37561b4a 405 valX = joyX;
lucasfontenla 23:d64d37561b4a 406 valY = joyY;
lucasfontenla 23:d64d37561b4a 407
lucasfontenla 23:d64d37561b4a 408 valZUp = zUp;
lucasfontenla 23:d64d37561b4a 409 valZDwn = zDwn;
lucasfontenla 23:d64d37561b4a 410
lucasfontenla 23:d64d37561b4a 411 if(valX > 0.7){
lucasfontenla 23:d64d37561b4a 412 if(x_dir != x_plus){
lucasfontenla 23:d64d37561b4a 413 x_dir = x_plus;
lucasfontenla 23:d64d37561b4a 414 }
lucasfontenla 23:d64d37561b4a 415 activeX = 1;
lucasfontenla 23:d64d37561b4a 416 }
lucasfontenla 23:d64d37561b4a 417 else if(valX < 0.3){
lucasfontenla 23:d64d37561b4a 418 if(x_dir != x_minus){
lucasfontenla 23:d64d37561b4a 419 x_dir = x_minus;
lucasfontenla 23:d64d37561b4a 420 }
lucasfontenla 23:d64d37561b4a 421 activeX = 1;
lucasfontenla 23:d64d37561b4a 422 }
lucasfontenla 23:d64d37561b4a 423 else{
lucasfontenla 23:d64d37561b4a 424 activeX = 0;
lucasfontenla 23:d64d37561b4a 425 }
lucasfontenla 23:d64d37561b4a 426
lucasfontenla 23:d64d37561b4a 427 //----------------------------------------------------------------------
lucasfontenla 23:d64d37561b4a 428
lucasfontenla 23:d64d37561b4a 429 if(valY > 0.7){
lucasfontenla 23:d64d37561b4a 430 if(y_dir != y_plus){
lucasfontenla 23:d64d37561b4a 431 y_dir = y_plus;
lucasfontenla 23:d64d37561b4a 432 }
lucasfontenla 23:d64d37561b4a 433 activeY = 1;
lucasfontenla 23:d64d37561b4a 434 }
lucasfontenla 23:d64d37561b4a 435 else if(valY < 0.3){
lucasfontenla 23:d64d37561b4a 436 if(y_dir != y_minus){
lucasfontenla 23:d64d37561b4a 437 y_dir = y_minus;
lucasfontenla 23:d64d37561b4a 438 }
lucasfontenla 23:d64d37561b4a 439 activeY = 1;
lucasfontenla 23:d64d37561b4a 440 }
lucasfontenla 23:d64d37561b4a 441 else{
lucasfontenla 23:d64d37561b4a 442 activeY = 0;
lucasfontenla 23:d64d37561b4a 443 }
lucasfontenla 23:d64d37561b4a 444
lucasfontenla 23:d64d37561b4a 445 //----------------------------------------------------------------------
lucasfontenla 23:d64d37561b4a 446
lucasfontenla 23:d64d37561b4a 447 if(!valZUp && valZDwn){
lucasfontenla 23:d64d37561b4a 448 if(z_dir != z_minus){
lucasfontenla 23:d64d37561b4a 449 z_dir = z_minus;
lucasfontenla 23:d64d37561b4a 450 }
lucasfontenla 23:d64d37561b4a 451 activeZ = 1;
lucasfontenla 23:d64d37561b4a 452 }
lucasfontenla 23:d64d37561b4a 453 else if(!valZDwn && valZUp){
lucasfontenla 23:d64d37561b4a 454 if(z_dir != z_plus){
lucasfontenla 23:d64d37561b4a 455 z_dir = z_plus;
lucasfontenla 23:d64d37561b4a 456 }
lucasfontenla 23:d64d37561b4a 457 activeZ = 1;
lucasfontenla 23:d64d37561b4a 458 }
lucasfontenla 23:d64d37561b4a 459 else {
lucasfontenla 23:d64d37561b4a 460 activeZ = 0;
lucasfontenla 23:d64d37561b4a 461 }
lucasfontenla 23:d64d37561b4a 462
lucasfontenla 23:d64d37561b4a 463 //----------------------------------------------------------------------
lucasfontenla 23:d64d37561b4a 464
lucasfontenla 23:d64d37561b4a 465 move(ppsMax, x_dir, y_dir, z_dir, activeX, activeY, activeZ);
lucasfontenla 23:d64d37561b4a 466 X = steps_to_distance(totalX, xPitch);
lucasfontenla 23:d64d37561b4a 467 Y = steps_to_distance(totalY, yPitch);
lucasfontenla 23:d64d37561b4a 468 Z = steps_to_distance(totalZ, zPitch);
lucasfontenla 23:d64d37561b4a 469
lucasfontenla 23:d64d37561b4a 470 if(contador > 10000){
lucasfontenla 23:d64d37561b4a 471 printf("X: %.2f Y: %.2f Z: %.2f\r\n", X, Y, Z);
lucasfontenla 23:d64d37561b4a 472 contador = 0;
lucasfontenla 23:d64d37561b4a 473 }
lucasfontenla 23:d64d37561b4a 474
lucasfontenla 23:d64d37561b4a 475 contador+=1;
lucasfontenla 23:d64d37561b4a 476
lucasfontenla 23:d64d37561b4a 477 if(kill_jog){
lucasfontenla 23:d64d37561b4a 478 break;
lucasfontenla 23:d64d37561b4a 479 }
lucasfontenla 23:d64d37561b4a 480 }
lucasfontenla 23:d64d37561b4a 481 }
lucasfontenla 23:d64d37561b4a 482
lucasfontenla 23:d64d37561b4a 483 void automatic_run(int total_points){
lucasfontenla 23:d64d37561b4a 484 printf("\nStarting automatic routine\n\r");
lucasfontenla 23:d64d37561b4a 485
lucasfontenla 23:d64d37561b4a 486 // home
lucasfontenla 23:d64d37561b4a 487 x_distance_to_run = points[0][0] - points[0][total_points-1];
lucasfontenla 23:d64d37561b4a 488 y_distance_to_run = points[1][0] - points[1][total_points-1];
lucasfontenla 23:d64d37561b4a 489 z_distance_to_run = points[2][0] - points[2][total_points-1];
lucasfontenla 23:d64d37561b4a 490
lucasfontenla 23:d64d37561b4a 491 printf("\nGoing to first point\n\r");
lucasfontenla 23:d64d37561b4a 492
lucasfontenla 23:d64d37561b4a 493 if(x_distance_to_run < 0){
lucasfontenla 23:d64d37561b4a 494 x_dir = x_minus;
lucasfontenla 23:d64d37561b4a 495 x_distance_to_run = -1.0*x_distance_to_run;
lucasfontenla 23:d64d37561b4a 496 } else { x_dir = x_plus; }
lucasfontenla 23:d64d37561b4a 497
lucasfontenla 23:d64d37561b4a 498 if(y_distance_to_run < 0){
lucasfontenla 23:d64d37561b4a 499 y_dir = y_minus;
lucasfontenla 23:d64d37561b4a 500 y_distance_to_run = -1.0*y_distance_to_run;
lucasfontenla 23:d64d37561b4a 501 } else { y_dir = y_plus; }
lucasfontenla 23:d64d37561b4a 502
lucasfontenla 23:d64d37561b4a 503 if(z_distance_to_run < 0){
lucasfontenla 23:d64d37561b4a 504 z_dir = z_minus;
lucasfontenla 23:d64d37561b4a 505 z_distance_to_run = -1.0*z_distance_to_run;
lucasfontenla 23:d64d37561b4a 506 } else { z_dir = z_plus; }
lucasfontenla 23:d64d37561b4a 507
lucasfontenla 23:d64d37561b4a 508 x_steps_to_run = distance_to_steps(x_distance_to_run, xPitch);
lucasfontenla 23:d64d37561b4a 509 y_steps_to_run = distance_to_steps(y_distance_to_run, yPitch);
lucasfontenla 23:d64d37561b4a 510 z_steps_to_run = distance_to_steps(z_distance_to_run, zPitch);
lucasfontenla 23:d64d37561b4a 511
lucasfontenla 23:d64d37561b4a 512 printf("deltaX: %.2f deltaY: %.2f deltaZ: %.2f\n\r", x_distance_to_run, y_distance_to_run, z_distance_to_run);
lucasfontenla 23:d64d37561b4a 513
lucasfontenla 23:d64d37561b4a 514 move(ppsMax, x_dir, y_dir, z_dir, x_steps_to_run, 0, 0);
lucasfontenla 23:d64d37561b4a 515 move(ppsMax, x_dir, y_dir, z_dir, 0, y_steps_to_run, 0);
lucasfontenla 23:d64d37561b4a 516 move(ppsMax, x_dir, y_dir, z_dir, 0, 0, z_steps_to_run);
lucasfontenla 23:d64d37561b4a 517
lucasfontenla 23:d64d37561b4a 518 wait(2);
lucasfontenla 23:d64d37561b4a 519
lucasfontenla 23:d64d37561b4a 520 printf("\nSaved points\n\r");
lucasfontenla 23:d64d37561b4a 521
lucasfontenla 23:d64d37561b4a 522 // routine
lucasfontenla 23:d64d37561b4a 523
lucasfontenla 23:d64d37561b4a 524 for(int i = 1; i < total_points; i++){
lucasfontenla 23:d64d37561b4a 525 x_distance_to_run = points[0][i]-points[0][i-1];
lucasfontenla 23:d64d37561b4a 526 y_distance_to_run = points[1][i]-points[1][i-1];
lucasfontenla 23:d64d37561b4a 527 z_distance_to_run = points[2][i]-points[2][i-1];
lucasfontenla 23:d64d37561b4a 528
lucasfontenla 23:d64d37561b4a 529 printf("deltaX: %.2f deltaY: %.2f deltaZ: %.2f\n\r", x_distance_to_run, y_distance_to_run, z_distance_to_run);
lucasfontenla 23:d64d37561b4a 530
lucasfontenla 23:d64d37561b4a 531 if(x_distance_to_run < 0){
lucasfontenla 23:d64d37561b4a 532 x_dir = x_minus;
lucasfontenla 23:d64d37561b4a 533 x_distance_to_run = -1.0*x_distance_to_run;
lucasfontenla 23:d64d37561b4a 534 } else { x_dir = x_plus; }
lucasfontenla 23:d64d37561b4a 535
lucasfontenla 23:d64d37561b4a 536 if(y_distance_to_run < 0){
lucasfontenla 23:d64d37561b4a 537 y_dir = y_minus;
lucasfontenla 23:d64d37561b4a 538 y_distance_to_run = -1.0*y_distance_to_run;
lucasfontenla 23:d64d37561b4a 539 } else { y_dir = y_plus; }
lucasfontenla 23:d64d37561b4a 540
lucasfontenla 23:d64d37561b4a 541 if(z_distance_to_run < 0){
lucasfontenla 23:d64d37561b4a 542 z_dir = z_minus;
lucasfontenla 23:d64d37561b4a 543 z_distance_to_run = -1.0*z_distance_to_run;
lucasfontenla 23:d64d37561b4a 544 } else { z_dir = z_plus; }
lucasfontenla 23:d64d37561b4a 545
lucasfontenla 23:d64d37561b4a 546 x_steps_to_run = distance_to_steps(x_distance_to_run, xPitch);
lucasfontenla 23:d64d37561b4a 547 y_steps_to_run = distance_to_steps(y_distance_to_run, yPitch);
lucasfontenla 23:d64d37561b4a 548 z_steps_to_run = distance_to_steps(z_distance_to_run, zPitch);
lucasfontenla 23:d64d37561b4a 549
lucasfontenla 23:d64d37561b4a 550 move(ppsMax, x_dir, y_dir, z_dir, x_steps_to_run, 0, 0);
lucasfontenla 23:d64d37561b4a 551 move(ppsMax, x_dir, y_dir, z_dir, 0, y_steps_to_run, 0);
lucasfontenla 23:d64d37561b4a 552 move(ppsMax, x_dir, y_dir, z_dir, 0, 0, z_steps_to_run);
lucasfontenla 23:d64d37561b4a 553 }
lucasfontenla 23:d64d37561b4a 554 killJog();
lucasfontenla 23:d64d37561b4a 555 printf("Done\n\r");
lucasfontenla 22:000890b38b32 556 }
lucasfontenla 22:000890b38b32 557
lucasfontenla 23:d64d37561b4a 558 void killJog(void){
lucasfontenla 23:d64d37561b4a 559 saved = 0;
lucasfontenla 23:d64d37561b4a 560 kill_jog = 1;
lucasfontenla 23:d64d37561b4a 561 printf("Jog killed\n\r");
lucasfontenla 23:d64d37561b4a 562 }
lucasfontenla 23:d64d37561b4a 563
lucasfontenla 23:d64d37561b4a 564 void readSerial(void){
lucasfontenla 22:000890b38b32 565 char recv;
lucasfontenla 22:000890b38b32 566
lucasfontenla 22:000890b38b32 567 //save
lucasfontenla 22:000890b38b32 568 int save = 0;
lucasfontenla 22:000890b38b32 569 int mode = 0;
lucasfontenla 22:000890b38b32 570 int speed = 0;
lucasfontenla 22:000890b38b32 571 string mode_recv;
lucasfontenla 22:000890b38b32 572 string speed_str;
lucasfontenla 22:000890b38b32 573
lucasfontenla 23:d64d37561b4a 574 //begin
lucasfontenla 23:d64d37561b4a 575 int begin = 0;
lucasfontenla 23:d64d37561b4a 576
lucasfontenla 23:d64d37561b4a 577 //jog
lucasfontenla 23:d64d37561b4a 578 int jog_mode = 0;
lucasfontenla 23:d64d37561b4a 579 int kill_jog_mode = 0;
lucasfontenla 23:d64d37561b4a 580
lucasfontenla 23:d64d37561b4a 581 printf("\n\nReceiving...\n\r");
lucasfontenla 23:d64d37561b4a 582
lucasfontenla 23:d64d37561b4a 583 t.reset();
lucasfontenla 23:d64d37561b4a 584 t.start();
lucasfontenla 22:000890b38b32 585
lucasfontenla 22:000890b38b32 586 while(1){
lucasfontenla 23:d64d37561b4a 587 if(t.read()>0.2){
lucasfontenla 23:d64d37561b4a 588 printf("Timeout\n\r");
lucasfontenla 23:d64d37561b4a 589 break;
lucasfontenla 23:d64d37561b4a 590 }
lucasfontenla 23:d64d37561b4a 591
lucasfontenla 22:000890b38b32 592 recv = ihm.getc();
lucasfontenla 22:000890b38b32 593
lucasfontenla 23:d64d37561b4a 594 printf("%c\n\r", recv);
lucasfontenla 23:d64d37561b4a 595
lucasfontenla 23:d64d37561b4a 596 if(recv == 'x'){
lucasfontenla 22:000890b38b32 597 if(save){
lucasfontenla 22:000890b38b32 598 savePoint(speed_str, mode_recv);
lucasfontenla 23:d64d37561b4a 599 } else if(begin){
lucasfontenla 23:d64d37561b4a 600 automatic_run(saved);
lucasfontenla 23:d64d37561b4a 601 } else if(jog_mode){
lucasfontenla 23:d64d37561b4a 602 if(kill_jog_mode){
lucasfontenla 23:d64d37561b4a 603 killJog();
lucasfontenla 23:d64d37561b4a 604 } else {
lucasfontenla 23:d64d37561b4a 605 jog();
lucasfontenla 23:d64d37561b4a 606 }
lucasfontenla 23:d64d37561b4a 607 }
lucasfontenla 22:000890b38b32 608 break;
lucasfontenla 22:000890b38b32 609 }
lucasfontenla 22:000890b38b32 610
lucasfontenla 22:000890b38b32 611 if(recv == 's'){
lucasfontenla 22:000890b38b32 612 save = 1;
lucasfontenla 22:000890b38b32 613 }
lucasfontenla 22:000890b38b32 614
lucasfontenla 23:d64d37561b4a 615 if(recv == 'b'){
lucasfontenla 23:d64d37561b4a 616 begin = 1;
lucasfontenla 23:d64d37561b4a 617 }
lucasfontenla 23:d64d37561b4a 618
lucasfontenla 23:d64d37561b4a 619 if(recv == 'j'){
lucasfontenla 23:d64d37561b4a 620 jog_mode = 1;
lucasfontenla 23:d64d37561b4a 621 }
lucasfontenla 23:d64d37561b4a 622
lucasfontenla 22:000890b38b32 623 if(save){
lucasfontenla 22:000890b38b32 624 if(recv == 'M'){
lucasfontenla 22:000890b38b32 625 mode = 1;
lucasfontenla 22:000890b38b32 626 speed = 0;
lucasfontenla 22:000890b38b32 627 } else if(recv == 'F'){
lucasfontenla 22:000890b38b32 628 mode = 0;
lucasfontenla 22:000890b38b32 629 speed = 1;
lucasfontenla 22:000890b38b32 630 }
lucasfontenla 22:000890b38b32 631
lucasfontenla 22:000890b38b32 632 if(mode){
lucasfontenla 22:000890b38b32 633 if(recv != 'M'){
lucasfontenla 22:000890b38b32 634 mode_recv.push_back(recv);
lucasfontenla 22:000890b38b32 635 }
lucasfontenla 22:000890b38b32 636 } else if(speed){
lucasfontenla 22:000890b38b32 637 if(recv != 'F'){
lucasfontenla 22:000890b38b32 638 speed_str.push_back(recv);
lucasfontenla 22:000890b38b32 639 }
lucasfontenla 22:000890b38b32 640 }
lucasfontenla 22:000890b38b32 641 }
lucasfontenla 23:d64d37561b4a 642
lucasfontenla 23:d64d37561b4a 643 if(jog_mode && recv == 'k'){
lucasfontenla 23:d64d37561b4a 644 kill_jog_mode = 1;
lucasfontenla 23:d64d37561b4a 645 }
lucasfontenla 22:000890b38b32 646 }
lucasfontenla 17:55e6270adab5 647 }