Академический Документы
Профессиональный Документы
Культура Документы
h>
#device adc=10
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#include "definicoes.h"
#include <stdio.h>
#include <stdlib.h>
///////////////////////////////////////////////////////////////////////VARIAVEIS
//////////////////////////////////////////////////////////////////////SUBROTINAS
void resetvariaveis()
desliga(BUZZ);
status1=0;
status2=0;
temperatura1=0;
temperatura2=0;
umidade1=0;
Pseg=0;
seg=0;
min=0;
hor=0;
selecao=1;
Umidade=0;
Temp1=0;
Temp2=0;
Tempo1=0;
Temporeg=0;
i=0;
a=0;
b=0;
T1=0;
////////////////////////////////////////////////////////CONTROLE DE TEMPERATURA
void controletemp ()
{
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_ccp2(ccp_pwm);
desliga(PWM);
set_pwm2_duty(T1);
enable_interrupts(GLOBAL);
delay_ms(100);
temperatura2=read_adc();
delay_ms(100);
if ((temperatura2)>(Temp2))
T1=T1-1;
delay_ms(100);
set_pwm2_duty(T1);
if ((temperatura2)<(Temp2))
T1=T1+1;
delay_ms(100);
set_pwm2_duty(T1);
T1=0;
set_pwm2_duty(T1);
}
if ((selecao)==3)
if (entrada(F4)==0)
T1=0;
set_pwm2_duty(T1);
status1=30;
//////////////////////////////////////////////////////////////////////RESET LCD
void resetlcd()
printf("\x07");
delay_ms(100);
printf("\x40\x01\x01");
delay_ms(6);
printf("[ ]");
delay_ms(12);
printf("\x40\x01\x02");
delay_ms(6);
printf("[ ]");
delay_ms(12);
}
//////////////////////////////////////////////////////////////////////////TIMER
#int_timer0
Pseg++;
if ((Pseg)>=3){seg=seg+1;Pseg=0;}
if ((seg)>=54){min=min+1;seg=0;}
//if ((min)>=60){hor=hor+1;min=0;}
set_timer0 (61);
void inicio()
while(TRUE)
printf("\x40\x01\x01");
delay_ms(6);
delay_ms(12);
printf("\x40\x01\x02");
delay_ms(6);
delay_ms(12);
if ((entrada(F1)==0)||(entrada(F2)==0)||(entrada(F3)==0))
{
resetlcd();
break;
void supervisorio(void)
//////////////////////////////////////////////////////////////////SETPOINT MASSA
void tempmassa()
printf("\x40\x01\x02");
delay_ms(6);
printf("[ ]");
delay_ms(12);
printf("[T.Massa: ]");
delay_ms(500);
status1=5;
for(;;)
printf("\x40\x9\x02");
delay_ms(6);
delay_ms(12);
if (entrada(F1)==1) //Boto para somar valores no display
if ((Temp2)<=500){Temp2=Temp2+1; Tempo_1();}
if ((Temp2)>1){Temp2=Temp2-1; Tempo_1();}
printf("\x40\x01\x02");
delay_ms(6);
printf("[ ]");
delay_ms(12);
break;
void sensmovimento()
for (b=1;b<=100;++b)
if (entrada(XIN2)==1){status1=7; break;}
if ((b)>=90) { status1=11;}
delay_ms(110);
}
/////////////////////////////////////////////////////////////////SENSOR DE FOGO
void fogo()
if (entrada(XIN3)==1)
resetvariaveis();
set_pwm2_duty(T1);
status1=12;
////////////////////////////////////////////////////////////////////AQUECIMENTO
void aquecimento()
for (;;)
set_adc_channel(0);
Tempo_1();
temperatura1=read_adc();
printf("\x40\x01\x02");
delay_ms(12);
printf("[Temp.Entrada:%lu ]",temperatura1);
set_pwm2_duty(T1);
delay_ms(100);
if ((T1>=0)&(T1<100)){T1=(T1)+1;delay_ms(100);}
if ((T1>=100)&(T1<300)){T1=(T1)+2;}
if ((T1>=300)&(T1<500)){T1=(T1)+3;}
if ((T1>=500)&(T1<700)){T1=(T1)+4;}
if ((T1>=700)&(T1<900)){T1=(T1)+10;}
if ((T1>=900)&(T1<1023)){T1=(T1)+20;}
if (temperatura1>=Temp1){ resetlcd();
printf("\x40\x01\x01");
delay_ms(6);
printf("[ EM OPERACAO]");
delay_ms(12);
if (((selecao)==1)||((selecao)==3)){ status1=8;break;}
if ((selecao)==2){ status1=10;break;}
fogo();
/////////////////////////////////////////////////////////////FIM DO AQUECIMENTO
/////////////////////////////////////////////////////////////PROGRAMA PRINCIPAL
void main()
inicio();
setup_adc_ports(sAN0|sAN1|sAN2|sAN3|VSS_VDD);
setup_adc(ADC_CLOCK_INTERNAL);
setup_timer_0(RTCC_EXT_H_TO_L|RTCC_DIV_16);//prescaller
enable_interrupts(INT_TIMER0);
set_timer0(61);
setup_ccp2(ccp_pwm);
set_pwm2_duty(0);
enable_interrupts(GLOBAL);
while(true)
//MODO AUTOMTICO
if (entrada(XIN1)==0)
switch (status1)
case 0:
liga(Y1);
resetlcd();
printf("\x40\x01\x01");
delay_ms(6);
delay_ms(12);
status2=0;
printf("MA \n ");
delay_ms(250);
status1=1;
break;
case 1:
printf("\x40\x01\x02");
delay_ms(6);
printf("[MODO:]");
delay_ms(12);
status1=2;
break;
case 2:
if ((selecao)<=3){selecao=selecao+1; Tempo_1();}
if ((selecao)>1){selecao=selecao-1; Tempo_1();}
printf("\x40\x06\x02");
delay_ms(6);
delay_ms(12);
status1=3;
break;
case 3:
if ((selecao)==1) {status1=4;}
if ((selecao)==2) {umidade=1;status1=9;}
if ((selecao)==3) {umidade=1;status1=4;}
break;
//MODOS DE OPERAO
case 4:
if ((Umidade)==0)
printf("\x40\x01\x02");
delay_ms(6);
printf("[ ]");
delay_ms(12);
printf("[Umidade: ]");
delay_ms(500);
status1=5;
if ((Umidade)>0)
tempmassa();
printf("\x40\x01\x02");
delay_ms(6);
printf("[ ]");
delay_ms(12);
printf("[T.Entr.: ]");
delay_ms(500);
status1=6;
break;
case 5:
printf("\x40\x09\x02");
delay_ms(6);
printf("[%lu%c ]",Umidade,0X25);
delay_ms(12);
if ((Umidade)<=500){Umidade=Umidade+1; Tempo_1();}
if ((Umidade)>1){Umidade=Umidade-1; Tempo_1();}
status1=4;
break;
case 6:
printf("\x40\x9\x02");
delay_ms(6);
delay_ms(12);
if ((Temp1)<=500){Temp1=Temp1+1; Tempo_1();}
{
if ((Temp1)>1){Temp1=Temp1-1; Tempo_1();}
printf("\x40\x01\x02");
delay_ms(6);
printf("[ ]");
delay_ms(12);
printf("[Inicializando... ]");
Tempo_2();
sensmovimento();
break;
case 7:
aquecimento();
fogo();
break;
//(OPO_1)
case 8:
Tempo_1();
temperatura1=read_adc();
set_adc_channel(1); //SENSOR DE UMIDADE
Tempo_1();
umidade1=read_adc();
Tempo_1();
temperatura2=read_adc();
Tempo_1();
printf("\x40\x01\x02");
delay_ms(6);
printf("[U%lu E%lu M
%lu ]}",umidade1,temperatura1,temperatura2);
delay_ms(50);
if (((umidade1)<(Umidade))||((selecao)==3))
controletemp ();
if (((umidade1)>=(Umidade))&&((selecao)==1))
status1=30;
fogo();
break;
//(OPO_2)
case 9:
delay_ms(6);
printf("[Tempo/Min:%lu ]",Tempo1);
Tempo_1();
if ((Tempo1)<=500){Tempo1=Tempo1+1; Tempo_1();}
if ((Tempo1)>1){Tempo1=Tempo1-1; Tempo_1();}
status1=4;
break;
case 10:
Temporeg=((Tempo1)-(min));
if ((Temporeg)>0)
trata_timer ();
printf("\x40\x01\x02");
delay_ms(6);
delay_ms(50);
}
if ((Temporeg)<=0)
status1=30;
controletemp ();
fogo();
break;
///////////////////////////////////////////////////////////////FALHA NA CORREIA
case 11:
Tempo_2();
Tempo_2();
resetvariaveis();
T1=0;
set_pwm2_duty(T1);
for(;;)
printf("\x40\x01\x02");
delay_ms(6);
printf("[FALHA MOVIMENTO!]");
delay_ms(500);
liga(BUZZ);
printf("\x40\x01\x02");
delay_ms(6);
printf("[ ]");
delay_ms(500);
desliga(BUZZ);
break;
break;
///////////////////////////////////////////////////////////////////////////FOGO
case 12:
Tempo_2();
Tempo_2();
resetvariaveis();
T1=0;
set_pwm2_duty(T1);
for(;;)
printf("\x40\x01\x02");
delay_ms(6);
delay_ms(500);
liga(BUZZ);
printf("\x40\x01\x02");
delay_ms(6);
printf("[ ]");
delay_ms(500);
desliga(BUZZ);
if (entrada(F4)==0) //Boto para confirmar valores no display
break;
break;
////////////////////////////////////////////////////////////////FIM DE OPERAO
case 30:
Tempo_2();
Tempo_2();
resetvariaveis();
T1=0;
set_pwm2_duty(T1);
resetlcd();
printf("\x40\x01\x01");
delay_ms(6);
delay_ms(12);
printf("\x40\x01\x02");
delay_ms(6);
printf("[Ciclo Concluido]");
delay_ms(12);
status1=31;
break;
case 31:
if ((a) < 3)
liga(BUZZ);
Tempo_2();
desliga(BUZZ);
Tempo_2();
a=a+1;
break;
//MODO MANUAL
if ((entrada(XIN1)==1)||(entrada(F4)==0))
switch (status2)
case 0:
resetvariaveis();
desliga(Y1);
desliga(Y2);
desliga(Y3);
resetlcd();
if (entrada(XIN1)==1)
printf("\x40\x01\x01");
printf("[ MODO MANUAL ]");
if (entrada(F4)==0)
printf("\x40\x01\x01");
delay_ms(12);
printf("\x40\x01\x02");
delay_ms(6);
delay_ms(12);
Tempo_2();
status1=0;
printf("MM \n ");
Tempo_1();
status2=1;
break;
case 1:
break;