///////varibale///////
int pesos;
int T1=75; //timer 20
int T2=35; //timer 10
int T3=22; //timer 5
/////banderas////////
enum pasos_t {INICIO, MONTO, DESCARGA, VUELTO};
///timer1////
#int_timer1 //timer principal.
void timer1_isr()
{
clear_interrupt(int_timer1); // limpio flag
set_timer1(3036);
if(time !=0) //si la vuelta da 74, en segundos seria 37, {
time--;
output_high(pin_c1); //enciende electrovalvula por que time es diferente a 0
if(time == 0) tiempo_carga
= 1; //bandera para que al termino de timer me envie a la funcion de proceso_concluido. }
else
{
output_low(pin_c1); //cuando time1 sea igual a cero apaga electrovalvula
}
}
////inicio de programa//// (aqui meincorporo para restablecer mis nuevas cargas.
void inicio_programa(void)
{
pesos=0; ///se guardan los pulsos de moneda
delay_ms(100);
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("PLANTA AGUA ZERO");
lcd_gotoxy(2,2);
lcd_putc("Deposite Monto");
}
///////proceso concluido//////
void proceso_concluido(void)
{
tiempo_carga=0;
lcd_putc("\f");
delay_ms(100);
lcd_gotoxy(4,1);
lcd_putc("LISTO..."); //imprime mensaje
lcd_gotoxy(1,2);
lcd_putc("RETIRAR ENVASE");
delay_ms(2500);
lcd_putc("\f");
delay_ms(100);
lcd_gotoxy(4,1);
lcd_putc("GRACIAS"); //imprime mensaje
lcd_gotoxy(1,2);
lcd_putc("POR SU COMPRA");
delay_ms(2500);
}
void main (void)
{
enum pasos_t pasos = INICIO;
tiempo_carga = 0;
set_tris_a(0xff);
set_tris_c(0x00);
set_tris_b(0xff);
output_low(PIN_C1); //electrovaula de llenado
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //cargo valor del Timer 1 para medios egundo
set_timer1(3036);
clear_interrupt(int_timer1); // limpio flag
enable_interrupts(INT_TIMER1);
enable_interrupts(global);
lcd_init();
lcd_gotoxy(2,1);
lcd_putc("PURIFICADORA");
lcd_gotoxy(3,2);
lcd_putc("PLANTA ZERO");
delay_ms(3000);
while (true){
switch(pasos)
{
case INICIO:
inicio_programa();
pasos = MONTO;
break;
case MONTO:
if(input(PIN_B2))
{
pesos++;
lcd_putc("\f");
lcd_gotoxy(1,1);
lcd_putc("Cant. Ingresada");
lcd_gotoxy(2,2);
printf(lcd_putc
,"$:%u",pesos
); }
// Se presiono algun boton seleccionando la cantidad?
if(input(PIN_A1)) //20 L
{
// Hay suficiente plata para 20L
if(pesos >= PR1)
{
pasos = DESCARGA;
pesos -= PR1;
lcd_gotoxy(1,1);
lcd_putc("Descargando");
}
else
{
mensaje_dinero_insuficiente();
}
} else if(input(PIN_A2)) //10 L
{
// Hay suficiente plata para 10L
if(pesos >= PR2)
{
pasos = DESCARGA;
pesos -= PR2;
lcd_gotoxy(1,1);
lcd_putc("Descargando");
}
else
{
mensaje_dinero_insuficiente();
}
} else if(input(PIN_A3)) //5 L
{
// Hay suficiente plata para 10L
if(pesos >= PR3)
{
pasos = DESCARGA;
pesos -= PR3;
lcd_gotoxy(1,1);
lcd_putc("Descargando");
}
else
{
mensaje_dinero_insuficiente();
}
break;
case DESCARGA:
// Necesito revisar si siguen poniendo monedas si o si
if(PIN_B2)
{
pesos++;
delay_ms(10);
}
if(tiempo_carga == 1)
{
tiempo_carga = 0;
proceso_concluido();
pasos = VUELTO;
}
case VUELTO:
lcd_gotoxy(1,1);
lcd_putc("Su vuelto es de");
lcd_gotoxy(2,2);
printf(lcd_putc
,"$:%u",pesos
); devolver_plata();
delay_ms(2000);
pasos = INICIO;
break;
default:
pasos = INICIO;
break;
}
}
}