Fernando Sakabe / Mbed 2 deprecated Projeto_CCM

Dependencies:   mbed

main.cpp

Committer:
fernandosakabe
Date:
2022-10-31
Revision:
0:cc81b0dd1ded
Child:
1:a5accbc79c11

File content as of revision 0:cc81b0dd1ded:

#include "mbed.h" //Incluea biblioteca mbed

//define quais pinos serão para acionar a IHM
DigitalOut EN_A (D2);
DigitalOut IN1_A (D5);
DigitalOut IN2_A (D4);
DigitalOut EN_B (A4);
DigitalOut IN1_B (A0);
DigitalOut IN2_B (A1);


InterruptIn interr(D8); //Define o InterruptIn para identificar os sinais da onda quadrada
DigitalIn enable (D12); //Botão que liga e desliga projeto
InterruptIn push(PC_13); //Botão de usuário que muda a direção do motor
float periodo_seg = 2.0; //Quantidade de tempo em que se define a frequência do motor
float frequencia = 0; //Frequência do motor
float Tempo; //Periodo da onda
int contador=0; //Conta a quantidadde de pulsos no periodo_seg
Ticker tempo_alto;//Aciona função de calcula_frequencia (calcula a frequencia)
int horario = 0; //Determina o sentido de rotação do motor em horário ou anti-horário

void muda_direcao() //Função que faz com que o sentido mude de horario para anti-horario e vice e versa
{
    if(horario==1) {
        horario=0;
    } else {
        horario=1;
    }
}
void alto() //Função que conta quantas vezes o InterruptIn foi acionado.
{
    contador++;
}

void calcula_frequencia() //Função que calcula a frequencia
{
    frequencia=contador/periodo_seg;
    contador=0;
}

int main()

{
    push.rise(&muda_direcao); //ativa a funcao muda direção quando obotão de usuário é acionado
    interr.rise(&alto); //Ativa a função alto quando há um rise nas ondas
    tempo_alto.attach(&calcula_frequencia, periodo_seg); //Ativa a funcao calcula a cada passagem de periodo

    EN_A = 0; // Desliga Ponte-H (A)
    EN_B = 0; // Desliga Ponte-H (B)
    IN1_A = 0;
    IN2_A = 0; // Ponte-H (A) Motor 'travado'
    IN1_A = 0;
    IN1_B = 0; // Ponte-H (B) Motor 'travado’

    while(1) {
        Tempo = 1/frequencia; //calcula periodo a partir da frequencia
        printf("TEMPO = %f FREQUENCIA = %f \n\r", Tempo, frequencia);
        //Se o botão enable estiver acionado, liga o sistema
        if(enable) {
            //Define se o motor rotacionará no sentido horario ou anit-horario
            switch(horario) {
                case 0:

                //passo 0

                    EN_A = 1;
                    IN1_A = 1;
                    IN2_A = 0;
                    EN_B = 1;
                    IN1_B = 1;
                    IN2_B = 0;
                    wait(Tempo); //periodo definido anteriormente

                //passo 1

                    EN_A = 1;
                    IN1_A = 0;
                    IN2_A = 1;
                    EN_B = 1;
                    IN1_B = 1;
                    IN2_B = 0;
                    wait(Tempo); //periodo definido anteriormente

                //passo 2 

                    EN_A = 1;
                    IN1_A = 0;
                    IN2_A = 1;
                    EN_B =1 ;
                    IN1_B = 0;
                    IN2_B = 1;
                    wait(Tempo); //periodo definido anteriormente

                //passo 3

                    EN_A = 1;
                    IN1_A = 1;
                    IN2_A = 0;
                    EN_B = 1;
                    IN1_B = 0;
                    IN2_B = 1;
                    wait(Tempo); //periodo definido anteriormente

                    break;

                case 1:

                //passo 3

                    EN_A = 1;
                    IN1_A = 1;
                    IN2_A = 0;
                    EN_B = 1;
                    IN1_B = 0;
                    IN2_B = 1;
                    wait(Tempo); //periodo definido anteriormente

                //passo 2

                    EN_A = 1;
                    IN1_A = 0;
                    IN2_A = 1;
                    EN_B = 1;
                    IN1_B = 0;
                    IN2_B = 1;
                    wait(Tempo); //periodo definido anteriormente

                //passo 1

                    EN_A = 1;
                    IN1_A = 0;
                    IN2_A = 1;
                    EN_B = 1;
                    IN1_B = 1;
                    IN2_B = 0;
                    wait(Tempo); //periodo definido anteriormente

                //passo 0

                    EN_A = 1;
                    IN1_A = 1;
                    IN2_A = 0;
                    EN_B = 1;
                    IN1_B = 1;
                    IN2_B = 0;
                    wait(Tempo); //periodo definido anteriormente

                    break;

            }

        } else {
            //se botão enable desativado, desativa o EN_A e EN_B
            EN_A=0;
            EN_B=0;

        }
    }
}