AUTOMATIC BRAKE SYSTEM



PROGRAM

 int c1=0,speed;
 char distance[8];
 void usinit(void);
 void uscheck(void);

// LCD module connections
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;

// End LCD module connections
void InitMain() {
PWM1_Init(5000);
PWM2_Init(5000);
}
void main(){
trisc.f3=0;  trisc.f0=0;
  portc.f0=0;  portc.f3=0;
     InitMain();
     PWM1_Start();
     PWM2_Start();
  Lcd_Init();                        // Initialize LCD
  Lcd_Cmd(_LCD_CLEAR);               // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off
  usinit();
  adcon1=7;
  trise.f2=0;
  trisc.f3=0;  trisc.f0=0;
  portc.f0=0;  portc.f3=0;
  trisb.f7=0;  portb.f7=0;
  while(1)
  {      
uscheck();
  Lcd_Cmd(_LCD_CLEAR);
          Lcd_Out(2,1,"DISTANCE=");          Lcd_Out_cp(distance);
          
           if(c1<30){porte.f2=1;portb.f7=0; Lcd_Out(1,1,"OBSTACLE CLOSER");} else { porte.f2=0;  portb.f7=1; }
           speed=c1*4;
           if (speed>255) speed=255;
           PWM1_Set_Duty(speed); PWM2_Set_Duty(speed);

  }
}


void uscheck(void)
{
 portb.f2=1  ;
  delay_us(10);
   portb.f2=0  ;
   while(!portb.f3);
   c1=0;
   while(portb.f3) {c1++;  delay_us(58); }        // 1CM ==58US
      IntToStr(c1, distance);
      delay_ms(200);
}

void usinit(void)
{
      trisb.f3=1; //echoPin
      trisb.f2=0;   //trigPin
}

CIRCUIT