Fernando Sakabe / Mbed 2 deprecated Projeto_CCM

Dependencies:   mbed

Committer:
fernandosakabe
Date:
Mon Oct 31 02:41:59 2022 +0000
Revision:
0:cc81b0dd1ded
Child:
1:a5accbc79c11
codigo aps2;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fernandosakabe 0:cc81b0dd1ded 1 #include "mbed.h" //Incluea biblioteca mbed
fernandosakabe 0:cc81b0dd1ded 2
fernandosakabe 0:cc81b0dd1ded 3 //define quais pinos serão para acionar a IHM
fernandosakabe 0:cc81b0dd1ded 4 DigitalOut EN_A (D2);
fernandosakabe 0:cc81b0dd1ded 5 DigitalOut IN1_A (D5);
fernandosakabe 0:cc81b0dd1ded 6 DigitalOut IN2_A (D4);
fernandosakabe 0:cc81b0dd1ded 7 DigitalOut EN_B (A4);
fernandosakabe 0:cc81b0dd1ded 8 DigitalOut IN1_B (A0);
fernandosakabe 0:cc81b0dd1ded 9 DigitalOut IN2_B (A1);
fernandosakabe 0:cc81b0dd1ded 10
fernandosakabe 0:cc81b0dd1ded 11
fernandosakabe 0:cc81b0dd1ded 12 InterruptIn interr(D8); //Define o InterruptIn para identificar os sinais da onda quadrada
fernandosakabe 0:cc81b0dd1ded 13 DigitalIn enable (D12); //Botão que liga e desliga projeto
fernandosakabe 0:cc81b0dd1ded 14 InterruptIn push(PC_13); //Botão de usuário que muda a direção do motor
fernandosakabe 0:cc81b0dd1ded 15 float periodo_seg = 2.0; //Quantidade de tempo em que se define a frequência do motor
fernandosakabe 0:cc81b0dd1ded 16 float frequencia = 0; //Frequência do motor
fernandosakabe 0:cc81b0dd1ded 17 float Tempo; //Periodo da onda
fernandosakabe 0:cc81b0dd1ded 18 int contador=0; //Conta a quantidadde de pulsos no periodo_seg
fernandosakabe 0:cc81b0dd1ded 19 Ticker tempo_alto;//Aciona função de calcula_frequencia (calcula a frequencia)
fernandosakabe 0:cc81b0dd1ded 20 int horario = 0; //Determina o sentido de rotação do motor em horário ou anti-horário
fernandosakabe 0:cc81b0dd1ded 21
fernandosakabe 0:cc81b0dd1ded 22 void muda_direcao() //Função que faz com que o sentido mude de horario para anti-horario e vice e versa
fernandosakabe 0:cc81b0dd1ded 23 {
fernandosakabe 0:cc81b0dd1ded 24 if(horario==1) {
fernandosakabe 0:cc81b0dd1ded 25 horario=0;
fernandosakabe 0:cc81b0dd1ded 26 } else {
fernandosakabe 0:cc81b0dd1ded 27 horario=1;
fernandosakabe 0:cc81b0dd1ded 28 }
fernandosakabe 0:cc81b0dd1ded 29 }
fernandosakabe 0:cc81b0dd1ded 30 void alto() //Função que conta quantas vezes o InterruptIn foi acionado.
fernandosakabe 0:cc81b0dd1ded 31 {
fernandosakabe 0:cc81b0dd1ded 32 contador++;
fernandosakabe 0:cc81b0dd1ded 33 }
fernandosakabe 0:cc81b0dd1ded 34
fernandosakabe 0:cc81b0dd1ded 35 void calcula_frequencia() //Função que calcula a frequencia
fernandosakabe 0:cc81b0dd1ded 36 {
fernandosakabe 0:cc81b0dd1ded 37 frequencia=contador/periodo_seg;
fernandosakabe 0:cc81b0dd1ded 38 contador=0;
fernandosakabe 0:cc81b0dd1ded 39 }
fernandosakabe 0:cc81b0dd1ded 40
fernandosakabe 0:cc81b0dd1ded 41 int main()
fernandosakabe 0:cc81b0dd1ded 42
fernandosakabe 0:cc81b0dd1ded 43 {
fernandosakabe 0:cc81b0dd1ded 44 push.rise(&muda_direcao); //ativa a funcao muda direção quando obotão de usuário é acionado
fernandosakabe 0:cc81b0dd1ded 45 interr.rise(&alto); //Ativa a função alto quando há um rise nas ondas
fernandosakabe 0:cc81b0dd1ded 46 tempo_alto.attach(&calcula_frequencia, periodo_seg); //Ativa a funcao calcula a cada passagem de periodo
fernandosakabe 0:cc81b0dd1ded 47
fernandosakabe 0:cc81b0dd1ded 48 EN_A = 0; // Desliga Ponte-H (A)
fernandosakabe 0:cc81b0dd1ded 49 EN_B = 0; // Desliga Ponte-H (B)
fernandosakabe 0:cc81b0dd1ded 50 IN1_A = 0;
fernandosakabe 0:cc81b0dd1ded 51 IN2_A = 0; // Ponte-H (A) Motor 'travado'
fernandosakabe 0:cc81b0dd1ded 52 IN1_A = 0;
fernandosakabe 0:cc81b0dd1ded 53 IN1_B = 0; // Ponte-H (B) Motor 'travado’
fernandosakabe 0:cc81b0dd1ded 54
fernandosakabe 0:cc81b0dd1ded 55 while(1) {
fernandosakabe 0:cc81b0dd1ded 56 Tempo = 1/frequencia; //calcula periodo a partir da frequencia
fernandosakabe 0:cc81b0dd1ded 57 printf("TEMPO = %f FREQUENCIA = %f \n\r", Tempo, frequencia);
fernandosakabe 0:cc81b0dd1ded 58 //Se o botão enable estiver acionado, liga o sistema
fernandosakabe 0:cc81b0dd1ded 59 if(enable) {
fernandosakabe 0:cc81b0dd1ded 60 //Define se o motor rotacionará no sentido horario ou anit-horario
fernandosakabe 0:cc81b0dd1ded 61 switch(horario) {
fernandosakabe 0:cc81b0dd1ded 62 case 0:
fernandosakabe 0:cc81b0dd1ded 63
fernandosakabe 0:cc81b0dd1ded 64 //passo 0
fernandosakabe 0:cc81b0dd1ded 65
fernandosakabe 0:cc81b0dd1ded 66 EN_A = 1;
fernandosakabe 0:cc81b0dd1ded 67 IN1_A = 1;
fernandosakabe 0:cc81b0dd1ded 68 IN2_A = 0;
fernandosakabe 0:cc81b0dd1ded 69 EN_B = 1;
fernandosakabe 0:cc81b0dd1ded 70 IN1_B = 1;
fernandosakabe 0:cc81b0dd1ded 71 IN2_B = 0;
fernandosakabe 0:cc81b0dd1ded 72 wait(Tempo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 73
fernandosakabe 0:cc81b0dd1ded 74 //passo 1
fernandosakabe 0:cc81b0dd1ded 75
fernandosakabe 0:cc81b0dd1ded 76 EN_A = 1;
fernandosakabe 0:cc81b0dd1ded 77 IN1_A = 0;
fernandosakabe 0:cc81b0dd1ded 78 IN2_A = 1;
fernandosakabe 0:cc81b0dd1ded 79 EN_B = 1;
fernandosakabe 0:cc81b0dd1ded 80 IN1_B = 1;
fernandosakabe 0:cc81b0dd1ded 81 IN2_B = 0;
fernandosakabe 0:cc81b0dd1ded 82 wait(Tempo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 83
fernandosakabe 0:cc81b0dd1ded 84 //passo 2
fernandosakabe 0:cc81b0dd1ded 85
fernandosakabe 0:cc81b0dd1ded 86 EN_A = 1;
fernandosakabe 0:cc81b0dd1ded 87 IN1_A = 0;
fernandosakabe 0:cc81b0dd1ded 88 IN2_A = 1;
fernandosakabe 0:cc81b0dd1ded 89 EN_B =1 ;
fernandosakabe 0:cc81b0dd1ded 90 IN1_B = 0;
fernandosakabe 0:cc81b0dd1ded 91 IN2_B = 1;
fernandosakabe 0:cc81b0dd1ded 92 wait(Tempo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 93
fernandosakabe 0:cc81b0dd1ded 94 //passo 3
fernandosakabe 0:cc81b0dd1ded 95
fernandosakabe 0:cc81b0dd1ded 96 EN_A = 1;
fernandosakabe 0:cc81b0dd1ded 97 IN1_A = 1;
fernandosakabe 0:cc81b0dd1ded 98 IN2_A = 0;
fernandosakabe 0:cc81b0dd1ded 99 EN_B = 1;
fernandosakabe 0:cc81b0dd1ded 100 IN1_B = 0;
fernandosakabe 0:cc81b0dd1ded 101 IN2_B = 1;
fernandosakabe 0:cc81b0dd1ded 102 wait(Tempo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 103
fernandosakabe 0:cc81b0dd1ded 104 break;
fernandosakabe 0:cc81b0dd1ded 105
fernandosakabe 0:cc81b0dd1ded 106 case 1:
fernandosakabe 0:cc81b0dd1ded 107
fernandosakabe 0:cc81b0dd1ded 108 //passo 3
fernandosakabe 0:cc81b0dd1ded 109
fernandosakabe 0:cc81b0dd1ded 110 EN_A = 1;
fernandosakabe 0:cc81b0dd1ded 111 IN1_A = 1;
fernandosakabe 0:cc81b0dd1ded 112 IN2_A = 0;
fernandosakabe 0:cc81b0dd1ded 113 EN_B = 1;
fernandosakabe 0:cc81b0dd1ded 114 IN1_B = 0;
fernandosakabe 0:cc81b0dd1ded 115 IN2_B = 1;
fernandosakabe 0:cc81b0dd1ded 116 wait(Tempo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 117
fernandosakabe 0:cc81b0dd1ded 118 //passo 2
fernandosakabe 0:cc81b0dd1ded 119
fernandosakabe 0:cc81b0dd1ded 120 EN_A = 1;
fernandosakabe 0:cc81b0dd1ded 121 IN1_A = 0;
fernandosakabe 0:cc81b0dd1ded 122 IN2_A = 1;
fernandosakabe 0:cc81b0dd1ded 123 EN_B = 1;
fernandosakabe 0:cc81b0dd1ded 124 IN1_B = 0;
fernandosakabe 0:cc81b0dd1ded 125 IN2_B = 1;
fernandosakabe 0:cc81b0dd1ded 126 wait(Tempo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 127
fernandosakabe 0:cc81b0dd1ded 128 //passo 1
fernandosakabe 0:cc81b0dd1ded 129
fernandosakabe 0:cc81b0dd1ded 130 EN_A = 1;
fernandosakabe 0:cc81b0dd1ded 131 IN1_A = 0;
fernandosakabe 0:cc81b0dd1ded 132 IN2_A = 1;
fernandosakabe 0:cc81b0dd1ded 133 EN_B = 1;
fernandosakabe 0:cc81b0dd1ded 134 IN1_B = 1;
fernandosakabe 0:cc81b0dd1ded 135 IN2_B = 0;
fernandosakabe 0:cc81b0dd1ded 136 wait(Tempo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 137
fernandosakabe 0:cc81b0dd1ded 138 //passo 0
fernandosakabe 0:cc81b0dd1ded 139
fernandosakabe 0:cc81b0dd1ded 140 EN_A = 1;
fernandosakabe 0:cc81b0dd1ded 141 IN1_A = 1;
fernandosakabe 0:cc81b0dd1ded 142 IN2_A = 0;
fernandosakabe 0:cc81b0dd1ded 143 EN_B = 1;
fernandosakabe 0:cc81b0dd1ded 144 IN1_B = 1;
fernandosakabe 0:cc81b0dd1ded 145 IN2_B = 0;
fernandosakabe 0:cc81b0dd1ded 146 wait(Tempo); //periodo definido anteriormente
fernandosakabe 0:cc81b0dd1ded 147
fernandosakabe 0:cc81b0dd1ded 148 break;
fernandosakabe 0:cc81b0dd1ded 149
fernandosakabe 0:cc81b0dd1ded 150 }
fernandosakabe 0:cc81b0dd1ded 151
fernandosakabe 0:cc81b0dd1ded 152 } else {
fernandosakabe 0:cc81b0dd1ded 153 //se botão enable desativado, desativa o EN_A e EN_B
fernandosakabe 0:cc81b0dd1ded 154 EN_A=0;
fernandosakabe 0:cc81b0dd1ded 155 EN_B=0;
fernandosakabe 0:cc81b0dd1ded 156
fernandosakabe 0:cc81b0dd1ded 157 }
fernandosakabe 0:cc81b0dd1ded 158 }
fernandosakabe 0:cc81b0dd1ded 159 }