Grupo T / Mbed OS GRUPOT
Committer:
lucasfontenla
Date:
Tue May 15 18:38:50 2018 +0000
Revision:
24:92f612ca218b
Parent:
23:d64d37561b4a
Child:
25:7b3826dddcba
Atualiza??o funcionando. Alterar o par?metro de velocidade para 600.

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