Agora peguei o jeito de fazer a switch funcionar, tentei do jeito que o ze falou mas sem sucesso, por apresentar algums erros de declaração dos port's.
Tentei novamente do jeito que tinha feito mas com pequenas alterações e funciona bem, mas não estou sabendo uma forma de quando chegar no final da primeira case, mandar a saida de encher o tanquinho ficar acionada, aguardando o nivel de agua ( no caso quando a agua encostar no sensor e o mesmo mandar p/ o pic o 1(5v)), e direcionar para o case 2 que se faz referencia ao enxague:
Vejam abaixo:
cpp code
#include "C:\Documents and Settings\CARLUCIO\Desktop\switch teste\tanquinho aut.h"
#define nivel_agua pin_a2
#define programa_1 pin_a3
#define programa_2 pin_a0
#define encher_tanquinho pin_b3
#define esvaziar_tanquinho pin_b0
#define alarme pin_b5
#define rodar_motor pin_b4
int a=0;
int16 temp1=0, temp2=0, temp3=0;
int contagem_t0=0;
int processo_normal, processo_enxague;
static boolean led;
#int_RTCC
void RTCC_isr(void)
{
set_timer0 (131-get_timer0());
contagem_t0++;
if(contagem_t0==125)
{
contagem_t0=0;
led=!led;
output_bit(pin_a6,led);
if(temp1==2000)
{
temp1=0;
}
else{
temp1++;
}
if(temp2==3000)
{
temp2=0;
}
else{
temp2++;
}
if(temp3==1000)
{
temp3=0;
}
else{
temp3++;
}
}
}
void processo_normal(void){
switch (a){
case 1:
temp1=0;{
output_high(rodar_motor);
while(temp1>=0 && temp1<=30);
}
output_low(rodar_motor);{
while(temp1>=31 && temp1<=60);
}
output_high(rodar_motor);{
while(temp1>=61 && temp1<=80);
}
output_low(rodar_motor);{
while(temp1>=81 && temp1<=90);
}
output_high(esvaziar_tanquinho);{
while(temp1>=91 && temp1<=110);
}
output_low(esvaziar_tanquinho);{
delay_ms(1000);
output_high(encher_tanquinho); --------------------->>>> MEU PROBLEMA COMEÇA AQUI, O QUE PODERIA SER FEITO?????
// while(temp1>=111 && temp1<=115);
}
//output_high(encher_tanquinho);{
if(!input(nivel_agua) == 1){ ---------------------------->>>>> AGUARDA ATINGIR O NIVEL PARA DIRECIONAR PARA A CASE 2
a=2;
// }
while(temp1>=116 && temp1<=130);
}
break;
case 2: ------------------------------------------>>>>> DAQUI PARA BAIXO INICIASSE O MODO DE ENXAGUE QUE AINDA NÃO ESTA COMPLETO...
output_low(encher_tanquinho);
delay_ms(1000);
output_high(rodar_motor);
temp1=0;
while(temp1>=0 && temp1<=30);
{
output_low(rodar_motor);
}
while(temp1>=31 && temp1<=60);
{
output_high(rodar_motor);
}
while(temp1>=61 && temp1<=80);
{
output_low(rodar_motor);
}
while(temp1>=81 && temp1<=85);
{
//output_low(rodar_motor);
//delay_ms(2000);
output_high(esvaziar_tanquinho);
}
while(temp1>=86 && temp1<=100);
{
output_low(esvaziar_tanquinho);
delay_ms(2000);
output_high(encher_tanquinho);
}
}
break;
}
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_64);
set_timer0(131);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab
// TODO: USER CODE!!
while(true)
{
output_low(rodar_motor);
output_low(esvaziar_tanquinho);
output_low(encher_tanquinho);
if(input(programa_1)==0){
processo_normal();
a=1;
}
//if(input(nivel_agua)==0){ // esta comentado a espera de encontrar a maneira certa de se fazer!!!
//processo_normal();
//a=2;
//}
//
}
}
Sera que alguem pode me dar uma luz do que esta errado ou faltando????
O programa faz tudo certo ate chegar no local acima comentado.