Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
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;
}
}
}