LCD

Dependencies:   mbed TextLCD

IHM.cpp

Committer:
diogonac
Date:
2021-05-20
Revision:
6:0320c521b9e0
Parent:
5:5e0059e59cb2

File content as of revision 6:0320c521b9e0:

#include "mbed.h"
#include "TextLCD.h"

TextLCD lcd(D8, D9, D4, D5, D6, D7); // rs, e, d4-d7
Serial pc (USBTX, USBRX);
AnalogIn eixo_Z(PC_2);
AnalogIn botao_SELECT(A0);
InterruptIn posicao_salva(PA_15);
InterruptIn botao_emergencia(PC_4);
DigitalIn botao_indicador_fonte_externa(PC_10);

BusOut motor_z(PB_1, PB_15, PB_14, PB_13);
float tempo_horario, tempo_anti_horario; //Segundos
int pulsos_horario, pulsos_anti_horario;
int i;
int J_Z;
float deslocamento_horario_Z, deslocamento_anti_horario_Z, deslocamento_total_Z;
float velocidade_Z;
float passo_motor = 18;//5.625/32;
int passo_fuso = 5;
int pegaZ;
int posicao_salva_estado, botao_emergencia_estado;
int fonte_externa;
int SELECT, valor_SELECT;

void rotina_posicao_salva(void);
void rotina_emergencia(void);
void rotida_velocidade_eixo_Z(void);
void rotida_deslocamento_eixo_Z (void);
void rotida_aciona_motor (void);
void rotida_botoes_IHM (void);


int main()
{

    pc.baud(115200);
    motor_z = 0x00;
    posicao_salva.rise(&rotina_posicao_salva);
    botao_emergencia.rise(&rotina_emergencia);
    lcd.locate(0,0);
    lcd.printf("PosicaoZ:");


    while(1) {

        posicao_salva_estado = posicao_salva.read();
        botao_emergencia_estado = botao_emergencia.read();
        J_Z = eixo_Z.read_u16();
        fonte_externa = botao_indicador_fonte_externa.read();
        SELECT = botao_SELECT.read_u16();
        rotida_botoes_IHM();
        
        pc.printf("Select=%d\r\n", valor_SELECT);
        //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);

        if(fonte_externa == 0) {
            lcd.locate(0,1);
            lcd.printf("%4fmm",deslocamento_total_Z);
//            pc.printf("Fonte=%d\r\n", fonte_externa);
            rotida_aciona_motor();

        }
    }
}


void rotina_posicao_salva()
{
    if(posicao_salva_estado == 0) pegaZ = J_Z;
    else pegaZ = 0;
}

void rotina_emergencia()
{
    if(botao_emergencia_estado == 0) motor_z = 0x00;
}

void rotida_velocidade_eixo_Z()
{
    tempo_horario = -1*J_Z*0.0000028 +0.1875;
    tempo_anti_horario = J_Z*0.000002785 +0.0025;
}

void rotida_deslocamento_eixo_Z()
{
    deslocamento_horario_Z = (passo_fuso*pulsos_horario*passo_motor)/360;
    deslocamento_anti_horario_Z = (passo_fuso*pulsos_anti_horario*passo_motor)/360;
    deslocamento_total_Z = deslocamento_anti_horario_Z - deslocamento_horario_Z;
}

void rotida_botoes_IHM()
{

    if(SELECT > 60000 & SELECT < 65000) valor_SELECT = 1;
    else valor_SELECT = 0;


}


void rotida_aciona_motor()
{

    if(31000 <= J_Z &  J_Z <= 35000) {

        motor_z = 0x00;

    } else {
        if (J_Z > 31000) {
            for(i = 0; i < 4; i++) {
                motor_z = 1 << i;
                rotida_velocidade_eixo_Z();
                rotida_deslocamento_eixo_Z();
                wait(tempo_horario);
                pulsos_horario+=1;
                velocidade_Z = deslocamento_horario_Z/tempo_horario;

            }
        }

        if(J_Z < 35000) {
            for(i = 3; i > -1; i--) {
                motor_z = 1 << i;
                rotida_velocidade_eixo_Z();
                rotida_deslocamento_eixo_Z();
                wait(tempo_anti_horario);
                pulsos_anti_horario+=1;
                velocidade_Z = deslocamento_horario_Z/tempo_horario;

            }
        }
    }


}