Fernando Sakabe / Mbed OS APS_1_MEA
Committer:
fernandosakabe
Date:
Sun Oct 09 20:08:31 2022 +0000
Revision:
0:a6e0d8aa714f
V1_APS1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fernandosakabe 0:a6e0d8aa714f 1
fernandosakabe 0:a6e0d8aa714f 2 #include "mbed.h"
fernandosakabe 0:a6e0d8aa714f 3
fernandosakabe 0:a6e0d8aa714f 4 AnalogIn potenciometro(A5); //declara a entrada do potenciômetro
fernandosakabe 0:a6e0d8aa714f 5 PwmOut dc(D10); //declara a saída do PWM
fernandosakabe 0:a6e0d8aa714f 6 InterruptIn encoder(D7); //declara entrada do encoder
fernandosakabe 0:a6e0d8aa714f 7
fernandosakabe 0:a6e0d8aa714f 8 Ticker tempo_alto; //declara um ticker
fernandosakabe 0:a6e0d8aa714f 9 int contador=0; //icício do contador zerado
fernandosakabe 0:a6e0d8aa714f 10 int periodo=1;
fernandosakabe 0:a6e0d8aa714f 11 int periodo_min=60/periodo; //faz a conta do período
fernandosakabe 0:a6e0d8aa714f 12 float rpm=0; //icício do rpm zerado
fernandosakabe 0:a6e0d8aa714f 13 float duty_cycle=0; //icício do duty cycle zerado
fernandosakabe 0:a6e0d8aa714f 14
fernandosakabe 0:a6e0d8aa714f 15 void alto(){ //declara a função alto
fernandosakabe 0:a6e0d8aa714f 16 contador++; //soma 1 no contador
fernandosakabe 0:a6e0d8aa714f 17 }
fernandosakabe 0:a6e0d8aa714f 18
fernandosakabe 0:a6e0d8aa714f 19 void calcula_rpm(){ //declara a função começa
fernandosakabe 0:a6e0d8aa714f 20 rpm=contador*periodo_min/(30); //faz a conta do rpm
fernandosakabe 0:a6e0d8aa714f 21 contador=0; //zera o contador depois de calculo de rpm
fernandosakabe 0:a6e0d8aa714f 22 }
fernandosakabe 0:a6e0d8aa714f 23
fernandosakabe 0:a6e0d8aa714f 24 int main(){
fernandosakabe 0:a6e0d8aa714f 25 dc.period(0.010); // define o periodo do PWM
fernandosakabe 0:a6e0d8aa714f 26 encoder.rise(&alto); //quando o encoder retorna 1 a função &alto é chamada
fernandosakabe 0:a6e0d8aa714f 27 tempo_alto.attach(&calcula_rpm, periodo); //a funcao "calcula_rpm" é acionada quando passar o tempo de "periodo"
fernandosakabe 0:a6e0d8aa714f 28
fernandosakabe 0:a6e0d8aa714f 29 while(1){
fernandosakabe 0:a6e0d8aa714f 30 duty_cycle=potenciometro.read(); //o duty cycle é definido pelo potenciometro
fernandosakabe 0:a6e0d8aa714f 31 dc.write(duty_cycle); //o valor de duty cycle é colocado no PWM
fernandosakabe 0:a6e0d8aa714f 32 printf("duty cycle: %f rpm: %f \r\n " ,duty_cycle*100, rpm); //o valor de rpm e do duty cycle é printado
fernandosakabe 0:a6e0d8aa714f 33
fernandosakabe 0:a6e0d8aa714f 34 }
fernandosakabe 0:a6e0d8aa714f 35 }
fernandosakabe 0:a6e0d8aa714f 36