Grupo T / Mbed OS GRUPOT
Committer:
lucasfontenla
Date:
Mon May 14 04:04:56 2018 +0000
Revision:
22:000890b38b32
Parent:
21:c6c33381fc5f
Child:
23:d64d37561b4a
Interrup??o para leitura do serial funcionando.; Salvando pontos pelo serial.; Array path criado que armazena a velocidade de avan?o e o modo de despejo de cola.

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