#include <16F877A.h>
#fuses HS, NOWDT, NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv= PIN_C7,bits=8, parity=N, stop=1)

// -------- LCD (4-bit mode) --------
#define LCD_RS_PIN PIN_D0
#define LCD_ENABLE_PIN PIN_D2
#define LCD_RW_PIN PIN_D1


#define LCD_DATA4 PIN_D3
#define LCD_DATA5 PIN_D4
#define LCD_DATA6 PIN_D5
#define LCD_DATA7 PIN_D6

#include <lcd.c>



// -------- Define pins --------
#define LED1 PIN_B0
#define LED2 PIN_B1
#define LED3 PIN_B2

#define SW1 PIN_C0
#define SW2 PIN_C1
#define SW3 PIN_C2

//-------- Define MOTOR ---------
#define f1 PIN_B3
#define f2 PIN_B5

void main()
{
   // -------- Set ports --------
   set_tris_b(0x00);   // LEDs output
   set_tris_c(0x07);   // switches input
   set_tris_d(0x00);   // LCD output
     
   lcd_init();

   // -------- Initial state --------
   output_low(LED1);
   output_low(LED2);
   output_low(LED3);
   output_low(f1);
   output_low(f2);

  
   
   lcd_putc("\fSystem Ready");
   printf("System Ready!\r\n");
   delay_ms(1500);
   
   
      // -------- STEP 1: ENGINE START --------
      
      
         while(!input(SW1));
               delay_ms(50);
               output_high(LED1);
               lcd_putc("\fEngine Started");   
               printf("Engine Started!\r\n");
               delay_ms(1500);
            
      // -------- STEP 2: COOLANT --------
   
      
         while(!input(SW2));
               delay_ms(50);
               output_high(LED2);
               lcd_putc("\fCoolant OK");
               printf("Coolant OK!\r\n");
               delay_ms(1500);

      // -------- STEP 3: FAN --------
      
         while(!input(SW3));
               delay_ms(50);
               output_high(LED3);
               lcd_putc("\fFan Activated\nMotor Running");
               printf("Fan Activated!\r\n");
          printf("FMotor Running\r\n");
          output_high(f1);
               output_low(f2);
          delay_ms(1500);

           
               delay_ms(100);
               output_low(LED3);
               delay_ms(100);
               output_high(LED3);
               delay_ms(100);
               output_low(LED3);
               delay_ms(100);
               output_high(LED3);
               delay_ms(100);
               output_low(LED1);
               output_low(LED2);
               output_low(LED3); 
          
       // -------- Shutdown Ending --------
                
               lcd_putc("\fALERT!");
               printf("ALERT!\r\n");
               delay_ms(1500);
       // -------- Shutdown done --------  
               delay_ms(100);     
               output_low(LED1);
               output_low(LED2);
               output_low(LED3);
               lcd_putc("\fShutdown Done!");
               printf("Shutdown Done!\r\n");
         
               output_low(f1);
               output_low(f2);
               
        while(TRUE);       
}


