Projeto Mecatrônico / Mbed 2 deprecated ARDUINO_NEXTION

Dependencies:   mbed

Committer:
diogonac
Date:
Mon Jun 07 17:47:56 2021 +0000
Revision:
1:794015d244d3
Parent:
0:9344dd7c7e26
Child:
2:af4dc49198bf
Melhorias, logica para salvar posicoes e volume por posicao

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 1:794015d244d3 51 float posicoes[180];//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 0:9344dd7c7e26 82
diogonac 0:9344dd7c7e26 83 void rotina_fdc_rise (void);
diogonac 0:9344dd7c7e26 84 void referenciamento (void);
diogonac 0:9344dd7c7e26 85
diogonac 0:9344dd7c7e26 86 int main()
diogonac 0:9344dd7c7e26 87 {
diogonac 0:9344dd7c7e26 88 recebe_arduino.baud(115200);// Interface com arduino
diogonac 0:9344dd7c7e26 89
diogonac 0:9344dd7c7e26 90
diogonac 0:9344dd7c7e26 91
diogonac 0:9344dd7c7e26 92 pc.baud(115200); //Define a velocidade da porta USB
diogonac 0:9344dd7c7e26 93 motor_x = 0x00; //Estabelece a condição inicial do motor do eixo X
diogonac 0:9344dd7c7e26 94 motor_y = 0x00; //Estabelece a condição inicial do motor do eixo Y
diogonac 0:9344dd7c7e26 95 motor_z = 0x00; //Estabelece a condição inicial do motor do eixo Z
diogonac 0:9344dd7c7e26 96
diogonac 0:9344dd7c7e26 97 //Declara os pinos de interrupção com suas funções
diogonac 0:9344dd7c7e26 98 //posicao_salva.rise(&rotina_posicao_salva);
diogonac 0:9344dd7c7e26 99 botao_emergencia_in.rise(&rotina_emergencia_in);
diogonac 0:9344dd7c7e26 100 botao_fim_curso_rise.rise(&rotina_fdc_rise);
diogonac 0:9344dd7c7e26 101
diogonac 0:9344dd7c7e26 102 //Inicializa os timers
diogonac 0:9344dd7c7e26 103 debounce1.start();
diogonac 0:9344dd7c7e26 104 debounce2.start();
diogonac 0:9344dd7c7e26 105 debounce3.start();
diogonac 0:9344dd7c7e26 106
diogonac 0:9344dd7c7e26 107
diogonac 0:9344dd7c7e26 108 //Inicia o LCD
diogonac 0:9344dd7c7e26 109 wait_ms(500);
diogonac 0:9344dd7c7e26 110 // lcd.locate(2,0);
diogonac 0:9344dd7c7e26 111 // lcd.printf("SELECT para");
diogonac 0:9344dd7c7e26 112 // lcd.locate(0,1);
diogonac 0:9344dd7c7e26 113 // lcd.printf("referenciamento");
diogonac 0:9344dd7c7e26 114
diogonac 0:9344dd7c7e26 115 while(1) {
diogonac 0:9344dd7c7e26 116
diogonac 0:9344dd7c7e26 117
diogonac 0:9344dd7c7e26 118 //pc.printf("%s \r\n", set_eixos);
diogonac 0:9344dd7c7e26 119
diogonac 0:9344dd7c7e26 120 // if(set_eixos[0] == '+' & set_eixos[1] == 'Y') {
diogonac 0:9344dd7c7e26 121 // contador_Y+=1;
diogonac 0:9344dd7c7e26 122 // pc.printf("%s \r\n", set_eixos);
diogonac 0:9344dd7c7e26 123 // recebe_arduino.printf("%d \r\n", contador_Y);
diogonac 0:9344dd7c7e26 124 // pc.printf("%d \r\n", contador_Y);
diogonac 0:9344dd7c7e26 125 //
diogonac 0:9344dd7c7e26 126 // }
diogonac 0:9344dd7c7e26 127 // if(set_eixos[0] == '-' & set_eixos[1] == 'Y') {
diogonac 0:9344dd7c7e26 128 // contador_Y-=1;
diogonac 0:9344dd7c7e26 129 // pc.printf("%s \r\n", set_eixos);
diogonac 0:9344dd7c7e26 130 // recebe_arduino.printf("%d \r\n", contador_Y);
diogonac 0:9344dd7c7e26 131 // pc.printf("%d \r\n", contador_Y);
diogonac 0:9344dd7c7e26 132 // }
diogonac 0:9344dd7c7e26 133 // if(set_eixos[0] == '+' & set_eixos[1] == 'X') {
diogonac 0:9344dd7c7e26 134 // contador_X+=1;
diogonac 0:9344dd7c7e26 135 // pc.printf("%s \r\n", set_eixos);
diogonac 0:9344dd7c7e26 136 // recebe_arduino.printf("%d \r\n", contador_X);
diogonac 0:9344dd7c7e26 137 // pc.printf("%d \r\n", contador_X);
diogonac 0:9344dd7c7e26 138 // }
diogonac 0:9344dd7c7e26 139 // if(set_eixos[0] == '-' & set_eixos[1] == 'X') {
diogonac 0:9344dd7c7e26 140 // contador_X-=1;
diogonac 0:9344dd7c7e26 141 // pc.printf("%s \r\n", set_eixos);
diogonac 0:9344dd7c7e26 142 // recebe_arduino.printf("%d \r\n", contador_X);
diogonac 0:9344dd7c7e26 143 // pc.printf("%d \r\n", contador_X);
diogonac 0:9344dd7c7e26 144 // }
diogonac 0:9344dd7c7e26 145 // if(set_eixos[0] == '+' & set_eixos[1] == 'Z') {
diogonac 0:9344dd7c7e26 146 // contador_Z+=1;
diogonac 0:9344dd7c7e26 147 // pc.printf("%s \r\n", set_eixos);
diogonac 0:9344dd7c7e26 148 // recebe_arduino.printf("%d \r\n", contador_Z);
diogonac 0:9344dd7c7e26 149 // pc.printf("%d \r\n", contador_Z);
diogonac 0:9344dd7c7e26 150 // }
diogonac 0:9344dd7c7e26 151 // if(set_eixos[0] == '-' & set_eixos[1] == 'Z') {
diogonac 0:9344dd7c7e26 152 // contador_Z-=1;
diogonac 0:9344dd7c7e26 153 // pc.printf("%s \r\n", set_eixos);
diogonac 0:9344dd7c7e26 154 // recebe_arduino.printf("%d \r\n", contador_Z);
diogonac 0:9344dd7c7e26 155 // pc.printf("%d \r\n", contador_Z);
diogonac 0:9344dd7c7e26 156 // }
diogonac 0:9344dd7c7e26 157 //
diogonac 0:9344dd7c7e26 158 // if(set_eixos[0] == 'R' & set_eixos[1] == 'F') {
diogonac 0:9344dd7c7e26 159 // pc.printf("%s \r\n", set_eixos);
diogonac 0:9344dd7c7e26 160 // }
diogonac 0:9344dd7c7e26 161 //
diogonac 0:9344dd7c7e26 162 // if(set_eixos[0] == '1') {
diogonac 0:9344dd7c7e26 163 // pc.printf("%d \r\n", 1);
diogonac 0:9344dd7c7e26 164 // }
diogonac 0:9344dd7c7e26 165 //
diogonac 0:9344dd7c7e26 166 // if(set_eixos[0] == '2') {
diogonac 0:9344dd7c7e26 167 // pc.printf("%d \r\n", 2);
diogonac 0:9344dd7c7e26 168 // }
diogonac 0:9344dd7c7e26 169 // if(set_eixos[0] == '3') {
diogonac 0:9344dd7c7e26 170 // pc.printf("%d \r\n", 3);
diogonac 0:9344dd7c7e26 171 // }
diogonac 0:9344dd7c7e26 172 // if(set_eixos[0] == 'R' & set_eixos[1] == 'S') {
diogonac 0:9344dd7c7e26 173 //
diogonac 0:9344dd7c7e26 174 // contador_X = 0;
diogonac 0:9344dd7c7e26 175 // recebe_arduino.printf("%d \r\n", contador_X);
diogonac 0:9344dd7c7e26 176 // pc.printf("%d \r\n", contador_X);
diogonac 0:9344dd7c7e26 177 // }
diogonac 0:9344dd7c7e26 178
diogonac 0:9344dd7c7e26 179
diogonac 0:9344dd7c7e26 180
diogonac 0:9344dd7c7e26 181 // //Leitura de variáveis
diogonac 0:9344dd7c7e26 182 // J_XYZ = joystick.read_u16();
diogonac 0:9344dd7c7e26 183 // //SELECT = botao_SELECT.read_u16();
diogonac 0:9344dd7c7e26 184 // //pc.printf("estado_referenciamento=%4d, estado_botao_emergencia_in=%d valor_SELECT=%d\r\n", estado_referenciamento, estado_botao_emergencia_in, valor_SELECT);
diogonac 0:9344dd7c7e26 185 // //pc.printf("deslocamento_Z=%4f, pulsos=%d\r\n", deslocamento_Z, pulsos);
diogonac 0:9344dd7c7e26 186 //
diogonac 1:794015d244d3 187
diogonac 1:794015d244d3 188 for(i = 0; i <= sizeof(set_eixos); i++) {
diogonac 1:794015d244d3 189 set_eixos[i] = 0;
diogonac 1:794015d244d3 190 }
diogonac 1:794015d244d3 191
diogonac 1:794015d244d3 192 recebe_dados(set_eixos, 4);
diogonac 1:794015d244d3 193
diogonac 0:9344dd7c7e26 194 if(set_eixos[0] == 'R' & set_eixos[1] == 'F') {
diogonac 0:9344dd7c7e26 195
diogonac 0:9344dd7c7e26 196 pc.printf("Referenciamento \r\n");
diogonac 0:9344dd7c7e26 197
diogonac 0:9344dd7c7e26 198 contador_SELECT = 1;
diogonac 0:9344dd7c7e26 199 estado_referenciamento = false;
diogonac 0:9344dd7c7e26 200 //Permite o movimento automático do motor até atingir o fim de curso
diogonac 0:9344dd7c7e26 201 pc.printf("Estagio 1: movendo ate detectar\r\n");
diogonac 0:9344dd7c7e26 202 referenciamento();
diogonac 0:9344dd7c7e26 203
diogonac 0:9344dd7c7e26 204 } else {
diogonac 0:9344dd7c7e26 205
diogonac 0:9344dd7c7e26 206
diogonac 0:9344dd7c7e26 207 if(estado_referenciamento == true & estado_botao_emergencia_in == false) {
diogonac 0:9344dd7c7e26 208 //Condição para poder disponibilizar a função JOG
diogonac 0:9344dd7c7e26 209
diogonac 0:9344dd7c7e26 210 //Chama a rotina do JOG
diogonac 0:9344dd7c7e26 211 //recebe_dados(set_eixos, 2);
diogonac 0:9344dd7c7e26 212 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 213 rotina_JOG();
diogonac 0:9344dd7c7e26 214 pc.printf("%s \r\n", set_eixos);
diogonac 0:9344dd7c7e26 215
diogonac 0:9344dd7c7e26 216 }
diogonac 1:794015d244d3 217 //recebe_dados(set_eixos, 3);
diogonac 1:794015d244d3 218
diogonac 1:794015d244d3 219 if(set_eixos[0] == 'P') { //set_eixos = P27
diogonac 1:794015d244d3 220
diogonac 1:794015d244d3 221 //pc.printf("Pagina 4\r\n");
diogonac 1:794015d244d3 222 // pc.printf("Pega= %s\r\n", set_eixos);
diogonac 1:794015d244d3 223 //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 224
diogonac 1:794015d244d3 225 //int tmp = atoi(cstr);
diogonac 0:9344dd7c7e26 226
diogonac 1:794015d244d3 227 posicoes[0] = deslocamento_X;
diogonac 1:794015d244d3 228 posicoes[1] = deslocamento_Y;
diogonac 1:794015d244d3 229 posicoes[2] = deslocamento_Z;
diogonac 0:9344dd7c7e26 230
diogonac 1:794015d244d3 231 for(i = 1; i < 3; i++) {
diogonac 1:794015d244d3 232 tmp[i-1] = set_eixos[i];
diogonac 1:794015d244d3 233 }
diogonac 1:794015d244d3 234
diogonac 1:794015d244d3 235 quantidades[0] = atoi(tmp);
diogonac 1:794015d244d3 236
diogonac 1:794015d244d3 237 pc.printf("PosicoesX= %f, PosicoesY= %f, PosicoesZ= %f \r\n", posicoes[0], posicoes[1], posicoes[2]);
diogonac 1:794015d244d3 238 pc.printf("Quantidades_pega= %d \r\n", quantidades[0]);
diogonac 1:794015d244d3 239 pc.printf("set_eixos= %s\r\n", set_eixos);
diogonac 0:9344dd7c7e26 240
diogonac 0:9344dd7c7e26 241 }
diogonac 1:794015d244d3 242
diogonac 1:794015d244d3 243 if(set_eixos[0] == 'S') {
diogonac 1:794015d244d3 244
diogonac 1:794015d244d3 245 switch(set_eixos[1]) {
diogonac 1:794015d244d3 246
diogonac 1:794015d244d3 247 case '1':
diogonac 1:794015d244d3 248
diogonac 1:794015d244d3 249 posicoes[3] = deslocamento_X;
diogonac 1:794015d244d3 250 posicoes[4] = deslocamento_Y;
diogonac 1:794015d244d3 251 posicoes[5] = deslocamento_Z;
diogonac 1:794015d244d3 252
diogonac 1:794015d244d3 253 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 254 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 255 }
diogonac 1:794015d244d3 256
diogonac 1:794015d244d3 257 quantidades[1] = atoi(tmp);
diogonac 1:794015d244d3 258 pc.printf("PosicoesX1= %f, PosicoesY1= %f, PosicoesZ1= %f \r\n", posicoes[3], posicoes[4], posicoes[5]);
diogonac 1:794015d244d3 259 pc.printf("Quantidades_solta1= %d \r\n", quantidades[1]);
diogonac 1:794015d244d3 260
diogonac 1:794015d244d3 261 break;
diogonac 1:794015d244d3 262 case '2':
diogonac 1:794015d244d3 263
diogonac 1:794015d244d3 264 posicoes[6] = deslocamento_X;
diogonac 1:794015d244d3 265 posicoes[7] = deslocamento_Y;
diogonac 1:794015d244d3 266 posicoes[8] = deslocamento_Z;
diogonac 1:794015d244d3 267
diogonac 1:794015d244d3 268 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 269 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 270 }
diogonac 1:794015d244d3 271
diogonac 1:794015d244d3 272 quantidades[2] = atoi(tmp);
diogonac 1:794015d244d3 273 pc.printf("PosicoesX2= %f, PosicoesY2= %f, PosicoesZ2= %f \r\n", posicoes[6], posicoes[7], posicoes[8]);
diogonac 1:794015d244d3 274 pc.printf("Quantidades_solta2= %d \r\n", quantidades[2]);
diogonac 1:794015d244d3 275
diogonac 1:794015d244d3 276 break;
diogonac 1:794015d244d3 277 case '3':
diogonac 1:794015d244d3 278
diogonac 1:794015d244d3 279 posicoes[9] = deslocamento_X;
diogonac 1:794015d244d3 280 posicoes[10] = deslocamento_Y;
diogonac 1:794015d244d3 281 posicoes[11] = deslocamento_Z;
diogonac 1:794015d244d3 282
diogonac 1:794015d244d3 283 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 284 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 285 }
diogonac 1:794015d244d3 286
diogonac 1:794015d244d3 287 quantidades[3] = atoi(tmp);
diogonac 1:794015d244d3 288 pc.printf("PosicoesX3= %f, PosicoesY3= %f, PosicoesZ3= %f \r\n", posicoes[9], posicoes[10], posicoes[11]);
diogonac 1:794015d244d3 289 pc.printf("Quantidades_solta3= %d \r\n", quantidades[3]);
diogonac 1:794015d244d3 290
diogonac 1:794015d244d3 291 break;
diogonac 1:794015d244d3 292
diogonac 1:794015d244d3 293 }
diogonac 1:794015d244d3 294
diogonac 1:794015d244d3 295 case '4':
diogonac 1:794015d244d3 296
diogonac 1:794015d244d3 297 posicoes[12] = deslocamento_X;
diogonac 1:794015d244d3 298 posicoes[13] = deslocamento_Y;
diogonac 1:794015d244d3 299 posicoes[14] = deslocamento_Z;
diogonac 1:794015d244d3 300
diogonac 1:794015d244d3 301 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 302 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 303 }
diogonac 1:794015d244d3 304
diogonac 1:794015d244d3 305 quantidades[4] = atoi(tmp);
diogonac 1:794015d244d3 306 pc.printf("PosicoesX4= %f, PosicoesY4= %f, PosicoesZ4= %f \r\n", posicoes[12], posicoes[13], posicoes[14]);
diogonac 1:794015d244d3 307 pc.printf("Quantidades_solta4= %d \r\n", quantidades[4]);
diogonac 1:794015d244d3 308
diogonac 1:794015d244d3 309 break;
diogonac 1:794015d244d3 310 case '5':
diogonac 1:794015d244d3 311
diogonac 1:794015d244d3 312 posicoes[15] = deslocamento_X;
diogonac 1:794015d244d3 313 posicoes[16] = deslocamento_Y;
diogonac 1:794015d244d3 314 posicoes[17] = deslocamento_Z;
diogonac 1:794015d244d3 315
diogonac 1:794015d244d3 316 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 317 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 318 }
diogonac 1:794015d244d3 319
diogonac 1:794015d244d3 320 quantidades[5] = atoi(tmp);
diogonac 1:794015d244d3 321 pc.printf("PosicoesX5= %f, PosicoesY5= %f, PosicoesZ5= %f \r\n", posicoes[15], posicoes[16], posicoes[17]);
diogonac 1:794015d244d3 322 pc.printf("Quantidades_solta5= %d \r\n", quantidades[5]);
diogonac 1:794015d244d3 323
diogonac 1:794015d244d3 324 break;
diogonac 1:794015d244d3 325 case '6':
diogonac 1:794015d244d3 326
diogonac 1:794015d244d3 327 posicoes[18] = deslocamento_X;
diogonac 1:794015d244d3 328 posicoes[19] = deslocamento_Y;
diogonac 1:794015d244d3 329 posicoes[20] = deslocamento_Z;
diogonac 1:794015d244d3 330
diogonac 1:794015d244d3 331 for(i = 2; i < 4; i++) {
diogonac 1:794015d244d3 332 tmp[i-2] = set_eixos[i];
diogonac 1:794015d244d3 333 }
diogonac 1:794015d244d3 334
diogonac 1:794015d244d3 335 quantidades[6] = atoi(tmp);
diogonac 1:794015d244d3 336 pc.printf("PosicoesX6= %f, PosicoesY6= %f, PosicoesZ6= %f \r\n", posicoes[18], posicoes[19], posicoes[20]);
diogonac 1:794015d244d3 337 pc.printf("Quantidades_solta6= %d \r\n", quantidades[6]);
diogonac 1:794015d244d3 338
diogonac 1:794015d244d3 339 break;
diogonac 1:794015d244d3 340
diogonac 1:794015d244d3 341 }
diogonac 1:794015d244d3 342
diogonac 1:794015d244d3 343
diogonac 1:794015d244d3 344
diogonac 1:794015d244d3 345
diogonac 1:794015d244d3 346
diogonac 1:794015d244d3 347
diogonac 1:794015d244d3 348
diogonac 1:794015d244d3 349
diogonac 1:794015d244d3 350
diogonac 1:794015d244d3 351
diogonac 1:794015d244d3 352
diogonac 1:794015d244d3 353
diogonac 1:794015d244d3 354
diogonac 1:794015d244d3 355
diogonac 1:794015d244d3 356
diogonac 1:794015d244d3 357
diogonac 1:794015d244d3 358
diogonac 1:794015d244d3 359
diogonac 1:794015d244d3 360
diogonac 1:794015d244d3 361
diogonac 1:794015d244d3 362
diogonac 1:794015d244d3 363 pc.printf("set_eixos= %s\r\n", set_eixos);
diogonac 1:794015d244d3 364
diogonac 1:794015d244d3 365 }
diogonac 1:794015d244d3 366
diogonac 1:794015d244d3 367 }
diogonac 1:794015d244d3 368
diogonac 1:794015d244d3 369 if(set_eixos[0] == 'R' & set_eixos[1] == 'S') {
diogonac 1:794015d244d3 370
diogonac 1:794015d244d3 371 pc.printf("Maquina em RESET \r\n");
diogonac 1:794015d244d3 372
diogonac 1:794015d244d3 373 estado_referenciamento = false;
diogonac 1:794015d244d3 374 velocidade = 0.003;
diogonac 0:9344dd7c7e26 375 }
diogonac 0:9344dd7c7e26 376 }
diogonac 0:9344dd7c7e26 377 }
diogonac 0:9344dd7c7e26 378
diogonac 0:9344dd7c7e26 379
diogonac 0:9344dd7c7e26 380
diogonac 1:794015d244d3 381
diogonac 0:9344dd7c7e26 382 //void rotina_posicao_salva()
diogonac 0:9344dd7c7e26 383 //{
diogonac 0:9344dd7c7e26 384 //
diogonac 0:9344dd7c7e26 385 // if(debounce1.read_ms() >= 10) pegaZ = deslocamento_Z; //Salva a posição de pega
diogonac 0:9344dd7c7e26 386 // else pegaZ = 0;
diogonac 0:9344dd7c7e26 387 //
diogonac 0:9344dd7c7e26 388 // debounce1.reset();
diogonac 0:9344dd7c7e26 389 //}
diogonac 0:9344dd7c7e26 390
diogonac 0:9344dd7c7e26 391 void rotina_emergencia_in()
diogonac 0:9344dd7c7e26 392 {
diogonac 0:9344dd7c7e26 393
diogonac 1:794015d244d3 394 if(debounce2.read_ms() >= 25) {
diogonac 0:9344dd7c7e26 395
diogonac 0:9344dd7c7e26 396 motor_x = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo X
diogonac 0:9344dd7c7e26 397 motor_y = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo Y
diogonac 0:9344dd7c7e26 398 motor_z = 0x00; //Não permite que pulsos sejam enviados para o motor do eixo Z
diogonac 0:9344dd7c7e26 399
diogonac 0:9344dd7c7e26 400 estado_referenciamento = false; //Solicita um novo referenciamento
diogonac 1:794015d244d3 401 estado_botao_emergencia_in = true;
diogonac 0:9344dd7c7e26 402 contador_emergencia += 1;
diogonac 0:9344dd7c7e26 403
diogonac 0:9344dd7c7e26 404
diogonac 0:9344dd7c7e26 405 debounce2.reset();
diogonac 1:794015d244d3 406 pc.printf("contador_emergencia= %d\r\n", contador_emergencia);
diogonac 0:9344dd7c7e26 407 }
diogonac 1:794015d244d3 408
diogonac 1:794015d244d3 409
diogonac 1:794015d244d3 410 if(contador_emergencia == 1) {
diogonac 1:794015d244d3 411
diogonac 1:794015d244d3 412 recebe_arduino.printf("E1\n"); //Indica que o botão de emergência foi apertado
diogonac 1:794015d244d3 413
diogonac 1:794015d244d3 414 estado_botao_emergencia_in = false;
diogonac 1:794015d244d3 415
diogonac 1:794015d244d3 416 }
diogonac 1:794015d244d3 417
diogonac 1:794015d244d3 418
diogonac 0:9344dd7c7e26 419 }
diogonac 0:9344dd7c7e26 420
diogonac 0:9344dd7c7e26 421 void rotina_velocidade_eixo()
diogonac 0:9344dd7c7e26 422 {
diogonac 0:9344dd7c7e26 423 //Converte a leitura do Joystick para tempo de acionamento do motor
diogonac 0:9344dd7c7e26 424
diogonac 0:9344dd7c7e26 425
diogonac 0:9344dd7c7e26 426 switch(set_eixos[0]) {
diogonac 0:9344dd7c7e26 427 case '1':
diogonac 1:794015d244d3 428 tempo_acionamento = 3180; //Desloca 1mm
diogonac 0:9344dd7c7e26 429 break;
diogonac 0:9344dd7c7e26 430 case '2':
diogonac 1:794015d244d3 431 tempo_acionamento = 15924; //Desloca 5mm
diogonac 0:9344dd7c7e26 432 break;
diogonac 0:9344dd7c7e26 433 case '3':
diogonac 1:794015d244d3 434 tempo_acionamento = 47780; //Desloca 15mm
diogonac 0:9344dd7c7e26 435 break;
diogonac 0:9344dd7c7e26 436 // default:
diogonac 0:9344dd7c7e26 437 // velocidade = 0.1;
diogonac 0:9344dd7c7e26 438 }
diogonac 0:9344dd7c7e26 439
diogonac 1:794015d244d3 440 pc.printf("tempo_acionamento= %d \r\n", tempo_acionamento);
diogonac 0:9344dd7c7e26 441 // J_XYZ = joystick.read_u16();
diogonac 0:9344dd7c7e26 442 // tempo_horario = -1*J_XYZ*0.0000028 + 0.1875;
diogonac 0:9344dd7c7e26 443 // tempo_anti_horario = J_XYZ*0.000002785 + 0.0025;
diogonac 0:9344dd7c7e26 444 }
diogonac 0:9344dd7c7e26 445
diogonac 0:9344dd7c7e26 446 void rotina_velocidade_referenciamento_eixo_Z()
diogonac 0:9344dd7c7e26 447 {
diogonac 0:9344dd7c7e26 448 //Converte a leitura do Joystick para tempo de acionamento do motor
diogonac 0:9344dd7c7e26 449 J_XYZ = joystick.read_u16();
diogonac 0:9344dd7c7e26 450 tempo_horario = (-1*J_XYZ*0.0000028 + 0.1875)*2;
diogonac 0:9344dd7c7e26 451 tempo_anti_horario = (J_XYZ*0.000002785 + 0.0025)*2;
diogonac 0:9344dd7c7e26 452 }
diogonac 0:9344dd7c7e26 453
diogonac 0:9344dd7c7e26 454 void rotina_deslocamento_eixo()
diogonac 0:9344dd7c7e26 455 {
diogonac 0:9344dd7c7e26 456 //Calcula os deslocamentos no eixo Z
diogonac 0:9344dd7c7e26 457
diogonac 0:9344dd7c7e26 458 deslocamento_X = (passo_fuso*pulsos_X*passo_motor)/360;
diogonac 0:9344dd7c7e26 459 deslocamento_Y = (passo_fuso*pulsos_Y*passo_motor)/360;
diogonac 0:9344dd7c7e26 460 deslocamento_Z = (passo_fuso*pulsos_Z*passo_motor)/360;
diogonac 0:9344dd7c7e26 461
diogonac 0:9344dd7c7e26 462 recebe_arduino.printf("X%3.2f\n", deslocamento_X);
diogonac 0:9344dd7c7e26 463 recebe_arduino.printf("Y%3.2f\n", deslocamento_Y);
diogonac 0:9344dd7c7e26 464 recebe_arduino.printf("Z%3.2f\n", deslocamento_Z);
diogonac 0:9344dd7c7e26 465
diogonac 0:9344dd7c7e26 466 pc.printf("X%3.2f\n", deslocamento_X);
diogonac 0:9344dd7c7e26 467 pc.printf("Y%3.2f\n", deslocamento_Y);
diogonac 0:9344dd7c7e26 468 pc.printf("Z%3.2f\n", deslocamento_Z);
diogonac 0:9344dd7c7e26 469 }
diogonac 0:9344dd7c7e26 470
diogonac 0:9344dd7c7e26 471
diogonac 0:9344dd7c7e26 472
diogonac 0:9344dd7c7e26 473
diogonac 0:9344dd7c7e26 474 void referenciamento()
diogonac 0:9344dd7c7e26 475 {
diogonac 0:9344dd7c7e26 476
diogonac 0:9344dd7c7e26 477 while(estado_referenciamento == false & estado_botao_emergencia_in == false & contador_SELECT == 1) {//W1
diogonac 0:9344dd7c7e26 478
diogonac 0:9344dd7c7e26 479 for(i = 0; i < 4; i++) {
diogonac 0:9344dd7c7e26 480 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 481 motor_y = 1 << i;
diogonac 0:9344dd7c7e26 482 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 483 wait(0.003);
diogonac 0:9344dd7c7e26 484 }
diogonac 0:9344dd7c7e26 485
diogonac 0:9344dd7c7e26 486 if(contador_rise == 1) {//if1
diogonac 0:9344dd7c7e26 487
diogonac 0:9344dd7c7e26 488 while(estado_referenciamento == false & estado_botao_emergencia_in == false & contador_rise == 1) {//W2
diogonac 0:9344dd7c7e26 489
diogonac 0:9344dd7c7e26 490 for(i = 3; i > -1; i--) {
diogonac 0:9344dd7c7e26 491 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 492 motor_y = 1 << i;
diogonac 0:9344dd7c7e26 493 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 494 wait(0.003);
diogonac 0:9344dd7c7e26 495
diogonac 0:9344dd7c7e26 496 }
diogonac 0:9344dd7c7e26 497
diogonac 0:9344dd7c7e26 498 if(contador_rise == 2) {//if2
diogonac 0:9344dd7c7e26 499
diogonac 0:9344dd7c7e26 500 while(estado_referenciamento == false & estado_botao_emergencia_in == false & contador_rise == 2) {//W3
diogonac 0:9344dd7c7e26 501
diogonac 0:9344dd7c7e26 502 for(i = 0; i < 4; i++) {
diogonac 0:9344dd7c7e26 503 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 504 motor_y = 1 << i;
diogonac 0:9344dd7c7e26 505 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 506 wait(0.003);
diogonac 0:9344dd7c7e26 507 }
diogonac 0:9344dd7c7e26 508
diogonac 0:9344dd7c7e26 509 if(contador_rise == 3) {//if3
diogonac 0:9344dd7c7e26 510
diogonac 0:9344dd7c7e26 511 while(seguranca_fdc != 8 & estado_referenciamento == false & estado_botao_emergencia_in == false & contador_rise == 3) {//W4
diogonac 0:9344dd7c7e26 512 for(i = 3; i > -1; i--) {
diogonac 0:9344dd7c7e26 513 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 514 motor_y = 1 << i;
diogonac 0:9344dd7c7e26 515 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 516 wait(0.003);
diogonac 0:9344dd7c7e26 517
diogonac 0:9344dd7c7e26 518 }
diogonac 0:9344dd7c7e26 519 seguranca_fdc += 1;
diogonac 0:9344dd7c7e26 520
diogonac 0:9344dd7c7e26 521 }//Fecha W4
diogonac 0:9344dd7c7e26 522
diogonac 0:9344dd7c7e26 523 estado_referenciamento = true;
diogonac 0:9344dd7c7e26 524 contador_SELECT = 0;
diogonac 0:9344dd7c7e26 525 contador_rise = 0;
diogonac 0:9344dd7c7e26 526 seguranca_fdc = 0;
diogonac 0:9344dd7c7e26 527
diogonac 0:9344dd7c7e26 528 deslocamento_X = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 529 deslocamento_Y = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 530 deslocamento_Z = 0; //Define o deslocamento linear total
diogonac 0:9344dd7c7e26 531 pulsos_X = 0;
diogonac 0:9344dd7c7e26 532 pulsos_Y = 0;
diogonac 0:9344dd7c7e26 533 pulsos_Z = 0;
diogonac 1:794015d244d3 534 deslocamento_max_X = 100; //Define o deslocamento linear total
diogonac 1:794015d244d3 535 deslocamento_max_Y = 100; //Define o deslocamento linear total
diogonac 1:794015d244d3 536 deslocamento_max_Z = 100; //Define o deslocamento linear total
diogonac 1:794015d244d3 537 tempo_acionamento = 3180;
diogonac 1:794015d244d3 538 velocidade = 0.003;
diogonac 1:794015d244d3 539
diogonac 0:9344dd7c7e26 540 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 541
diogonac 0:9344dd7c7e26 542 recebe_arduino.printf("D\n"); //Done referenciamento
diogonac 0:9344dd7c7e26 543
diogonac 0:9344dd7c7e26 544 }//Fecha if3
diogonac 0:9344dd7c7e26 545 }//Fecha W3
diogonac 0:9344dd7c7e26 546
diogonac 0:9344dd7c7e26 547 }//Fecha if2
diogonac 0:9344dd7c7e26 548 }//Fecha W2
diogonac 0:9344dd7c7e26 549 }//Fecha if1
diogonac 0:9344dd7c7e26 550 }//Fecha W1
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 }//Fecha funcao
diogonac 0:9344dd7c7e26 555
diogonac 0:9344dd7c7e26 556
diogonac 0:9344dd7c7e26 557 void rotina_fdc_rise()
diogonac 0:9344dd7c7e26 558 {
diogonac 0:9344dd7c7e26 559 if(debounce3.read_ms() >= 50 & estado_botao_emergencia_in == false & estado_referenciamento == false & contador_SELECT == 1) {
diogonac 0:9344dd7c7e26 560 contador_rise += 1;
diogonac 0:9344dd7c7e26 561 pc.printf("contador_rise=%d\n", contador_rise);
diogonac 0:9344dd7c7e26 562 debounce3.reset();
diogonac 0:9344dd7c7e26 563 }
diogonac 0:9344dd7c7e26 564 }
diogonac 0:9344dd7c7e26 565
diogonac 0:9344dd7c7e26 566 void rotina_JOG()
diogonac 0:9344dd7c7e26 567 {
diogonac 0:9344dd7c7e26 568 if(sizeof(set_eixos) == 0) {
diogonac 0:9344dd7c7e26 569 motor_x = 0x00;
diogonac 0:9344dd7c7e26 570 motor_y = 0x00;
diogonac 0:9344dd7c7e26 571 motor_z = 0x00;
diogonac 0:9344dd7c7e26 572 }
diogonac 0:9344dd7c7e26 573
diogonac 0:9344dd7c7e26 574 else {
diogonac 0:9344dd7c7e26 575 //============== Movimenta Eixo Y ======================================
diogonac 0:9344dd7c7e26 576
diogonac 1:794015d244d3 577 if (set_eixos[0] == '-' & set_eixos[1] == 'Y') {
diogonac 1:794015d244d3 578 tempo_motor.start();
diogonac 1:794015d244d3 579 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_Y > 0 & pulsos_Y >= 0) {
diogonac 0:9344dd7c7e26 580 for(i = 0; i < 4; i++) {
diogonac 0:9344dd7c7e26 581 motor_y = 1 << i;
diogonac 0:9344dd7c7e26 582 pulsos_Y-=1;
diogonac 0:9344dd7c7e26 583 wait(velocidade);
diogonac 0:9344dd7c7e26 584 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 585 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 586
diogonac 0:9344dd7c7e26 587 }
diogonac 0:9344dd7c7e26 588 }
diogonac 1:794015d244d3 589 tempo_motor.reset();
diogonac 1:794015d244d3 590 tempo_motor.stop();
diogonac 0:9344dd7c7e26 591 }
diogonac 0:9344dd7c7e26 592
diogonac 1:794015d244d3 593 if(set_eixos[0] == '+' & set_eixos[1] == 'Y') {
diogonac 1:794015d244d3 594 tempo_motor.start();
diogonac 1:794015d244d3 595 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_max_Y > deslocamento_Y & pulsos_Y >= 0) {
diogonac 1:794015d244d3 596 for(i = 3; i > -1; i--) {
diogonac 1:794015d244d3 597 motor_y = 1 << i;
diogonac 1:794015d244d3 598 pulsos_Y+=1;
diogonac 1:794015d244d3 599 wait(velocidade);
diogonac 1:794015d244d3 600 rotina_velocidade_eixo();
diogonac 1:794015d244d3 601 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 602
diogonac 1:794015d244d3 603 }
diogonac 0:9344dd7c7e26 604 }
diogonac 1:794015d244d3 605 tempo_motor.reset();
diogonac 1:794015d244d3 606 tempo_motor.stop();
diogonac 0:9344dd7c7e26 607 }
diogonac 0:9344dd7c7e26 608
diogonac 0:9344dd7c7e26 609 //============== Movimenta Eixo X ======================================
diogonac 0:9344dd7c7e26 610
diogonac 0:9344dd7c7e26 611 if (set_eixos[0] == '-' & set_eixos[1] == 'X') {
diogonac 0:9344dd7c7e26 612 tempo_motor.start();
diogonac 1:794015d244d3 613 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_X > 0 & pulsos_X >= 0) {
diogonac 0:9344dd7c7e26 614 for(i = 0; i < 4; i++) {
diogonac 0:9344dd7c7e26 615 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 616 pulsos_X-=1;
diogonac 0:9344dd7c7e26 617 wait(velocidade);
diogonac 0:9344dd7c7e26 618 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 619 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 620
diogonac 0:9344dd7c7e26 621 }
diogonac 0:9344dd7c7e26 622 }
diogonac 0:9344dd7c7e26 623 tempo_motor.reset();
diogonac 0:9344dd7c7e26 624 tempo_motor.stop();
diogonac 0:9344dd7c7e26 625 }
diogonac 0:9344dd7c7e26 626
diogonac 0:9344dd7c7e26 627 if(set_eixos[0] == '+' & set_eixos[1] == 'X') {
diogonac 0:9344dd7c7e26 628 tempo_motor.start();
diogonac 1:794015d244d3 629 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_max_X > deslocamento_X & pulsos_X >= 0) {
diogonac 0:9344dd7c7e26 630 for(i = 3; i > -1; i--) {
diogonac 0:9344dd7c7e26 631 motor_x = 1 << i;
diogonac 0:9344dd7c7e26 632 pulsos_X+=1;
diogonac 0:9344dd7c7e26 633 wait(velocidade);
diogonac 0:9344dd7c7e26 634 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 635 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 636
diogonac 0:9344dd7c7e26 637 }
diogonac 0:9344dd7c7e26 638 }
diogonac 0:9344dd7c7e26 639 tempo_motor.reset();
diogonac 0:9344dd7c7e26 640 tempo_motor.stop();
diogonac 0:9344dd7c7e26 641 }
diogonac 0:9344dd7c7e26 642
diogonac 0:9344dd7c7e26 643
diogonac 0:9344dd7c7e26 644 //============== Movimenta Eixo Z ======================================
diogonac 0:9344dd7c7e26 645
diogonac 0:9344dd7c7e26 646 if (set_eixos[0] == '-' & set_eixos[1] == 'Z') {
diogonac 0:9344dd7c7e26 647 tempo_motor.start();
diogonac 1:794015d244d3 648 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_Z > 0 & pulsos_Z >= 0) {
diogonac 0:9344dd7c7e26 649 for(i = 0; i < 4; i++) {
diogonac 0:9344dd7c7e26 650 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 651 pulsos_Z-=1;
diogonac 0:9344dd7c7e26 652 wait(velocidade);
diogonac 0:9344dd7c7e26 653 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 654 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 655
diogonac 0:9344dd7c7e26 656 }
diogonac 0:9344dd7c7e26 657 }
diogonac 0:9344dd7c7e26 658 tempo_motor.reset();
diogonac 0:9344dd7c7e26 659 tempo_motor.stop();
diogonac 0:9344dd7c7e26 660 }
diogonac 0:9344dd7c7e26 661
diogonac 0:9344dd7c7e26 662 if(set_eixos[0] == '+' & set_eixos[1] == 'Z') {
diogonac 0:9344dd7c7e26 663 tempo_motor.start();
diogonac 1:794015d244d3 664 while(tempo_motor.read_ms() <= tempo_acionamento & deslocamento_max_Z > deslocamento_Z & pulsos_Z >= 0) {
diogonac 0:9344dd7c7e26 665 for(i = 3; i > -1; i--) {
diogonac 0:9344dd7c7e26 666 motor_z = 1 << i;
diogonac 0:9344dd7c7e26 667 pulsos_Z+=1;
diogonac 0:9344dd7c7e26 668 wait(velocidade);
diogonac 0:9344dd7c7e26 669 rotina_velocidade_eixo();
diogonac 0:9344dd7c7e26 670 rotina_deslocamento_eixo();
diogonac 0:9344dd7c7e26 671
diogonac 0:9344dd7c7e26 672 }
diogonac 0:9344dd7c7e26 673 }
diogonac 0:9344dd7c7e26 674 tempo_motor.reset();
diogonac 0:9344dd7c7e26 675 tempo_motor.stop();
diogonac 0:9344dd7c7e26 676 }
diogonac 0:9344dd7c7e26 677
diogonac 0:9344dd7c7e26 678 motor_x = 0x00;
diogonac 0:9344dd7c7e26 679 motor_y = 0x00;
diogonac 0:9344dd7c7e26 680 motor_z = 0x00;
diogonac 0:9344dd7c7e26 681 }
diogonac 0:9344dd7c7e26 682 }
diogonac 0:9344dd7c7e26 683
diogonac 0:9344dd7c7e26 684 void recebe_dados(unsigned char *data_buf, int numchar)
diogonac 0:9344dd7c7e26 685 {
diogonac 0:9344dd7c7e26 686 int count=0;
diogonac 0:9344dd7c7e26 687 if(numchar == 0) {
diogonac 0:9344dd7c7e26 688 numchar = sizeof(data_buf);
diogonac 0:9344dd7c7e26 689 }
diogonac 0:9344dd7c7e26 690
diogonac 0:9344dd7c7e26 691 while(numchar!=count) {
diogonac 0:9344dd7c7e26 692 if(recebe_arduino.readable()) {
diogonac 0:9344dd7c7e26 693 *data_buf = recebe_arduino.getc();
diogonac 0:9344dd7c7e26 694 data_buf+=1;
diogonac 0:9344dd7c7e26 695 count++;
diogonac 0:9344dd7c7e26 696 }
diogonac 0:9344dd7c7e26 697 }
diogonac 0:9344dd7c7e26 698 }