#include <16f877A.h> //Diretivas do PIC16F877A #use delay(clock=4000000) //Cristal oscilador 4Mhz. #fuses hs, nowdt, put //Fusíveis #fuses nobrownout, nolvp, noprotect //Transmissão a 9600 bps #fuses nocpd, nodebug //Sem paridade, 8 bits de dados #use rs232(baud=9600, xmit=PIN_C6) //Pino TX RC6. #use fast_io(b) //Dá controle do I/O ao programador #byte portb=0x06 //Endereça o portB #bit btnModo=portb.7 //Define o botão modo no port B7 #bit btnMais=portb.6 //Define o botão mais no port B6 #bit btnMenos=portb.5 //Define o botão mais no port B5 #define MOT1 PIN_B1 //Define MOT1 como o pino B1 do motor #define MOT2 PIN_B2 //Define MOT2 como o pino B2 do motor #define MOT3 PIN_B3 //Define MOT3 como o pino B2 do motor #define MOT4 PIN_B4 //Define MOT4 como o pino B2 do motor #define LAMP PIN_D7 //Define LAMP como o pino D7 do Relê #define INI_TMR0 131 //Define o TMR0 com valor inicial 131 #include //Biblioteca p/ o módulo LCD int horaIluminacaoDefinitivo=0; int minutoDezenaIluminacaoDefinitivo=0; int minutoUnidadeIluminacaoDefinitivo=0; int horaAlimentacaoDefinitivo=0; int minutoDezenaAlimentacaoDefinitivo=0; int minutoUnidadeAlimentacaoDefinitivo=0; int passo=0; int passovalor=0; int modo=0; int horaAlimentacao=0; int minutoDezenaAlimentacao=0; int minutoUnidadeAlimentacao=0; int horaIluminacao=0; int minutoDezenaIluminacao=0; int minutoUnidadeIluminacao=0; int botaomais=0; int botaomenos=0; long contador=0; signed int horaIluminacaoRestante=0; signed int minutoDezenaIluminacaoRestante=0; signed int minutoUnidadeIluminacaoRestante=0; signed int horaAlimentacaoRestante=0; signed int minutoDezenaAlimentacaoRestante=0; signed int minutoUnidadeAlimentacaoRestante=0; void botaoModoApertado(); //Controla os acontecimentos //ao pressionar o botão configuração void botaoMaisApertado(); //Controla os acontecimentos //ao pressionar o botão de MAIS/SIM void botaoMenosApertado(); //Controla os acontecimentos //ao pressionar o botão de MENOS/NAO void somaHoraAlimentacao(); //Soma a hora de 0 a 12 da Alimentação void somaMinutoDezenaAlimentacao(); //Soma dezenas no minuto da Alimentação void somaMinutoUnidadeAlimentacao(); //Soma unidades no minuto da Alimentação void somaHoraIluminacao(); //Soma a hora de 0 a 12 da Iluminação void somaMinutoDezenaIluminacao(); //Soma dezenas no minuto da Iluminação void somaMinutoUnidadeIluminacao(); //Soma unidades no minuto da iluminação void subHoraAlimentacao(); //Subtrai a hora de 0 a 12 da Alimentação void subMinutoDezenaAlimentacao(); //Subtrai dezena no minuto da Alimentação void subMinutoUnidadeAlimentacao(); //Subtrai unidade no minuto da Alimentação void subHoraIluminacao(); //Subtrai a hora de 0 a 12 da Iluminação void subMinutoDezenaIluminacao(); //Subtrai dezena no minuto da Iluminação void subMinutoUnidadeIluminacao(); //Subtrai unidade do minuto da Iluminação void exibeAlimentacaoHora(); //Exibe a tela de configuração da hora //do intervalo de Alimentação void exibeAlimentacaoDezena(); //Exibe a tela de configuração da dezena //dos minutos do intervalo de Alimentação void exibeAlimentacaoUnidade(); //Exibe a tela de configuração da unidade //dos minutos do intervalo de Alimentação void exibeAlimentacaoConfirmar(); //Exibe a tela confirmação Alimentação void exibeAlimentacaoAgora(); //Exibe a tela de alimentação imediata void confirmaAlimentacao(); //Confirma alimentação e salva variaveis void alimentaAgora(); //Chama a função girarMotor void alimentarDepois(); //Não executa alimentação e //aguarda estouro do timer void cancelaConfigAlimentacao(); //Retorna p/ configuração da alimentação void timerAlimentacao(); //Contagem regressiva para alimentação void setaTempoAlimRestante(); //Guarda as variáveis definitivas de //alimentação void exibeIluminacaoHora(); //Exibe a tela de configuração da hora //do intervalo de Iluminação void exibeIluminacaoDezena(); //Exibe a tela de configuração da dezena //dos minutos do intervalo de Iluminação void exibeIluminacaoUnidade(); //Exibe a tela de configuração da unidade //dos minutos do intervalo de Iluminação void exibeIluminacaoConfirmar(); //Exibe a tela confirmação da Iluminação void exibeIluminacaoAgora(); //Exibe a tela iluminação imediata void iluminarAgora(); //Chama função acionarLampada void iluminarDepois(); //Não executa iluminação e //aguarda estouro do timer void cancelaConfigIluminacao(); //Retorna p/ configuração da iluminação void confirmaIluminacao(); //Confirma iluminação e salva variáveis void timerIluminacao(); //Contagem regressiva para alimentação void setaTempoIlumRestante(); //Guarda as variáveis definitivas de //iluminação void acionarLampada(); //Aciona o relê void girarMotor(); //Aciona o motor de passo void inicializar(); //Rotina de inicialização do dispositivo void mostrarTempoRestante(); //Mostra o tempo restante para próxima //operação void theFinalCountDown(); //Zera o contador do modo e //chama função mostratemporestante #int_RB //Interrupção pelos botões void RB_isr(void) { if(!btnModo){ //Caso qualquer um dos botões seja delay_ms(200); botaoModoApertado(); //pressionado, chamar a função }else if(!btnMais){ //correspondente delay_ms(200); botaoMaisApertado(); }else if(!btnMenos){ delay_ms(200); botaoMenosApertado(); } } int minuto = 0; //Flag que define se o contador //contou 1 minuto ou 30 segundos /*Função que controla o TMR0 do PIC com o contador configurado para acionar a interrupção a cada 1 minuto*/ #int_RTCC //Função que controla o TMR0 //e aciona interrupção a cada 1 minuto void clock_isr(void){ contador++; //incrementação da variável contador /*caso a variável atinja o valor de 3750, o equivalente a 1 segundo executa a instrução abaixo*/ if(contador >= 3750){ // 125 = 1s => 30s = 3750. //a cada 30 segundos contador = 0; //zera contador de interrupções. if(minuto){ //a cada minuto if (modo == 11){ //Caso nenhum botão seja pressionado timerAlimentacao(); //em 30 segundos, volta para a tela timerIluminacao(); //de contagem regressiva mostrarTempoRestante(); } minuto = 0; }else{ minuto = 1; } //a cada 30 segundos //sair do modo de configuração if(modo!= 11){ //Caso modo seja diferente de 11, //e não tenha sido feita configuração, //volta para tela inicial if(horaAlimentacaoDefinitivo == 0 && minutoDezenaAlimentacaoDefinitivo == 0 && minutoUnidadeAlimentacaoDefinitivo == 0 && horaIluminacaoDefinitivo == 0 && minutoDezenaIluminacaoDefinitivo == 0 && minutoUnidadeIluminacaoDefinitivo == 0){ modo = 0; printf(lcd_escreve, "\fAGUARDANDO\nCONFIGURACAO"); }else{ //fim if definitivos = 0 theFinalCountDown(); } //fim else modo = 11 } }//fim if(contador >= 3750) //a cada interrupção set_timer0(131 - get_timer0()); //Subtrai 131 do valor atual do tmr0 //e reescreve no tmr0 } void main() { inicializar(); while(true){ } } void inicializar(){ output_b(0x00); set_tris_b(0b11100000); //Seta os pinos da porta B como entrada lcd_ini(); //Rotina de inicialização do display set_timer0(131); //Inicia o TMR0 com 131 setup_timer_0(RTCC_INTERNAL | RTCC_DIV_64); //Configurações TMR0 e prescaler setup_timer_1(T1_DISABLED); //Desabilita timers 1 e 2 setup_timer_2(T2_DISABLED,0,1); setup_vref(FALSE); //habilitação das interrupções usadas enable_interrupts(INT_RTCC); //Timer enable_interrupts(INT_RB); //Interrupção na portB enable_interrupts(GLOBAL); //Interrupções globais lcd_escreve("\f"); printf(lcd_escreve, "\fAGUARDANDO\nCONFIGURACAO"); } //Função que controla os acontecimentos ao pressionar o botão de configuração void botaoModoApertado(){ minuto = 0; contador = 0; switch(modo){ case 0: //Não configurado ou case 11: //contagem regressiva exibeAlimentacaoHora(); //Avança para configuração hora break; case 1: //Configuração hora exibeAlimentacaoDezena(); //Avança para config min (Dezena) break; case 2: //Config min (Dezena) exibeAlimentacaoUnidade(); //Avança para config min (Unidade) break; case 3: //Config min (Unidade) exibeAlimentacaoConfirmar(); //Avança para confirmar alimentação break; case 4: //Aguardando confirmação ajuste hora break; case 5: //Aguardando confirmação alimentação agora break; case 6: //Configuração hora Iluminação exibeIluminacaoDezena(); //Avança para config min (Dezena) break; case 7: //Config minuto (Dezena) exibeIluminacaoUnidade(); //Avança para config minuto (Unidade) break; case 8: //Config minuto (Unidade) exibeIluminacaoConfirmar(); //Avança para confirmar iluminação break; case 9: //Aguardando confirmação ajuste hora break; case 10: //Aguardando confirmação iluminar agora break; } } //Função que controla os acontecimentos ao apertar o botão Mais void botaoMaisApertado(){ minuto = 0; contador = 0; switch(modo){ case 1: somaHoraAlimentacao(); //Soma uma unidade na hora alimentação break; case 2: somaMinutoDezenaAlimentacao(); //Soma uma unidade na dezena do minuto da break; //alimentação case 3: somaMinutoUnidadeAlimentacao(); //Soma uma unidade no minuto da break; //alimentação case 4: confirmaAlimentacao(); //Confirma configuração da alimentação break; case 5: alimentaAgora(); //Chama função giraMotor break; case 6: somaHoraIluminacao(); //Soma uma unidade na hora alimentação break; case 7: somaMinutoDezenaIluminacao(); //Soma uma unidade na dezena do minuto da break; //alimentação case 8: somaMinutoUnidadeIluminacao(); //Soma uma unidade no minuto da break; //Alimentação case 9: confirmaIluminacao(); //Confirma configuração da iluminação break; case 10: iluminarAgora(); //Chama função acionarLampada break; } } //Função que controla os acontecimentos ao apertar o botão Menos void botaoMenosApertado(){ minuto = 0; contador = 0; switch(modo){ case 1: subHoraAlimentacao(); //Subtrai uma unidade na hora alimentação break; case 2: subMinutoDezenaAlimentacao(); //Subtrai uma unidade na dezena do minuto break; //da alimentação case 3: subMinutoUnidadeAlimentacao(); //Subtrai uma unidade no minuto da break; //alimentação case 4: cancelaConfigAlimentacao(); //Cancela configuração e volta para a break; //configuração da hora da alimentação case 5: alimentarDepois(); //Cancela alimentação imediata break; case 6: subHoraIluminacao(); //Subtrai uma unidade na hora iluminação break; case 7: subMinutoDezenaIluminacao(); //Subtrai uma unidade na dezena do minuto break; //da iluminação case 8: subMinutoUnidadeIluminacao(); //Subtrai uma unidade no minuto da break; //iluminação case 9: cancelaConfigIluminacao(); //Cancela configuração e volta para a break; //configuração da hora da iluminação case 10: iluminarDepois(); //Cancela iluminação imediata break; } } void exibeAlimentacaoHora(){ printf(lcd_escreve, "\fALIMENTAR\n%2d:%d%d",horaAlimentacao, minutoDezenaAlimentacao, minutoUnidadeAlimentacao); lcd_pos_xy(2,2); //Posiciona o cursor na posição da hora modo = 1; //Passa para o modo seguinte } void exibeAlimentacaoDezena(){ printf(lcd_escreve, "\fALIMENTAR\n%2d:%d%d",horaAlimentacao, minutoDezenaAlimentacao, minutoUnidadeAlimentacao); lcd_pos_xy(4,2); //Posiciona o cursor na posição da dezena do minuto modo = 2; //Passa para o modo seguinte } void exibeAlimentacaoUnidade(){ printf(lcd_escreve, "\fALIMENTAR\n%2d:%d%d",horaAlimentacao, minutoDezenaAlimentacao, minutoUnidadeAlimentacao); lcd_pos_xy(5,2); //Posiciona o cursor na posição da unidade do minuto modo = 3; //Passa para o modo seguinte } void exibeAlimentacaoConfirmar(){ printf(lcd_escreve, "\fALIMENTAR %2d:%d%d\nConfirma? S/N", horaAlimentacao, minutoDezenaAlimentacao, minutoUnidadeAlimentacao); modo = 4; //Passa para o modo 4, anulando o botão modo //até que seja respondida a pergunta } void exibeAlimentacaoAgora(){ printf(lcd_escreve, "\fALIMENTAR AGORA?\n S/N"); modo = 5; //Passa para o modo 5, anulando o botão modo //até que seja respondida a pergunta } void exibeIluminacaoHora(){ printf(lcd_escreve, "\fILUMINAR\n%2d:%d%d",horaIluminacao, minutoDezenaIluminacao, minutoUnidadeIluminacao); lcd_pos_xy(2,2); //Posiciona o cursor na posição da hora modo = 6; } void exibeIluminacaoDezena(){ printf(lcd_escreve, "\fILUMINAR\n%2d:%d%d",horaIluminacao, minutoDezenaIluminacao, minutoUnidadeIluminacao); lcd_pos_xy(4,2); //Posiciona o cursor na posição da dezena do minuto modo = 7; //Passa para o modo seguinte } void exibeIluminacaoUnidade(){ printf(lcd_escreve, "\fILUMINAR\n%2d:%d%d",horaIluminacao, minutoDezenaIluminacao, minutoUnidadeIluminacao); lcd_pos_xy(5,2); //Posiciona o cursor do LCD na posição da unidade //do minuto modo = 8; //Passa para o modo seguinte } void exibeIluminacaoConfirmar(){ printf(lcd_escreve, "\fILUMINAR %2d:%d%d\nConfirma? S/N", horaIluminacao, minutoDezenaIluminacao, minutoUnidadeIluminacao); modo = 9; //Passa para o modo 9, anulando o botão modo //até que seja respondida a pergunta } void exibeIluminacaoAgora(){ printf(lcd_escreve, "\fILUMINAR AGORA?\n S/N"); modo = 10; //Passa para o modo 10, anulando o botão modo //até que seja respondida a pergunta } void theFinalCountDown(){ //contagem regressiva mostrarTempoRestante(); //Passa para o modo 11 e exibe modo=11; //a contagem regressiva contador = 0; } void mostrarTempoRestante(){ //Exibe o tempo restante para a próxima operação printf(lcd_escreve, "\fALIM - %2d:%d%d", horaAlimentacaoRestante, minutoDezenaAlimentacaoRestante, minutoUnidadeAlimentacaoRestante); printf(lcd_escreve, "\nILUM - %2d:%d%d", horaIluminacaoRestante, minutoDezenaIluminacaoRestante, minutoUnidadeIluminacaoRestante); } void somaHoraAlimentacao() { if (horaAlimentacao == 12) horaAlimentacao = 0; else horaAlimentacao++; //Soma uma unidade na hora na alimentação printf(lcd_escreve, "\fALIMENTAR\n%2d:%d%d",horaAlimentacao, minutoDezenaAlimentacao, minutoUnidadeAlimentacao); lcd_pos_xy(2,2); //Posiciona o cursor na posição da hora } void somaMinutoDezenaAlimentacao() { if (minutoDezenaAlimentacao == 5) minutoDezenaAlimentacao = 0; else minutoDezenaAlimentacao++; //Soma uma unidade na dezena do minuto //da alimentação printf(lcd_escreve, "\fALIMENTAR\n%2d:%d%d",horaAlimentacao, minutoDezenaAlimentacao, minutoUnidadeAlimentacao); lcd_pos_xy(4,2); //Posiciona o cursor na posição da dezena //do minuto } void somaMinutoUnidadeAlimentacao() { if (minutoUnidadeAlimentacao == 9) minutoUnidadeAlimentacao = 0; else minutoUnidadeAlimentacao++; //Soma uma unidade do minuto da alimentação printf(lcd_escreve, "\fALIMENTAR\n%2d:%d%d",horaAlimentacao, minutoDezenaAlimentacao, minutoUnidadeAlimentacao); lcd_pos_xy(5,2); //Posiciona o cursor na posição da unidade //do minuto } void somaHoraIluminacao(){ if (horaIluminacao == 12) horaIluminacao = 0; else horaIluminacao++; //Soma uma unidade na hora da iluminação printf(lcd_escreve, "\fILUMINAR\n%2d:%d%d",horaIluminacao, minutoDezenaIluminacao, minutoUnidadeIluminacao); lcd_pos_xy(2,2); //Posiciona o cursor na posição da hora } void somaMinutoDezenaIluminacao(){ if (minutoDezenaIluminacao == 5) minutoDezenaIluminacao = 0; else minutoDezenaIluminacao++; //Soma uma unidade na dezena do minuto //da iluminação printf(lcd_escreve, "\fILUMINAR\n%2d:%d%d",horaIluminacao, minutoDezenaIluminacao, minutoUnidadeIluminacao); lcd_pos_xy(4,2); //Posiciona o cursor na posição da dezena //do minuto } void somaMinutoUnidadeIluminacao(){ if (minutoUnidadeIluminacao == 9) minutoUnidadeIluminacao = 0; else minutoUnidadeIluminacao++; //Soma uma unidade do minuto da iluminação printf(lcd_escreve, "\fILUMINAR\n%2d:%d%d",horaIluminacao, minutoDezenaIluminacao, minutoUnidadeIluminacao); lcd_pos_xy(5,2); //Posiciona o cursor na posição da unidade //do minuto } void confirmaAlimentacao(){ horaAlimentacaoDefinitivo = horaAlimentacao; minutoDezenaAlimentacaoDefinitivo = minutoDezenaAlimentacao; minutoUnidadeAlimentacaoDefinitivo = minutoUnidadeAlimentacao; setaTempoAlimRestante(); exibeAlimentacaoAgora(); //Salva as variáveis provisórias para as clock_isr(); //definitivas e aciona o clock } void setaTempoAlimRestante(){ //Salva os valores para as variáveis a serem //decrementadas horaAlimentacaoRestante=horaAlimentacaoDefinitivo; minutoDezenaAlimentacaoRestante=minutoDezenaAlimentacaoDefinitivo; minutoUnidadeAlimentacaoRestante=minutoUnidadeAlimentacaoDefinitivo; } void alimentaAgora(){ printf(lcd_escreve, "\fALIMENTANDO\nAguarde..."); girarMotor(); //Aciona o motor de passo exibeIluminacaoHora(); } void confirmaIluminacao(){ horaIluminacaoDefinitivo = horaIluminacao; minutoDezenaIluminacaoDefinitivo = minutoDezenaIluminacao; minutoUnidadeIluminacaoDefinitivo = minutoUnidadeIluminacao; setaTempoIlumRestante(); exibeIluminacaoAgora(); //Salva as variáveis provisórias para as clock_isr(); //Definitivas e aciona o clock } void setaTempoIlumRestante(){ //Salva os valores para as variáveis a serem //decrementadas horaIluminacaoRestante=horaIluminacaoDefinitivo; minutoDezenaIluminacaoRestante=minutoDezenaIluminacaoDefinitivo; minutoUnidadeIluminacaoRestante=minutoUnidadeIluminacaoDefinitivo; } void iluminarAgora(){ //Aciona a lâmpada e exibe a //contagem regressiva acionarLampada(); theFinalCountDown(); } void subHoraAlimentacao(){ if (horaAlimentacao == 0) horaAlimentacao = 12; else horaAlimentacao--; //Soma uma unidade na hora na alimentação printf(lcd_escreve, "\fALIMENTAR\n%2d:%d%d",horaAlimentacao, minutoDezenaAlimentacao, minutoUnidadeAlimentacao); lcd_pos_xy(2,2); //Posiciona o cursor na posição da hora } void subMinutoDezenaAlimentacao(){ if (minutoDezenaAlimentacao == 0) minutoDezenaAlimentacao = 5; else minutoDezenaAlimentacao--; //Soma uma unidade na dezena do minuto //na alimentação printf(lcd_escreve, "\fALIMENTAR\n%2d:%d%d",horaAlimentacao, minutoDezenaAlimentacao, minutoUnidadeAlimentacao); lcd_pos_xy(4,2); //Posiciona o cursor na posição da dezena //do minuto } void subMinutoUnidadeAlimentacao(){ if (minutoUnidadeAlimentacao == 0) minutoUnidadeAlimentacao = 9; else minutoUnidadeAlimentacao--; //Subtrai uma unidade no minuto //da alimentação printf(lcd_escreve, "\fALIMENTAR\n%2d:%d%d",horaAlimentacao, minutoDezenaAlimentacao, minutoUnidadeAlimentacao); lcd_pos_xy(5,2); //Posiciona o cursor na posição da unidade //do minuto } void subHoraIluminacao(){ if (horaIluminacao == 0) horaIluminacao = 12; else horaIluminacao--; //Soma uma unidade na hora na iluminação printf(lcd_escreve, "\fILUMINAR\n%2d:%d%d",horaIluminacao, minutoDezenaIluminacao, minutoUnidadeIluminacao); lcd_pos_xy(2,2); //Posiciona o cursor na posição da hora } void subMinutoDezenaIluminacao(){ if (minutoDezenaIluminacao == 0) minutoDezenaIluminacao = 5; else minutoDezenaIluminacao--; //Soma uma unidade na dezena do minuto //na iluminação printf(lcd_escreve, "\fILUMINAR\n%2d:%d%d",horaIluminacao, minutoDezenaIluminacao, minutoUnidadeIluminacao); lcd_pos_xy(4,2); //Posiciona o cursor na posição da dezena //do minuto } void subMinutoUnidadeIluminacao(){ if (minutoUnidadeIluminacao == 0) minutoUnidadeIluminacao = 9; else minutoUnidadeIluminacao--; //Soma uma unidade na unidade do minuto //na alimentação printf(lcd_escreve, "\fILUMINAR\n%2d:%d%d",horaIluminacao, minutoDezenaIluminacao, minutoUnidadeIluminacao); lcd_pos_xy(5,2); //Posiciona o cursor na posição da unidade //do minuto } void cancelaConfigAlimentacao(){ exibeAlimentacaoHora(); //Cancela a configuração da alimentação //e retorna ao modo de configuração da hora //da alimentação } void cancelaConfigIluminacao(){ exibeIluminacaoHora(); //Cancela a configuração da alimentação //e retorna ao modo de configuração da hora //da iluminação } void alimentarDepois(){ //Cancela alimentação imediata e passa //para a configuração da iluminação exibeIluminacaoHora(); } void iluminarDepois(){ theFinalCountDown(); //Cancela a iluminação imediata e passa //para a contagem regressiva para a próxima } //operação void girarMotor(){ //Gira o motor de passo 360º delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_high(MOT3); output_low(MOT4); output_low(MOT1); output_low(MOT2); delay_ms(500); output_low(MOT3); output_high(MOT4); output_low(MOT1); output_low(MOT2); passo++; } void acionarLampada(){ output_toggle(LAMP); //Aciona o pino que o relê está ligado } void timerAlimentacao(){ //Decrementador do tempo de Alimentação if(horaAlimentacaoRestante == 0 && minutoDezenaAlimentacaoRestante == 0 && minutoUnidadeAlimentacaoRestante == 0){ } else{ minutoUnidadeAlimentacaoRestante--; if (minutoUnidadeAlimentacaoRestante < 0){ minutoUnidadeAlimentacaoRestante = 9; minutoDezenaAlimentacaoRestante--; } if (minutoDezenaAlimentacaoRestante < 0){ minutoDezenaAlimentacaoRestante = 5; horaAlimentacaoRestante--; } if (horaAlimentacaoRestante == 0 && minutoDezenaAlimentacaoRestante == 0 && minutoUnidadeAlimentacaoRestante == 0){ printf(lcd_escreve, "\fALIMENTANDO\nAguarde..."); girarMotor(); setaTempoAlimRestante(); } } } void timerIluminacao(){ //Decrementador do tempo de iluminação if (horaIluminacaoRestante == 0 && minutoDezenaIluminacaoRestante == 0 && minutoUnidadeIluminacaoRestante == 0){ } else { minutoUnidadeIluminacaoRestante --; if (minutoUnidadeIluminacaoRestante < 0){ minutoUnidadeIluminacaoRestante = 9; minutoDezenaIluminacaoRestante --; } if (minutoDezenaIluminacaoRestante < 0){ minutoDezenaIluminacaoRestante = 5; horaIluminacaoRestante --; } if (horaIluminacaoRestante == 0 && minutoDezenaIluminacaoRestante == 0 && minutoUnidadeIluminacaoRestante == 0){ acionarLampada(); setaTempoIlumRestante(); } } }