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.
Diff: main.cpp
- Revision:
- 0:cc81b0dd1ded
- Child:
- 1:a5accbc79c11
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Oct 31 02:41:59 2022 +0000
@@ -0,0 +1,159 @@
+#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;
+
+ }
+ }
+}