Dependencies:   mbed TextLCD

Committer:
diogonac
Date:
Thu May 20 18:59:02 2021 +0000
Revision:
1:e8be78899409
Parent:
0:7049aa99ce41
Child:
2:3eb5c816d496
Melhorias no codigo e na logica do referenciamento com a rotina de emergencia

Who changed what in which revision?

UserRevisionLine numberNew contents of line
diogonac 0:7049aa99ce41 1 #include "mbed.h"
diogonac 0:7049aa99ce41 2 #include "TextLCD.h"
diogonac 0:7049aa99ce41 3
diogonac 1:e8be78899409 4 TextLCD lcd(D8, D9, D4, D5, D6, D7); //Comunicação com LCD
diogonac 1:e8be78899409 5 Serial pc (D1, D0); //Comunicação com USB
diogonac 1:e8be78899409 6 AnalogIn eixo_Z(PC_2); //Joystick eixo Z
diogonac 1:e8be78899409 7 AnalogIn botao_SELECT(A0); //Botão SELECT da IHM
diogonac 1:e8be78899409 8 InterruptIn posicao_salva(PA_15); //Botão de salva posição Joystick
diogonac 1:e8be78899409 9 InterruptIn botao_emergencia(PA_14); //Botão de emergência
diogonac 1:e8be78899409 10 InterruptIn botao_fim_curso(PC_12); //Chave de fim de curso
diogonac 1:e8be78899409 11 DigitalIn botao_indicador_fonte_externa(PC_10); //Indica se os componentes dependentes da fonte externa estão energizados
diogonac 0:7049aa99ce41 12
diogonac 1:e8be78899409 13 BusOut motor_z(PB_1, PB_15, PB_14, PB_13); //Pinos para acionamento do motor
diogonac 1:e8be78899409 14 Timer debounce1;
diogonac 1:e8be78899409 15 Timer debounce2;
diogonac 1:e8be78899409 16 Timer debounce3;
diogonac 1:e8be78899409 17 Timer debounce4;
diogonac 1:e8be78899409 18
diogonac 0:7049aa99ce41 19 float tempo_horario, tempo_anti_horario; //Segundos
diogonac 0:7049aa99ce41 20 int pulsos_horario, pulsos_anti_horario;
diogonac 0:7049aa99ce41 21 int i;
diogonac 0:7049aa99ce41 22 int J_Z;
diogonac 0:7049aa99ce41 23 float deslocamento_horario_Z, deslocamento_anti_horario_Z, deslocamento_total_Z;
diogonac 0:7049aa99ce41 24 float velocidade_Z;
diogonac 0:7049aa99ce41 25 float passo_motor = 18;//5.625/32;
diogonac 0:7049aa99ce41 26 int passo_fuso = 5;
diogonac 0:7049aa99ce41 27 int pegaZ;
diogonac 1:e8be78899409 28 int posicao_salva_estado;
diogonac 0:7049aa99ce41 29 int fonte_externa;
diogonac 1:e8be78899409 30 int SELECT;
diogonac 1:e8be78899409 31 int contador_SELECT = 0;
diogonac 1:e8be78899409 32 bool valor_SELECT = false;
diogonac 1:e8be78899409 33 bool estado_referenciamento = false;
diogonac 1:e8be78899409 34 bool estodo_botao_emergencia = false;
diogonac 0:7049aa99ce41 35 void rotina_posicao_salva(void);
diogonac 0:7049aa99ce41 36 void rotina_emergencia(void);
diogonac 1:e8be78899409 37 void rotina_velocidade_eixo_Z(void);
diogonac 1:e8be78899409 38 void rotina_deslocamento_eixo_Z (void);
diogonac 1:e8be78899409 39 void rotina_JOG_Z (void);
diogonac 1:e8be78899409 40 void rotina_botoes_IHM (void);
diogonac 1:e8be78899409 41 void rotina_referenciamento (void);
diogonac 1:e8be78899409 42 void rotina_aciona_motor (void);
diogonac 0:7049aa99ce41 43
diogonac 0:7049aa99ce41 44
diogonac 0:7049aa99ce41 45 int main()
diogonac 0:7049aa99ce41 46 {
diogonac 0:7049aa99ce41 47
diogonac 0:7049aa99ce41 48 pc.baud(115200);
diogonac 0:7049aa99ce41 49 motor_z = 0x00;
diogonac 0:7049aa99ce41 50 posicao_salva.rise(&rotina_posicao_salva);
diogonac 1:e8be78899409 51 botao_emergencia.fall(&rotina_emergencia);
diogonac 1:e8be78899409 52 botao_fim_curso.rise(&rotina_referenciamento);
diogonac 1:e8be78899409 53 wait_ms(500);
diogonac 1:e8be78899409 54 lcd.locate(2,0);
diogonac 1:e8be78899409 55 lcd.printf("SELECT para");
diogonac 1:e8be78899409 56 lcd.locate(0,1);
diogonac 1:e8be78899409 57 lcd.printf("referenciamento");
diogonac 0:7049aa99ce41 58
diogonac 0:7049aa99ce41 59 while(1) {
diogonac 0:7049aa99ce41 60
diogonac 0:7049aa99ce41 61 J_Z = eixo_Z.read_u16();
diogonac 0:7049aa99ce41 62 fonte_externa = botao_indicador_fonte_externa.read();
diogonac 1:e8be78899409 63 SELECT = botao_SELECT.read_u16();
diogonac 0:7049aa99ce41 64
diogonac 1:e8be78899409 65 // pc.printf("PosicaoZ=%4f,Posicao_Salva=%d\r\n", deslocamento_total_Z, pegaZ);
diogonac 1:e8be78899409 66 // pc.printf("Z=%4d, PegaZ=%4d, Posicao_salva_estado=%d, Botao_emergencia_estado=%d, Tempo1=%4f, Tempo2=%4f, Pulsos=%d, Deslocamento_Z=%f, Velocidade_Z=%f\r\n", J_Z, pegaZ, posicao_salva_estado, botao_emergencia_estado, tempo_horario, tempo_anti_horario, pulsos_anti_horario, deslocamento_total_Z, velocidade_Z);
diogonac 1:e8be78899409 67 pc.printf("estado_referenciamento=%d\r\n", estado_referenciamento);
diogonac 1:e8be78899409 68 if(fonte_externa == 0 & estado_referenciamento == true & estodo_botao_emergencia == false) {
diogonac 1:e8be78899409 69 lcd.locate(2,0);
diogonac 1:e8be78899409 70 lcd.printf("PosicaoZ:");
diogonac 0:7049aa99ce41 71 lcd.locate(0,1);
diogonac 0:7049aa99ce41 72 lcd.printf("%4fmm",deslocamento_total_Z);
diogonac 1:e8be78899409 73 // pc.printf("Fonte=%d\r\n", fonte_externa);
diogonac 1:e8be78899409 74 rotina_JOG_Z();
diogonac 0:7049aa99ce41 75
diogonac 1:e8be78899409 76 } else {
diogonac 1:e8be78899409 77 rotina_botoes_IHM();
diogonac 1:e8be78899409 78 if(valor_SELECT == 1) {
diogonac 1:e8be78899409 79 contador_SELECT = 1;
diogonac 1:e8be78899409 80 lcd.cls();
diogonac 1:e8be78899409 81 lcd.locate(2,0);
diogonac 1:e8be78899409 82 lcd.printf("Iniciando");
diogonac 1:e8be78899409 83 lcd.locate(0,1);
diogonac 1:e8be78899409 84 lcd.printf("referenciamento");
diogonac 1:e8be78899409 85 //rotina_referenciamento();
diogonac 1:e8be78899409 86 pc.printf("estado_referenciamento=%d\r\n", estado_referenciamento);
diogonac 1:e8be78899409 87 }
diogonac 0:7049aa99ce41 88 }
diogonac 0:7049aa99ce41 89 }
diogonac 0:7049aa99ce41 90 }
diogonac 0:7049aa99ce41 91
diogonac 0:7049aa99ce41 92
diogonac 0:7049aa99ce41 93 void rotina_posicao_salva()
diogonac 0:7049aa99ce41 94 {
diogonac 1:e8be78899409 95 debounce1.start();
diogonac 1:e8be78899409 96 if(debounce1.read_ms() >= 10) pegaZ = deslocamento_total_Z;
diogonac 0:7049aa99ce41 97 else pegaZ = 0;
diogonac 1:e8be78899409 98 debounce1.reset();
diogonac 0:7049aa99ce41 99 }
diogonac 0:7049aa99ce41 100
diogonac 0:7049aa99ce41 101 void rotina_emergencia()
diogonac 0:7049aa99ce41 102 {
diogonac 1:e8be78899409 103 debounce2.start();
diogonac 1:e8be78899409 104 if(debounce2.read_ms() >= 10) {
diogonac 1:e8be78899409 105
diogonac 1:e8be78899409 106 motor_z = 0x00;
diogonac 1:e8be78899409 107 estado_referenciamento = false;
diogonac 1:e8be78899409 108 estodo_botao_emergencia = true;
diogonac 1:e8be78899409 109
diogonac 1:e8be78899409 110
diogonac 1:e8be78899409 111 pc.printf("Rotina de emergencia \r\n");
diogonac 1:e8be78899409 112 }
diogonac 1:e8be78899409 113 debounce2.reset();
diogonac 0:7049aa99ce41 114 }
diogonac 0:7049aa99ce41 115
diogonac 1:e8be78899409 116 void rotina_velocidade_eixo_Z()
diogonac 0:7049aa99ce41 117 {
diogonac 0:7049aa99ce41 118 tempo_horario = -1*J_Z*0.0000028 +0.1875;
diogonac 0:7049aa99ce41 119 tempo_anti_horario = J_Z*0.000002785 +0.0025;
diogonac 0:7049aa99ce41 120 }
diogonac 0:7049aa99ce41 121
diogonac 1:e8be78899409 122 void rotina_deslocamento_eixo_Z()
diogonac 0:7049aa99ce41 123 {
diogonac 0:7049aa99ce41 124 deslocamento_horario_Z = (passo_fuso*pulsos_horario*passo_motor)/360;
diogonac 0:7049aa99ce41 125 deslocamento_anti_horario_Z = (passo_fuso*pulsos_anti_horario*passo_motor)/360;
diogonac 0:7049aa99ce41 126 deslocamento_total_Z = deslocamento_anti_horario_Z - deslocamento_horario_Z;
diogonac 0:7049aa99ce41 127 }
diogonac 0:7049aa99ce41 128
diogonac 1:e8be78899409 129 void rotina_botoes_IHM()
diogonac 1:e8be78899409 130 {
diogonac 1:e8be78899409 131 if(SELECT > 60000 & SELECT < 65000) valor_SELECT =! valor_SELECT;
diogonac 1:e8be78899409 132 else valor_SELECT = 0;
diogonac 1:e8be78899409 133 }
diogonac 1:e8be78899409 134
diogonac 1:e8be78899409 135 void rotina_referenciamento()
diogonac 1:e8be78899409 136 {
diogonac 1:e8be78899409 137
diogonac 1:e8be78899409 138 debounce3.start();
diogonac 1:e8be78899409 139 if(debounce3.read_ms() >= 10 & contador_SELECT == 1) {
diogonac 1:e8be78899409 140 estado_referenciamento =! estado_referenciamento;
diogonac 1:e8be78899409 141 lcd.cls();
diogonac 1:e8be78899409 142 wait_ms(50);
diogonac 1:e8be78899409 143 lcd.locate(2,0);
diogonac 1:e8be78899409 144 lcd.printf("Detectado");
diogonac 1:e8be78899409 145 wait_ms(1500);
diogonac 1:e8be78899409 146 lcd.cls();
diogonac 1:e8be78899409 147 contador_SELECT = 0;
diogonac 1:e8be78899409 148 }
diogonac 1:e8be78899409 149 debounce3.reset();
diogonac 1:e8be78899409 150
diogonac 1:e8be78899409 151
diogonac 1:e8be78899409 152 }
diogonac 1:e8be78899409 153
diogonac 1:e8be78899409 154
diogonac 1:e8be78899409 155 void rotina_aciona_motor_horario()
diogonac 1:e8be78899409 156 {
diogonac 1:e8be78899409 157
diogonac 1:e8be78899409 158
diogonac 1:e8be78899409 159
diogonac 1:e8be78899409 160
diogonac 1:e8be78899409 161 }
diogonac 1:e8be78899409 162
diogonac 1:e8be78899409 163
diogonac 1:e8be78899409 164 void rotina_JOG_Z()
diogonac 0:7049aa99ce41 165 {
diogonac 0:7049aa99ce41 166
diogonac 0:7049aa99ce41 167 if(31000 <= J_Z & J_Z <= 35000) {
diogonac 0:7049aa99ce41 168
diogonac 0:7049aa99ce41 169 motor_z = 0x00;
diogonac 0:7049aa99ce41 170
diogonac 0:7049aa99ce41 171 } else {
diogonac 0:7049aa99ce41 172 if (J_Z > 31000) {
diogonac 0:7049aa99ce41 173 for(i = 0; i < 4; i++) {
diogonac 0:7049aa99ce41 174 motor_z = 1 << i;
diogonac 1:e8be78899409 175 rotina_velocidade_eixo_Z();
diogonac 1:e8be78899409 176 rotina_deslocamento_eixo_Z();
diogonac 0:7049aa99ce41 177 wait(tempo_horario);
diogonac 0:7049aa99ce41 178 pulsos_horario+=1;
diogonac 0:7049aa99ce41 179
diogonac 0:7049aa99ce41 180 }
diogonac 0:7049aa99ce41 181 }
diogonac 0:7049aa99ce41 182
diogonac 0:7049aa99ce41 183 if(J_Z < 35000) {
diogonac 0:7049aa99ce41 184 for(i = 3; i > -1; i--) {
diogonac 0:7049aa99ce41 185 motor_z = 1 << i;
diogonac 1:e8be78899409 186 rotina_velocidade_eixo_Z();
diogonac 1:e8be78899409 187 rotina_deslocamento_eixo_Z();
diogonac 0:7049aa99ce41 188 wait(tempo_anti_horario);
diogonac 0:7049aa99ce41 189 pulsos_anti_horario+=1;
diogonac 0:7049aa99ce41 190
diogonac 0:7049aa99ce41 191 }
diogonac 0:7049aa99ce41 192 }
diogonac 0:7049aa99ce41 193 }
diogonac 0:7049aa99ce41 194
diogonac 0:7049aa99ce41 195
diogonac 0:7049aa99ce41 196 }