Projeto Mecatrônico / Mbed 2 deprecated ARDUINO_NEXTION

Dependencies:   mbed

Committer:
diogonac
Date:
Mon Jun 07 21:26:53 2021 +0000
Revision:
4:e905261df87f
Parent:
3:a2de739d2802
Child:
5:1ee07aa85351
Complemento da rotina de deslocamento automatico

Who changed what in which revision?

UserRevisionLine numberNew contents of line
diogonac 0:9344dd7c7e26 1 #include "mbed.h"
diogonac 1:794015d244d3 2 #include <string>
diogonac 1:794015d244d3 3 #include <stdio.h> /* printf, fgets */
diogonac 1:794015d244d3 4 #include <stdlib.h>
diogonac 1:794015d244d3 5 #include <iostream>
diogonac 0:9344dd7c7e26 6 //=============== NEXTION ========================
diogonac 0:9344dd7c7e26 7
diogonac 0:9344dd7c7e26 8 Serial recebe_arduino(PA_9, PA_10); //TX, RX
diogonac 1:794015d244d3 9 unsigned char set_eixos[5];
diogonac 0:9344dd7c7e26 10 void recebe_dados(unsigned char *data_buf, int numchar);
diogonac 1:794015d244d3 11
diogonac 0:9344dd7c7e26 12 unsigned char contador_X = 0;
diogonac 0:9344dd7c7e26 13 unsigned char contador_Y = 0;
diogonac 0:9344dd7c7e26 14 unsigned char contador_Z = 0;
diogonac 0:9344dd7c7e26 15
diogonac 1:794015d244d3 16 char tmp[2];
diogonac 0:9344dd7c7e26 17 //================================================
diogonac 0:9344dd7c7e26 18
diogonac 0:9344dd7c7e26 19 //TextLCD lcd(D8, D9, D4, D5, D6, D7); //Comunicação com LCD
diogonac 0:9344dd7c7e26 20 BusOut motor_x(PC_8, PC_6, PC_5, PA_12); //Pinos para acionamento do motor do eixo X
diogonac 0:9344dd7c7e26 21 BusOut motor_y(PA_11, PB_12, PB_11, PB_2); //Pinos para acionamento do motor do eixo Y
diogonac 0:9344dd7c7e26 22 BusOut motor_z(PB_1, PB_15, PB_14, PB_13); //Pinos para acionamento do motor do eixo Z
diogonac 0:9344dd7c7e26 23
diogonac 0:9344dd7c7e26 24 Serial pc (D1, D0); //Comunicação com USB
diogonac 0:9344dd7c7e26 25 AnalogIn joystick(PC_2); //Joystick
diogonac 0:9344dd7c7e26 26 //AnalogIn botao_SELECT(A0); //Botão SELECT da IHM
diogonac 0:9344dd7c7e26 27 InterruptIn botao_SELECT(PA_15); //Botão de salva posição Joystick
diogonac 0:9344dd7c7e26 28 InterruptIn botao_emergencia_in(PC_4); //Botão de emergência para detectar acionamento
diogonac 0:9344dd7c7e26 29 InterruptIn botao_fim_curso_rise(PC_12); //Chave de fim de curso
diogonac 0:9344dd7c7e26 30
diogonac 0:9344dd7c7e26 31 Timer debounce1; //Correção para botão de posição de salva
diogonac 0:9344dd7c7e26 32 Timer debounce2; //Correção para botão de emergência
diogonac 0:9344dd7c7e26 33 Timer debounce3; //Correção para chave de fim de curso
diogonac 0:9344dd7c7e26 34 Timer tempo_motor; //Correção para chave de fim de curso
diogonac 0:9344dd7c7e26 35
diogonac 0:9344dd7c7e26 36 int pulsos_Z = 0; //Contagem dos pulsos para o motor_Z
diogonac 0:9344dd7c7e26 37 int pulsos_X = 0; //Contagem dos pulsos para o motor_X
diogonac 0:9344dd7c7e26 38 int pulsos_Y = 0; //Contagem dos pulsos para o motor_Y
diogonac 1:794015d244d3 39 int count;
diogonac 0:9344dd7c7e26 40 int i; //Variável para contar o incremento no motor
diogonac 0:9344dd7c7e26 41 int cont_fim_curso = 0; //Variável para contar o incremento do fim de curso
diogonac 0:9344dd7c7e26 42 int J_XYZ; //Variável para ler o potenciometro do Joystick
diogonac 0:9344dd7c7e26 43 int passo_fuso = 5; //Declara o passo do fuso
diogonac 0:9344dd7c7e26 44 int pegaZ; //Variável que receberá o valor da posição de salva
diogonac 0:9344dd7c7e26 45 int SELECT; //Variável para leitura do botão SELECT da IHM
diogonac 0:9344dd7c7e26 46 int contador_SELECT = 0; //Define o contator do botão SELECT
diogonac 0:9344dd7c7e26 47 int contador_emergencia = 0; //Define o contator do botão de emergência
diogonac 0:9344dd7c7e26 48 int contador_rise = 0;
diogonac 0:9344dd7c7e26 49 int seguranca_fdc = 0;
diogonac 0:9344dd7c7e26 50
diogonac 2:af4dc49198bf 51 float posicoes[30];//XYZ PEGA, XYZ SOLTA1, XYZ SOLTA2, ...
diogonac 1:794015d244d3 52
diogonac 1:794015d244d3 53 int quantidades[10];//ml PEGA, ml SOLTA1, ml SOLTA2, ...
diogonac 1:794015d244d3 54
diogonac 0:9344dd7c7e26 55 float tempo_horario, tempo_anti_horario; //Define os tempos de acionamento do motor
diogonac 0:9344dd7c7e26 56 float deslocamento_X = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 57 float deslocamento_Y = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 58 float deslocamento_Z = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 59
diogonac 0:9344dd7c7e26 60 float deslocamento_max_X = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 61 float deslocamento_max_Y = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 62 float deslocamento_max_Z = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 63
diogonac 0:9344dd7c7e26 64 float passo_motor = 5.625/32; //Declara o passo angular do motor
diogonac 1:794015d244d3 65 float velocidade = 0.003; //Armazena a velocidade dos motores
diogonac 1:794015d244d3 66 int tempo_acionamento = 3180; //Tempo padrao de acionamento dos eixos
diogonac 0:9344dd7c7e26 67
diogonac 0:9344dd7c7e26 68 bool valor_SELECT = false; //Boleana para lógica do botão SELECT
diogonac 0:9344dd7c7e26 69 bool estado_referenciamento = false; //Boleana para identificar a necessidade do referênciamento
diogonac 0:9344dd7c7e26 70 bool estado_botao_emergencia_in = false; //Boleana para identificar a necessidade do referênciamentosatisfazer a lógica da rotina_emergencia_in
diogonac 0:9344dd7c7e26 71 bool motor_referenciamento = false; //Boleana para permitir o movimento automático do motot no referenciamento
diogonac 0:9344dd7c7e26 72
diogonac 0:9344dd7c7e26 73 bool eixo_pressionado = true;
diogonac 0:9344dd7c7e26 74
diogonac 0:9344dd7c7e26 75 // Rotinas do programa
diogonac 0:9344dd7c7e26 76 //void rotina_posicao_salva (void);
diogonac 0:9344dd7c7e26 77 void rotina_emergencia_in (void);
diogonac 0:9344dd7c7e26 78 void rotina_velocidade_eixo (void);
diogonac 0:9344dd7c7e26 79 void rotina_deslocamento_eixo (void);
diogonac 0:9344dd7c7e26 80 void rotina_deslocamento_eixo_menos_Z (void);
diogonac 0:9344dd7c7e26 81 void rotina_JOG (void);
diogonac 3:a2de739d2802 82 void rotina_Eixo_automatico (void);
diogonac 3:a2de739d2802 83 void rotina_aciona_pipeta(void);
diogonac 0:9344dd7c7e26 84
diogonac 0:9344dd7c7e26 85 void rotina_fdc_rise (void);
diogonac 0:9344dd7c7e26 86 void referenciamento (void);
diogonac 0:9344dd7c7e26 87
diogonac 0:9344dd7c7e26 88 int main()
diogonac 0:9344dd7c7e26 89 {
diogonac 0:9344dd7c7e26 90 recebe_arduino.baud(115200);// Interface com arduino
diogonac 0:9344dd7c7e26 91
diogonac 0:9344dd7c7e26 92
diogonac 0:9344dd7c7e26 93
diogonac 0:9344dd7c7e26 94 pc.baud(115200); //Define a velocidade da porta USB
diogonac 0:9344dd7c7e26 95 motor_x = 0x00; //Estabelece a condição inicial do motor do eixo X
diogonac 0:9344dd7c7e26 96 motor_y = 0x00; //Estabelece a condição inicial do motor do eixo Y
diogonac 0:9344dd7c7e26 97 motor_z = 0x00; //Estabelece a condição inicial do motor do eixo Z
diogonac 0:9344dd7c7e26 98
diogonac 0:9344dd7c7e26 99 //Declara os pinos de interrupção com suas funções
diogonac 0:9344dd7c7e26 100 //posicao_salva.rise(&rotina_posicao_salva);
diogonac 0:9344dd7c7e26 101 botao_emergencia_in.rise(&rotina_emergencia_in);
diogonac 0:9344dd7c7e26 102 botao_fim_curso_rise.rise(&rotina_fdc_rise);
diogonac 0:9344dd7c7e26 103
diogonac 0:9344dd7c7e26 104 //Inicializa os timers
diogonac 0:9344dd7c7e26 105 debounce1.start();
diogonac 0:9344dd7c7e26 106 debounce2.start();
diogonac 0:9344dd7c7e26 107 debounce3.start();
diogonac 0:9344dd7c7e26 108
diogonac 3:a2de739d2802 109 wait_ms(500);
diogonac 0:9344dd7c7e26 110
diogonac 0:9344dd7c7e26 111
diogonac 0:9344dd7c7e26 112 while(1) {
diogonac 0:9344dd7c7e26 113
diogonac 3:a2de739d2802 114 // for(i = 0; i < sizeof(set_eixos); i++) {
diogonac 3:a2de739d2802 115 // set_eixos[i] = 0;
diogonac 0:9344dd7c7e26 116 // }
diogonac 3:a2de739d2802 117
diogonac 3:a2de739d2802 118 recebe_dados(set_eixos, 4);
diogonac 3:a2de739d2802 119
diogonac 3:a2de739d2802 120 if(set_eixos[0] == '0') {
diogonac 3:a2de739d2802 121
diogonac 3:a2de739d2802 122
diogonac 3:a2de739d2802 123 for(i = 1; i < sizeof(set_eixos); i++) {
diogonac 3:a2de739d2802 124 set_eixos[i-1] = set_eixos[i];
diogonac 3:a2de739d2802 125 }
diogonac 3:a2de739d2802 126
diogonac 3:a2de739d2802 127 }
diogonac 0:9344dd7c7e26 128
diogonac 0:9344dd7c7e26 129
diogonac 0:9344dd7c7e26 130
diogonac 1:794015d244d3 131
diogonac 1:794015d244d3 132
diogonac 1:794015d244d3 133
diogonac 0:9344dd7c7e26 134 if(set_eixos[0] == 'R' & set_eixos[1] == 'F') {
diogonac 0:9344dd7c7e26 135
diogonac 0:9344dd7c7e26 136 pc.printf("Referenciamento \r\n");
diogonac 0:9344dd7c7e26 137
diogonac 0:9344dd7c7e26 138 contador_SELECT = 1;
diogonac 0:9344dd7c7e26 139 estado_referenciamento = false;
diogonac 0:9344dd7c7e26 140 //Permite o movimento automático do motor até atingir o fim de curso
diogonac 0:9344dd7c7e26 141 pc.printf("Estagio 1: movendo ate detectar\r\n");
diogonac 0:9344dd7c7e26 142 referenciamento();
diogonac 0:9344dd7c7e26 143
diogonac 0:9344dd7c7e26 144 } else {
diogonac 0:9344dd7c7e26 145
diogonac 0:9344dd7c7e26 146
diogonac 0:9344dd7c7e26 147 if(estado_referenciamento == true & estado_botao_emergencia_in == false) {
diogonac 0:9344dd7c7e26 148 //Condição para poder disponibilizar a função JOG
diogonac 0:9344dd7c7e26 149
diogonac 0:9344dd7c7e26 150 //Chama a rotina do JOG
diogonac 0:9344dd7c7e26 151 //recebe_dados(set_eixos, 2);
diogonac 0:9344dd7c7e26 152 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 153 rotina_JOG();
diogonac 0:9344dd7c7e26 154 pc.printf("%s \r\n", set_eixos);
diogonac 0:9344dd7c7e26 155
diogonac 0:9344dd7c7e26 156 }
diogonac 1:794015d244d3 157 //recebe_dados(set_eixos, 3);
diogonac 1:794015d244d3 158
diogonac 1:794015d244d3 159 if(set_eixos[0] == 'P') { //set_eixos = P27
diogonac 1:794015d244d3 160
diogonac 1:794015d244d3 161 //pc.printf("Pagina 4\r\n");
diogonac 1:794015d244d3 162 // pc.printf("Pega= %s\r\n", set_eixos);
diogonac 1:794015d244d3 163 //pc.printf("X%3.2f, Y%3.2f, Z%3.2f\n", deslocamento_X, deslocamento_Y, deslocamento_Z); //posicao[180] = {23.00, 100.00, 45.22}
diogonac 1:794015d244d3 164
diogonac 1:794015d244d3 165 //int tmp = atoi(cstr);
diogonac 0:9344dd7c7e26 166
diogonac 1:794015d244d3 167 posicoes[0] = deslocamento_X;
diogonac 1:794015d244d3 168 posicoes[1] = deslocamento_Y;
diogonac 1:794015d244d3 169 posicoes[2] = deslocamento_Z;
diogonac 0:9344dd7c7e26 170
diogonac 1:794015d244d3 171 for(i = 1; i < 3; i++) {
diogonac 1:794015d244d3 172 tmp[i-1] = set_eixos[i];
diogonac 1:794015d244d3 173 }
diogonac 1:794015d244d3 174
diogonac 1:794015d244d3 175 quantidades[0] = atoi(tmp);
diogonac 1:794015d244d3 176
diogonac 1:794015d244d3 177 pc.printf("PosicoesX= %f, PosicoesY= %f, PosicoesZ= %f \r\n", posicoes[0], posicoes[1], posicoes[2]);
diogonac 1:794015d244d3 178 pc.printf("Quantidades_pega= %d \r\n", quantidades[0]);
diogonac 1:794015d244d3 179 pc.printf("set_eixos= %s\r\n", set_eixos);
diogonac 0:9344dd7c7e26 180
diogonac 0:9344dd7c7e26 181 }
diogonac 1:794015d244d3 182
diogonac 1:794015d244d3 183 if(set_eixos[0] == 'S') {
diogonac 1:794015d244d3 184
diogonac 1:794015d244d3 185 switch(set_eixos[1]) {
diogonac 1:794015d244d3 186
diogonac 1:794015d244d3 187 case '1':
diogonac 1:794015d244d3 188
diogonac 1:794015d244d3 189 posicoes[3] = deslocamento_X;
diogonac 1:794015d244d3 190 posicoes[4] = deslocamento_Y;
diogonac 1:794015d244d3 191 posicoes[5] = deslocamento_Z;
diogonac 1:794015d244d3 192
diogonac 1:794015d244d3 193 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 194 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 195 }
diogonac 1:794015d244d3 196
diogonac 1:794015d244d3 197 quantidades[1] = atoi(tmp);
diogonac 1:794015d244d3 198 pc.printf("PosicoesX1= %f, PosicoesY1= %f, PosicoesZ1= %f \r\n", posicoes[3], posicoes[4], posicoes[5]);
diogonac 1:794015d244d3 199 pc.printf("Quantidades_solta1= %d \r\n", quantidades[1]);
diogonac 1:794015d244d3 200
diogonac 1:794015d244d3 201 break;
diogonac 1:794015d244d3 202 case '2':
diogonac 1:794015d244d3 203
diogonac 1:794015d244d3 204 posicoes[6] = deslocamento_X;
diogonac 1:794015d244d3 205 posicoes[7] = deslocamento_Y;
diogonac 1:794015d244d3 206 posicoes[8] = deslocamento_Z;
diogonac 1:794015d244d3 207
diogonac 1:794015d244d3 208 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 209 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 210 }
diogonac 1:794015d244d3 211
diogonac 1:794015d244d3 212 quantidades[2] = atoi(tmp);
diogonac 1:794015d244d3 213 pc.printf("PosicoesX2= %f, PosicoesY2= %f, PosicoesZ2= %f \r\n", posicoes[6], posicoes[7], posicoes[8]);
diogonac 1:794015d244d3 214 pc.printf("Quantidades_solta2= %d \r\n", quantidades[2]);
diogonac 1:794015d244d3 215
diogonac 1:794015d244d3 216 break;
diogonac 1:794015d244d3 217 case '3':
diogonac 1:794015d244d3 218
diogonac 1:794015d244d3 219 posicoes[9] = deslocamento_X;
diogonac 1:794015d244d3 220 posicoes[10] = deslocamento_Y;
diogonac 1:794015d244d3 221 posicoes[11] = deslocamento_Z;
diogonac 1:794015d244d3 222
diogonac 1:794015d244d3 223 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 224 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 225 }
diogonac 1:794015d244d3 226
diogonac 1:794015d244d3 227 quantidades[3] = atoi(tmp);
diogonac 1:794015d244d3 228 pc.printf("PosicoesX3= %f, PosicoesY3= %f, PosicoesZ3= %f \r\n", posicoes[9], posicoes[10], posicoes[11]);
diogonac 1:794015d244d3 229 pc.printf("Quantidades_solta3= %d \r\n", quantidades[3]);
diogonac 1:794015d244d3 230
diogonac 1:794015d244d3 231 break;
diogonac 1:794015d244d3 232
diogonac 2:af4dc49198bf 233 case '4':
diogonac 1:794015d244d3 234
diogonac 1:794015d244d3 235 posicoes[12] = deslocamento_X;
diogonac 1:794015d244d3 236 posicoes[13] = deslocamento_Y;
diogonac 1:794015d244d3 237 posicoes[14] = deslocamento_Z;
diogonac 1:794015d244d3 238
diogonac 1:794015d244d3 239 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 240 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 241 }
diogonac 1:794015d244d3 242
diogonac 1:794015d244d3 243 quantidades[4] = atoi(tmp);
diogonac 1:794015d244d3 244 pc.printf("PosicoesX4= %f, PosicoesY4= %f, PosicoesZ4= %f \r\n", posicoes[12], posicoes[13], posicoes[14]);
diogonac 1:794015d244d3 245 pc.printf("Quantidades_solta4= %d \r\n", quantidades[4]);
diogonac 1:794015d244d3 246
diogonac 1:794015d244d3 247 break;
diogonac 1:794015d244d3 248 case '5':
diogonac 1:794015d244d3 249
diogonac 1:794015d244d3 250 posicoes[15] = deslocamento_X;
diogonac 1:794015d244d3 251 posicoes[16] = deslocamento_Y;
diogonac 1:794015d244d3 252 posicoes[17] = deslocamento_Z;
diogonac 1:794015d244d3 253
diogonac 1:794015d244d3 254 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 255 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 256 }
diogonac 1:794015d244d3 257
diogonac 1:794015d244d3 258 quantidades[5] = atoi(tmp);
diogonac 1:794015d244d3 259 pc.printf("PosicoesX5= %f, PosicoesY5= %f, PosicoesZ5= %f \r\n", posicoes[15], posicoes[16], posicoes[17]);
diogonac 1:794015d244d3 260 pc.printf("Quantidades_solta5= %d \r\n", quantidades[5]);
diogonac 1:794015d244d3 261
diogonac 1:794015d244d3 262 break;
diogonac 1:794015d244d3 263 case '6':
diogonac 1:794015d244d3 264
diogonac 1:794015d244d3 265 posicoes[18] = deslocamento_X;
diogonac 1:794015d244d3 266 posicoes[19] = deslocamento_Y;
diogonac 1:794015d244d3 267 posicoes[20] = deslocamento_Z;
diogonac 1:794015d244d3 268
diogonac 1:794015d244d3 269 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 270 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 271 }
diogonac 1:794015d244d3 272
diogonac 1:794015d244d3 273 quantidades[6] = atoi(tmp);
diogonac 1:794015d244d3 274 pc.printf("PosicoesX6= %f, PosicoesY6= %f, PosicoesZ6= %f \r\n", posicoes[18], posicoes[19], posicoes[20]);
diogonac 1:794015d244d3 275 pc.printf("Quantidades_solta6= %d \r\n", quantidades[6]);
diogonac 1:794015d244d3 276
diogonac 1:794015d244d3 277 break;
diogonac 1:794015d244d3 278
diogonac 2:af4dc49198bf 279 case '7':
diogonac 2:af4dc49198bf 280
diogonac 2:af4dc49198bf 281 posicoes[21] = deslocamento_X;
diogonac 2:af4dc49198bf 282 posicoes[22] = deslocamento_Y;
diogonac 2:af4dc49198bf 283 posicoes[23] = deslocamento_Z;
diogonac 2:af4dc49198bf 284
diogonac 2:af4dc49198bf 285 for(i = 2; i < 4; i++) {
diogonac 2:af4dc49198bf 286 tmp[i-2] = set_eixos[i];
diogonac 2:af4dc49198bf 287 }
diogonac 2:af4dc49198bf 288
diogonac 2:af4dc49198bf 289 quantidades[7] = atoi(tmp);
diogonac 2:af4dc49198bf 290 pc.printf("PosicoesX7= %f, PosicoesY7= %f, PosicoesZ7= %f \r\n", posicoes[21], posicoes[22], posicoes[23]);
diogonac 2:af4dc49198bf 291 pc.printf("Quantidades_solta7= %d \r\n", quantidades[7]);
diogonac 2:af4dc49198bf 292
diogonac 2:af4dc49198bf 293 break;
diogonac 2:af4dc49198bf 294 case '8':
diogonac 2:af4dc49198bf 295
diogonac 2:af4dc49198bf 296 posicoes[24] = deslocamento_X;
diogonac 2:af4dc49198bf 297 posicoes[25] = deslocamento_Y;
diogonac 2:af4dc49198bf 298 posicoes[26] = deslocamento_Z;
diogonac 2:af4dc49198bf 299
diogonac 2:af4dc49198bf 300 for(i = 2; i < 4; i++) {
diogonac 2:af4dc49198bf 301 tmp[i-2] = set_eixos[i];
diogonac 2:af4dc49198bf 302 }
diogonac 2:af4dc49198bf 303
diogonac 2:af4dc49198bf 304 quantidades[8] = atoi(tmp);
diogonac 2:af4dc49198bf 305 pc.printf("PosicoesX8= %f, PosicoesY8= %f, PosicoesZ8= %f \r\n", posicoes[24], posicoes[25], posicoes[26]);
diogonac 2:af4dc49198bf 306 pc.printf("Quantidades_solta8= %d \r\n", quantidades[8]);
diogonac 2:af4dc49198bf 307
diogonac 2:af4dc49198bf 308 break;
diogonac 2:af4dc49198bf 309 case '9':
diogonac 2:af4dc49198bf 310
diogonac 2:af4dc49198bf 311 posicoes[27] = deslocamento_X;
diogonac 2:af4dc49198bf 312 posicoes[28] = deslocamento_Y;
diogonac 2:af4dc49198bf 313 posicoes[29] = deslocamento_Z;
diogonac 2:af4dc49198bf 314
diogonac 2:af4dc49198bf 315 for(i = 2; i < 4; i++) {
diogonac 2:af4dc49198bf 316 tmp[i-2] = set_eixos[i];
diogonac 2:af4dc49198bf 317 }
diogonac 2:af4dc49198bf 318
diogonac 2:af4dc49198bf 319 quantidades[9] = atoi(tmp);
diogonac 2:af4dc49198bf 320 pc.printf("PosicoesX9= %f, PosicoesY9= %f, PosicoesZ9= %f \r\n", posicoes[27], posicoes[28], posicoes[29]);
diogonac 2:af4dc49198bf 321 pc.printf("Quantidades_solta9= %d \r\n", quantidades[9]);
diogonac 2:af4dc49198bf 322
diogonac 2:af4dc49198bf 323 break;
diogonac 2:af4dc49198bf 324
diogonac 2:af4dc49198bf 325 }
diogonac 1:794015d244d3 326
diogonac 1:794015d244d3 327 pc.printf("set_eixos= %s\r\n", set_eixos);
diogonac 1:794015d244d3 328
diogonac 1:794015d244d3 329 }
diogonac 1:794015d244d3 330
diogonac 3:a2de739d2802 331 if(set_eixos[0] == 'R' & set_eixos[1] == 'S') {
diogonac 3:a2de739d2802 332
diogonac 3:a2de739d2802 333 pc.printf("Maquina em RESET \r\n");
diogonac 1:794015d244d3 334
diogonac 3:a2de739d2802 335 estado_referenciamento = false;
diogonac 3:a2de739d2802 336 velocidade = 0.003;
diogonac 3:a2de739d2802 337
diogonac 3:a2de739d2802 338 }
diogonac 3:a2de739d2802 339
diogonac 3:a2de739d2802 340
diogonac 3:a2de739d2802 341 if(set_eixos[0] == 'C' & set_eixos[1] == 'I') {
diogonac 1:794015d244d3 342
diogonac 3:a2de739d2802 343 pc.printf("Maquina em ciclo \r\n");
diogonac 3:a2de739d2802 344
diogonac 3:a2de739d2802 345 velocidade = 0.003;
diogonac 3:a2de739d2802 346 pc.printf("Posicao_desejada= %f, Posicao_atual= %f \r\n", posicoes[1], deslocamento_Y);
diogonac 3:a2de739d2802 347
diogonac 3:a2de739d2802 348 rotina_Eixo_automatico();
diogonac 1:794015d244d3 349
diogonac 3:a2de739d2802 350
diogonac 3:a2de739d2802 351 }
diogonac 3:a2de739d2802 352
diogonac 3:a2de739d2802 353
diogonac 3:a2de739d2802 354
diogonac 3:a2de739d2802 355
diogonac 3:a2de739d2802 356
diogonac 0:9344dd7c7e26 357 }
diogonac 0:9344dd7c7e26 358 }
diogonac 0:9344dd7c7e26 359 }
diogonac 0:9344dd7c7e26 360
diogonac 0:9344dd7c7e26 361
diogonac 0:9344dd7c7e26 362
diogonac 1:794015d244d3 363
diogonac 0:9344dd7c7e26 364 //void rotina_posicao_salva()
diogonac 0:9344dd7c7e26 365 //{
diogonac 0:9344dd7c7e26 366 //
diogonac 0:9344dd7c7e26 367 // if(debounce1.read_ms() >= 10) pegaZ = deslocamento_Z; //Salva a posição de pega
diogonac 0:9344dd7c7e26 368 // else pegaZ = 0;
diogonac 0:9344dd7c7e26 369 //
diogonac 0:9344dd7c7e26 370 // debounce1.reset();
diogonac 0:9344dd7c7e26 371 //}
diogonac 0:9344dd7c7e26 372
diogonac 0:9344dd7c7e26 373 void rotina_emergencia_in()
diogonac 0:9344dd7c7e26 374 {
diogonac 0:9344dd7c7e26 375
diogonac 1:794015d244d3 376 if(debounce2.read_ms() >= 25) {
diogonac 0:9344dd7c7e26 377
diogonac 0:9344dd7c7e26 378 motor_x = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo X
diogonac 0:9344dd7c7e26 379 motor_y = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo Y
diogonac 0:9344dd7c7e26 380 motor_z = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo Z
diogonac 0:9344dd7c7e26 381
diogonac 0:9344dd7c7e26 382 estado_referenciamento = false; //Solicita um novo referenciamento
diogonac 1:794015d244d3 383 estado_botao_emergencia_in = true;
diogonac 0:9344dd7c7e26 384 contador_emergencia += 1;
diogonac 0:9344dd7c7e26 385
diogonac 0:9344dd7c7e26 386
diogonac 0:9344dd7c7e26 387 debounce2.reset();
diogonac 1:794015d244d3 388 pc.printf("contador_emergencia= %d\r\n", contador_emergencia);
diogonac 0:9344dd7c7e26 389 }
diogonac 1:794015d244d3 390
diogonac 1:794015d244d3 391
diogonac 1:794015d244d3 392 if(contador_emergencia == 1) {
diogonac 1:794015d244d3 393
diogonac 1:794015d244d3 394 recebe_arduino.printf("E1\n"); //Indica que o botão de emergência foi apertado
diogonac 1:794015d244d3 395
diogonac 1:794015d244d3 396 estado_botao_emergencia_in = false;
diogonac 1:794015d244d3 397
diogonac 1:794015d244d3 398 }
diogonac 1:794015d244d3 399
diogonac 1:794015d244d3 400
diogonac 0:9344dd7c7e26 401 }
diogonac 0:9344dd7c7e26 402
diogonac 0:9344dd7c7e26 403 void rotina_velocidade_eixo()
diogonac 0:9344dd7c7e26 404 {
diogonac 0:9344dd7c7e26 405 //Converte a leitura do Joystick para tempo de acionamento do motor
diogonac 0:9344dd7c7e26 406
diogonac 0:9344dd7c7e26 407
diogonac 0:9344dd7c7e26 408 switch(set_eixos[0]) {
diogonac 0:9344dd7c7e26 409 case '1':
diogonac 1:794015d244d3 410 tempo_acionamento = 3180; //Desloca 1mm
diogonac 0:9344dd7c7e26 411 break;
diogonac 0:9344dd7c7e26 412 case '2':
diogonac 1:794015d244d3 413 tempo_acionamento = 15924; //Desloca 5mm
diogonac 0:9344dd7c7e26 414 break;
diogonac 0:9344dd7c7e26 415 case '3':
diogonac 1:794015d244d3 416 tempo_acionamento = 47780; //Desloca 15mm
diogonac 0:9344dd7c7e26 417 break;
diogonac 0:9344dd7c7e26 418 // default:
diogonac 0:9344dd7c7e26 419 // velocidade = 0.1;
diogonac 0:9344dd7c7e26 420 }
diogonac 0:9344dd7c7e26 421
diogonac 1:794015d244d3 422 pc.printf("tempo_acionamento= %d \r\n", tempo_acionamento);
diogonac 0:9344dd7c7e26 423 // J_XYZ = joystick.read_u16();
diogonac 0:9344dd7c7e26 424 // tempo_horario = -1*J_XYZ*0.0000028 + 0.1875;
diogonac 0:9344dd7c7e26 425 // tempo_anti_horario = J_XYZ*0.000002785 + 0.0025;
diogonac 0:9344dd7c7e26 426 }
diogonac 0:9344dd7c7e26 427
diogonac 0:9344dd7c7e26 428 void rotina_velocidade_referenciamento_eixo_Z()
diogonac 0:9344dd7c7e26 429 {
diogonac 0:9344dd7c7e26 430 //Converte a leitura do Joystick para tempo de acionamento do motor
diogonac 0:9344dd7c7e26 431 J_XYZ = joystick.read_u16();
diogonac 0:9344dd7c7e26 432 tempo_horario = (-1*J_XYZ*0.0000028 + 0.1875)*2;
diogonac 0:9344dd7c7e26 433 tempo_anti_horario = (J_XYZ*0.000002785 + 0.0025)*2;
diogonac 0:9344dd7c7e26 434 }
diogonac 0:9344dd7c7e26 435
diogonac 0:9344dd7c7e26 436 void rotina_deslocamento_eixo()
diogonac 0:9344dd7c7e26 437 {
diogonac 0:9344dd7c7e26 438 //Calcula os deslocamentos no eixo Z
diogonac 0:9344dd7c7e26 439
diogonac 0:9344dd7c7e26 440 deslocamento_X = (passo_fuso*pulsos_X*passo_motor)/360;
diogonac 0:9344dd7c7e26 441 deslocamento_Y = (passo_fuso*pulsos_Y*passo_motor)/360;
diogonac 0:9344dd7c7e26 442 deslocamento_Z = (passo_fuso*pulsos_Z*passo_motor)/360;
diogonac 0:9344dd7c7e26 443
diogonac 0:9344dd7c7e26 444 recebe_arduino.printf("X%3.2f\n", deslocamento_X);
diogonac 0:9344dd7c7e26 445 recebe_arduino.printf("Y%3.2f\n", deslocamento_Y);
diogonac 0:9344dd7c7e26 446 recebe_arduino.printf("Z%3.2f\n", deslocamento_Z);
diogonac 0:9344dd7c7e26 447
diogonac 0:9344dd7c7e26 448 pc.printf("X%3.2f\n", deslocamento_X);
diogonac 0:9344dd7c7e26 449 pc.printf("Y%3.2f\n", deslocamento_Y);
diogonac 0:9344dd7c7e26 450 pc.printf("Z%3.2f\n", deslocamento_Z);
diogonac 0:9344dd7c7e26 451 }
diogonac 0:9344dd7c7e26 452
diogonac 0:9344dd7c7e26 453
diogonac 0:9344dd7c7e26 454
diogonac 0:9344dd7c7e26 455
diogonac 0:9344dd7c7e26 456 void referenciamento()
diogonac 0:9344dd7c7e26 457 {
diogonac 0:9344dd7c7e26 458
diogonac 0:9344dd7c7e26 459 while(estado_referenciamento == false & estado_botao_emergencia_in == false & contador_SELECT == 1) {//W1
diogonac 0:9344dd7c7e26 460
diogonac 0:9344dd7c7e26 461 for(i = 0; i < 4; i++) {
diogonac 0:9344dd7c7e26 462 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 463 motor_y = 1 << i;
diogonac 0:9344dd7c7e26 464 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 465 wait(0.003);
diogonac 0:9344dd7c7e26 466 }
diogonac 0:9344dd7c7e26 467
diogonac 0:9344dd7c7e26 468 if(contador_rise == 1) {//if1
diogonac 0:9344dd7c7e26 469
diogonac 0:9344dd7c7e26 470 while(estado_referenciamento == false & estado_botao_emergencia_in == false & contador_rise == 1) {//W2
diogonac 0:9344dd7c7e26 471
diogonac 0:9344dd7c7e26 472 for(i = 3; i > -1; i--) {
diogonac 0:9344dd7c7e26 473 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 474 motor_y = 1 << i;
diogonac 0:9344dd7c7e26 475 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 476 wait(0.003);
diogonac 0:9344dd7c7e26 477
diogonac 0:9344dd7c7e26 478 }
diogonac 0:9344dd7c7e26 479
diogonac 0:9344dd7c7e26 480 if(contador_rise == 2) {//if2
diogonac 0:9344dd7c7e26 481
diogonac 0:9344dd7c7e26 482 while(estado_referenciamento == false & estado_botao_emergencia_in == false & contador_rise == 2) {//W3
diogonac 0:9344dd7c7e26 483
diogonac 0:9344dd7c7e26 484 for(i = 0; i < 4; i++) {
diogonac 0:9344dd7c7e26 485 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 486 motor_y = 1 << i;
diogonac 0:9344dd7c7e26 487 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 488 wait(0.003);
diogonac 0:9344dd7c7e26 489 }
diogonac 0:9344dd7c7e26 490
diogonac 0:9344dd7c7e26 491 if(contador_rise == 3) {//if3
diogonac 0:9344dd7c7e26 492
diogonac 0:9344dd7c7e26 493 while(seguranca_fdc != 8 & estado_referenciamento == false & estado_botao_emergencia_in == false & contador_rise == 3) {//W4
diogonac 0:9344dd7c7e26 494 for(i = 3; i > -1; i--) {
diogonac 0:9344dd7c7e26 495 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 496 motor_y = 1 << i;
diogonac 0:9344dd7c7e26 497 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 498 wait(0.003);
diogonac 0:9344dd7c7e26 499
diogonac 0:9344dd7c7e26 500 }
diogonac 0:9344dd7c7e26 501 seguranca_fdc += 1;
diogonac 0:9344dd7c7e26 502
diogonac 0:9344dd7c7e26 503 }//Fecha W4
diogonac 0:9344dd7c7e26 504
diogonac 0:9344dd7c7e26 505 estado_referenciamento = true;
diogonac 0:9344dd7c7e26 506 contador_SELECT = 0;
diogonac 0:9344dd7c7e26 507 contador_rise = 0;
diogonac 0:9344dd7c7e26 508 seguranca_fdc = 0;
diogonac 0:9344dd7c7e26 509
diogonac 0:9344dd7c7e26 510 deslocamento_X = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 511 deslocamento_Y = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 512 deslocamento_Z = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 513 pulsos_X = 0;
diogonac 0:9344dd7c7e26 514 pulsos_Y = 0;
diogonac 0:9344dd7c7e26 515 pulsos_Z = 0;
diogonac 1:794015d244d3 516 deslocamento_max_X = 100; //Define o deslocamento linear total
diogonac 1:794015d244d3 517 deslocamento_max_Y = 100; //Define o deslocamento linear total
diogonac 1:794015d244d3 518 deslocamento_max_Z = 100; //Define o deslocamento linear total
diogonac 1:794015d244d3 519 tempo_acionamento = 3180;
diogonac 1:794015d244d3 520 velocidade = 0.003;
diogonac 1:794015d244d3 521
diogonac 0:9344dd7c7e26 522 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 523
diogonac 0:9344dd7c7e26 524 recebe_arduino.printf("D\n"); //Done referenciamento
diogonac 0:9344dd7c7e26 525
diogonac 0:9344dd7c7e26 526 }//Fecha if3
diogonac 0:9344dd7c7e26 527 }//Fecha W3
diogonac 0:9344dd7c7e26 528
diogonac 0:9344dd7c7e26 529 }//Fecha if2
diogonac 0:9344dd7c7e26 530 }//Fecha W2
diogonac 0:9344dd7c7e26 531 }//Fecha if1
diogonac 0:9344dd7c7e26 532 }//Fecha W1
diogonac 0:9344dd7c7e26 533 motor_x = 0x00;
diogonac 0:9344dd7c7e26 534 motor_y = 0x00;
diogonac 0:9344dd7c7e26 535 motor_z = 0x00;
diogonac 0:9344dd7c7e26 536 }//Fecha funcao
diogonac 0:9344dd7c7e26 537
diogonac 0:9344dd7c7e26 538
diogonac 0:9344dd7c7e26 539 void rotina_fdc_rise()
diogonac 0:9344dd7c7e26 540 {
diogonac 0:9344dd7c7e26 541 if(debounce3.read_ms() >= 50 & estado_botao_emergencia_in == false & estado_referenciamento == false & contador_SELECT == 1) {
diogonac 0:9344dd7c7e26 542 contador_rise += 1;
diogonac 0:9344dd7c7e26 543 pc.printf("contador_rise=%d\n", contador_rise);
diogonac 0:9344dd7c7e26 544 debounce3.reset();
diogonac 0:9344dd7c7e26 545 }
diogonac 0:9344dd7c7e26 546 }
diogonac 0:9344dd7c7e26 547
diogonac 0:9344dd7c7e26 548 void rotina_JOG()
diogonac 0:9344dd7c7e26 549 {
diogonac 0:9344dd7c7e26 550 if(sizeof(set_eixos) == 0) {
diogonac 0:9344dd7c7e26 551 motor_x = 0x00;
diogonac 0:9344dd7c7e26 552 motor_y = 0x00;
diogonac 0:9344dd7c7e26 553 motor_z = 0x00;
diogonac 0:9344dd7c7e26 554 }
diogonac 0:9344dd7c7e26 555
diogonac 0:9344dd7c7e26 556 else {
diogonac 0:9344dd7c7e26 557 //============== Movimenta Eixo Y ======================================
diogonac 0:9344dd7c7e26 558
diogonac 1:794015d244d3 559 if (set_eixos[0] == '-' & set_eixos[1] == 'Y') {
diogonac 1:794015d244d3 560 tempo_motor.start();
diogonac 1:794015d244d3 561 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_Y > 0 & pulsos_Y >= 0) {
diogonac 0:9344dd7c7e26 562 for(i = 0; i < 4; i++) {
diogonac 0:9344dd7c7e26 563 motor_y = 1 << i;
diogonac 0:9344dd7c7e26 564 pulsos_Y-=1;
diogonac 0:9344dd7c7e26 565 wait(velocidade);
diogonac 0:9344dd7c7e26 566 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 567 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 568
diogonac 0:9344dd7c7e26 569 }
diogonac 0:9344dd7c7e26 570 }
diogonac 1:794015d244d3 571 tempo_motor.reset();
diogonac 1:794015d244d3 572 tempo_motor.stop();
diogonac 0:9344dd7c7e26 573 }
diogonac 0:9344dd7c7e26 574
diogonac 1:794015d244d3 575 if(set_eixos[0] == '+' & set_eixos[1] == 'Y') {
diogonac 1:794015d244d3 576 tempo_motor.start();
diogonac 1:794015d244d3 577 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_max_Y > deslocamento_Y & pulsos_Y >= 0) {
diogonac 1:794015d244d3 578 for(i = 3; i > -1; i--) {
diogonac 1:794015d244d3 579 motor_y = 1 << i;
diogonac 1:794015d244d3 580 pulsos_Y+=1;
diogonac 1:794015d244d3 581 wait(velocidade);
diogonac 1:794015d244d3 582 rotina_velocidade_eixo();
diogonac 1:794015d244d3 583 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 584
diogonac 1:794015d244d3 585 }
diogonac 0:9344dd7c7e26 586 }
diogonac 1:794015d244d3 587 tempo_motor.reset();
diogonac 1:794015d244d3 588 tempo_motor.stop();
diogonac 0:9344dd7c7e26 589 }
diogonac 0:9344dd7c7e26 590
diogonac 0:9344dd7c7e26 591 //============== Movimenta Eixo X ======================================
diogonac 0:9344dd7c7e26 592
diogonac 0:9344dd7c7e26 593 if (set_eixos[0] == '-' & set_eixos[1] == 'X') {
diogonac 0:9344dd7c7e26 594 tempo_motor.start();
diogonac 1:794015d244d3 595 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_X > 0 & pulsos_X >= 0) {
diogonac 0:9344dd7c7e26 596 for(i = 0; i < 4; i++) {
diogonac 0:9344dd7c7e26 597 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 598 pulsos_X-=1;
diogonac 0:9344dd7c7e26 599 wait(velocidade);
diogonac 0:9344dd7c7e26 600 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 601 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 602
diogonac 0:9344dd7c7e26 603 }
diogonac 0:9344dd7c7e26 604 }
diogonac 0:9344dd7c7e26 605 tempo_motor.reset();
diogonac 0:9344dd7c7e26 606 tempo_motor.stop();
diogonac 0:9344dd7c7e26 607 }
diogonac 0:9344dd7c7e26 608
diogonac 0:9344dd7c7e26 609 if(set_eixos[0] == '+' & set_eixos[1] == 'X') {
diogonac 0:9344dd7c7e26 610 tempo_motor.start();
diogonac 1:794015d244d3 611 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_max_X > deslocamento_X & pulsos_X >= 0) {
diogonac 0:9344dd7c7e26 612 for(i = 3; i > -1; i--) {
diogonac 0:9344dd7c7e26 613 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 614 pulsos_X+=1;
diogonac 0:9344dd7c7e26 615 wait(velocidade);
diogonac 0:9344dd7c7e26 616 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 617 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 618
diogonac 0:9344dd7c7e26 619 }
diogonac 0:9344dd7c7e26 620 }
diogonac 0:9344dd7c7e26 621 tempo_motor.reset();
diogonac 0:9344dd7c7e26 622 tempo_motor.stop();
diogonac 0:9344dd7c7e26 623 }
diogonac 0:9344dd7c7e26 624
diogonac 0:9344dd7c7e26 625
diogonac 0:9344dd7c7e26 626 //============== Movimenta Eixo Z ======================================
diogonac 0:9344dd7c7e26 627
diogonac 0:9344dd7c7e26 628 if (set_eixos[0] == '-' & set_eixos[1] == 'Z') {
diogonac 0:9344dd7c7e26 629 tempo_motor.start();
diogonac 1:794015d244d3 630 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_Z > 0 & pulsos_Z >= 0) {
diogonac 0:9344dd7c7e26 631 for(i = 0; i < 4; i++) {
diogonac 0:9344dd7c7e26 632 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 633 pulsos_Z-=1;
diogonac 0:9344dd7c7e26 634 wait(velocidade);
diogonac 0:9344dd7c7e26 635 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 636 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 637
diogonac 0:9344dd7c7e26 638 }
diogonac 0:9344dd7c7e26 639 }
diogonac 0:9344dd7c7e26 640 tempo_motor.reset();
diogonac 0:9344dd7c7e26 641 tempo_motor.stop();
diogonac 0:9344dd7c7e26 642 }
diogonac 0:9344dd7c7e26 643
diogonac 0:9344dd7c7e26 644 if(set_eixos[0] == '+' & set_eixos[1] == 'Z') {
diogonac 0:9344dd7c7e26 645 tempo_motor.start();
diogonac 1:794015d244d3 646 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_max_Z > deslocamento_Z & pulsos_Z >= 0) {
diogonac 0:9344dd7c7e26 647 for(i = 3; i > -1; i--) {
diogonac 0:9344dd7c7e26 648 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 649 pulsos_Z+=1;
diogonac 0:9344dd7c7e26 650 wait(velocidade);
diogonac 0:9344dd7c7e26 651 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 652 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 653
diogonac 0:9344dd7c7e26 654 }
diogonac 0:9344dd7c7e26 655 }
diogonac 0:9344dd7c7e26 656 tempo_motor.reset();
diogonac 0:9344dd7c7e26 657 tempo_motor.stop();
diogonac 0:9344dd7c7e26 658 }
diogonac 0:9344dd7c7e26 659
diogonac 0:9344dd7c7e26 660 motor_x = 0x00;
diogonac 0:9344dd7c7e26 661 motor_y = 0x00;
diogonac 0:9344dd7c7e26 662 motor_z = 0x00;
diogonac 0:9344dd7c7e26 663 }
diogonac 0:9344dd7c7e26 664 }
diogonac 0:9344dd7c7e26 665
diogonac 3:a2de739d2802 666 void rotina_Eixo_automatico()
diogonac 3:a2de739d2802 667 {
diogonac 3:a2de739d2802 668 //============== Movimenta Eixo Y ======================================
diogonac 3:a2de739d2802 669 rotina_deslocamento_eixo();
diogonac 3:a2de739d2802 670
diogonac 4:e905261df87f 671
diogonac 4:e905261df87f 672 for(int a = 0; a < 30; a=a+3) {
diogonac 4:e905261df87f 673
diogonac 3:a2de739d2802 674
diogonac 4:e905261df87f 675 if (posicoes[a+1] <= deslocamento_Y) {
diogonac 4:e905261df87f 676 while(deslocamento_Y > posicoes[a+1] & deslocamento_Y >= 0 & pulsos_Y >= 0) {
diogonac 4:e905261df87f 677 for(i = 0; i < 4; i++) {
diogonac 4:e905261df87f 678 motor_y = 1 << i;
diogonac 4:e905261df87f 679 pulsos_Y-=1;
diogonac 4:e905261df87f 680 wait(velocidade);
diogonac 4:e905261df87f 681 rotina_velocidade_eixo();
diogonac 4:e905261df87f 682 rotina_deslocamento_eixo();
diogonac 4:e905261df87f 683
diogonac 4:e905261df87f 684 }
diogonac 4:e905261df87f 685 pc.printf("Y= %f \r\n", deslocamento_Y);
diogonac 3:a2de739d2802 686 }
diogonac 4:e905261df87f 687
diogonac 3:a2de739d2802 688
diogonac 4:e905261df87f 689 } else motor_y = 0x00;
diogonac 4:e905261df87f 690
diogonac 4:e905261df87f 691 if(posicoes[a+1] >= deslocamento_Y) {
diogonac 3:a2de739d2802 692
diogonac 4:e905261df87f 693 while(deslocamento_Y < posicoes[a+1] & deslocamento_max_Y >= deslocamento_Y & pulsos_Y >= 0) {
diogonac 4:e905261df87f 694 for(i = 3; i > -1; i--) {
diogonac 4:e905261df87f 695 motor_y = 1 << i;
diogonac 4:e905261df87f 696 pulsos_Y+=1;
diogonac 4:e905261df87f 697 wait(velocidade);
diogonac 4:e905261df87f 698 rotina_velocidade_eixo();
diogonac 4:e905261df87f 699 rotina_deslocamento_eixo();
diogonac 3:a2de739d2802 700
diogonac 4:e905261df87f 701 }
diogonac 4:e905261df87f 702 pc.printf("Y= %f \r\n", deslocamento_Y);
diogonac 3:a2de739d2802 703 }
diogonac 4:e905261df87f 704
diogonac 4:e905261df87f 705 } else motor_y = 0x00;
diogonac 3:a2de739d2802 706
diogonac 3:a2de739d2802 707 //============== Movimenta Eixo X ======================================
diogonac 3:a2de739d2802 708
diogonac 4:e905261df87f 709 if (posicoes[a] <= deslocamento_X) {
diogonac 3:a2de739d2802 710
diogonac 4:e905261df87f 711 while(deslocamento_X > posicoes[a] & deslocamento_X >= 0 & pulsos_X >= 0) {
diogonac 4:e905261df87f 712 for(i = 0; i < 4; i++) {
diogonac 4:e905261df87f 713 motor_x = 1 << i;
diogonac 4:e905261df87f 714 pulsos_X-=1;
diogonac 4:e905261df87f 715 wait(velocidade);
diogonac 4:e905261df87f 716 rotina_velocidade_eixo();
diogonac 4:e905261df87f 717 rotina_deslocamento_eixo();
diogonac 4:e905261df87f 718
diogonac 4:e905261df87f 719 }
diogonac 4:e905261df87f 720 pc.printf("X= %f \r\n", deslocamento_X);
diogonac 3:a2de739d2802 721 }
diogonac 4:e905261df87f 722
diogonac 4:e905261df87f 723 } else motor_x = 0x00;
diogonac 3:a2de739d2802 724
diogonac 4:e905261df87f 725 if(posicoes[a] >= deslocamento_X) {
diogonac 3:a2de739d2802 726
diogonac 4:e905261df87f 727 while(deslocamento_X < posicoes[a] & deslocamento_max_X > deslocamento_X & pulsos_X >= 0) {
diogonac 4:e905261df87f 728 for(i = 3; i > -1; i--) {
diogonac 4:e905261df87f 729 motor_x = 1 << i;
diogonac 4:e905261df87f 730 pulsos_X+=1;
diogonac 4:e905261df87f 731 wait(velocidade);
diogonac 4:e905261df87f 732 rotina_velocidade_eixo();
diogonac 4:e905261df87f 733 rotina_deslocamento_eixo();
diogonac 4:e905261df87f 734
diogonac 4:e905261df87f 735 }
diogonac 4:e905261df87f 736 pc.printf("X= %f \r\n", deslocamento_X);
diogonac 3:a2de739d2802 737 }
diogonac 4:e905261df87f 738
diogonac 4:e905261df87f 739 } else motor_x = 0x00;
diogonac 3:a2de739d2802 740
diogonac 3:a2de739d2802 741
diogonac 3:a2de739d2802 742 //============== Movimenta Eixo Z ======================================
diogonac 3:a2de739d2802 743
diogonac 4:e905261df87f 744 if (posicoes[a+2] <= deslocamento_Z) {
diogonac 3:a2de739d2802 745
diogonac 4:e905261df87f 746 while(deslocamento_Z > posicoes[a+2] & deslocamento_Z > 0 & pulsos_Z >= 0) {
diogonac 4:e905261df87f 747 for(i = 0; i < 4; i++) {
diogonac 4:e905261df87f 748 motor_z = 1 << i;
diogonac 4:e905261df87f 749 pulsos_Z-=1;
diogonac 4:e905261df87f 750 wait(velocidade);
diogonac 4:e905261df87f 751 rotina_velocidade_eixo();
diogonac 4:e905261df87f 752 rotina_deslocamento_eixo();
diogonac 4:e905261df87f 753
diogonac 4:e905261df87f 754 }
diogonac 4:e905261df87f 755 pc.printf("Z= %f \r\n", deslocamento_Z);
diogonac 3:a2de739d2802 756 }
diogonac 4:e905261df87f 757
diogonac 4:e905261df87f 758 } else motor_z = 0x00;
diogonac 4:e905261df87f 759
diogonac 4:e905261df87f 760 if(posicoes[a+2] >= deslocamento_Z) {
diogonac 3:a2de739d2802 761
diogonac 4:e905261df87f 762 while(deslocamento_Z < posicoes[a+2] & deslocamento_max_Z > deslocamento_Z & pulsos_Z >= 0) {
diogonac 4:e905261df87f 763 for(i = 3; i > -1; i--) {
diogonac 4:e905261df87f 764 motor_z = 1 << i;
diogonac 4:e905261df87f 765 pulsos_Z+=1;
diogonac 4:e905261df87f 766 wait(velocidade);
diogonac 4:e905261df87f 767 rotina_velocidade_eixo();
diogonac 4:e905261df87f 768 rotina_deslocamento_eixo();
diogonac 3:a2de739d2802 769
diogonac 4:e905261df87f 770 }
diogonac 4:e905261df87f 771 pc.printf("Z= %f \r\n", deslocamento_Z);
diogonac 4:e905261df87f 772 }
diogonac 3:a2de739d2802 773
diogonac 4:e905261df87f 774 } else motor_z = 0x00;
diogonac 4:e905261df87f 775
diogonac 4:e905261df87f 776 motor_x = 0x00;
diogonac 4:e905261df87f 777 motor_y = 0x00;
diogonac 4:e905261df87f 778 motor_z = 0x00;
diogonac 4:e905261df87f 779 }
diogonac 4:e905261df87f 780
diogonac 4:e905261df87f 781 }
diogonac 3:a2de739d2802 782
diogonac 3:a2de739d2802 783
diogonac 3:a2de739d2802 784 void rotina_aciona_pipeta()
diogonac 3:a2de739d2802 785 {
diogonac 3:a2de739d2802 786
diogonac 3:a2de739d2802 787
diogonac 3:a2de739d2802 788 }
diogonac 3:a2de739d2802 789
diogonac 3:a2de739d2802 790
diogonac 3:a2de739d2802 791
diogonac 3:a2de739d2802 792
diogonac 3:a2de739d2802 793
diogonac 0:9344dd7c7e26 794 void recebe_dados(unsigned char *data_buf, int numchar)
diogonac 0:9344dd7c7e26 795 {
diogonac 0:9344dd7c7e26 796 int count=0;
diogonac 0:9344dd7c7e26 797 if(numchar == 0) {
diogonac 0:9344dd7c7e26 798 numchar = sizeof(data_buf);
diogonac 0:9344dd7c7e26 799 }
diogonac 0:9344dd7c7e26 800
diogonac 0:9344dd7c7e26 801 while(numchar!=count) {
diogonac 0:9344dd7c7e26 802 if(recebe_arduino.readable()) {
diogonac 0:9344dd7c7e26 803 *data_buf = recebe_arduino.getc();
diogonac 0:9344dd7c7e26 804 data_buf+=1;
diogonac 0:9344dd7c7e26 805 count++;
diogonac 0:9344dd7c7e26 806 }
diogonac 0:9344dd7c7e26 807 }
diogonac 3:a2de739d2802 808
diogonac 0:9344dd7c7e26 809 }