#include "mbed.h" AnalogIn LM35(PTB0); AnalogIn POT(PTB1); DigitalOut dir_1(PTA13); DigitalOut dir_2(PTD5); PwmOut led(LED_GREEN); DigitalOut rele(PTA12); PwmOut fan(PTD4); Ticker tick; Serial PC(USBTX, USBRX); int aux = 0; //variável global void interrup() { aux = 1; } int main() { float T = 0.2, Temp=0.0, Erro = 0.0, Ref = 0.0; float Acao=0, Acao_ant=0, Erro_ant=0.0, Kp, Ki; dir_1=1; dir_2=0; //Direção da ponte H fan=0.0; fan.period(0.0001); led=1; rele=1; Acao = !led; Kp = 0.2; Ki = 0.009; //Controle PI tick.attach(&interrup, T); //prepara timer de T seg. while(1) { if (aux==1) { aux = 0; Ref = 15*POT+35; //Referencia varia de 35oC a 50oC ao variar o POT Temp=LM35*330.0; //Converte leitura para oC Erro = -(Ref - Temp); //Ação direta - refrigeração Acao = Acao_ant +Kp*(Erro - Erro_ant)+Ki*T*Erro; // offset e limitação na Ação de Controle. if (Acao > 0.8) { Acao = 0.8; } else if (Acao < 0) { Acao = 0; } fan = Acao+0.20; led = 1-fan; PC.printf("%.2f \t %2.1f \t %2.1f\r\n", Acao, Ref, Temp); Erro_ant = Erro; Acao_ant = Acao; } } }