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@0:cc81b0dd1ded, 2022-10-31 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |