Thursday, January 20, 2022

Line Follower Robot using Arduino


This project was a part of Line Follower Robot Competition  







Real Time Clock With PIC16F877A



This Project will demonstrate the real time clock interface with PIC 16F877A


To do this project we need following software:   


   1. MikroC pro for PIC (student verison)
   2. Proteus 8 professional

CODE


//DS1307 Real Time Clock with PIC16F877A

 

// LCD module connections

 

sbit LCD_RS at RD0_bit;

sbit LCD_EN at RD1_bit;

sbit LCD_D4 at RD2_bit;

sbit LCD_D5 at RD3_bit;

sbit LCD_D6 at RD4_bit;

sbit LCD_D7 at RD5_bit;

 

sbit LCD_RS_Direction at TRISD0_bit;

sbit LCD_EN_Direction at TRISD1_bit;

sbit LCD_D4_Direction at TRISD2_bit;

sbit LCD_D5_Direction at TRISD3_bit;

sbit LCD_D6_Direction at TRISD4_bit;

sbit LCD_D7_Direction at TRISD5_bit;

 

// End LCD module connections

 unsigned char *text, second, second10, minute, minute10,

               hour, hour10, date, date10, month, month10,

               year, year10, day, i = 0;

 

 void display()

 {

    //Split data into tow parts

    second10  =  (second & 0x70) >> 4;

    second = second & 0x0F;

    minute10  =  (minute & 0x70) >> 4;

    minute = minute & 0x0F;

    hour10  =  (hour & 0x30) >> 4;

    hour = hour & 0x0F;

    date10  =  (date & 0x30) >> 4;

    date = date & 0x0F;

    month10  =  (month & 0x10) >> 4;

    month = month & 0x0F;

    year10  =  (year & 0xF0) >> 4;

    year = year & 0x0F;

 

    //Display Time

    Lcd_Chr(1, 13, second + 48);

    Lcd_Chr(1, 12, second10 + 48);

    Lcd_Chr(1, 10, minute + 48);

    Lcd_Chr(1, 9, minute10 + 48);

    Lcd_Chr(1, 7, hour + 48);

    Lcd_Chr(1, 6, hour10 + 48);

    //Display calendar

    Lcd_Chr(2, 7, date + 48);

    Lcd_Chr(2, 6, date10 + 48);

    Lcd_Chr(2, 10, month + 48);

    Lcd_Chr(2, 9, month10 + 48);

    Lcd_Chr(2, 15, year + 48);

    Lcd_Chr(2, 14, year10 + 48);

  }  

 void main()

 {

     LCD_Init();

     LCD_Cmd(_LCD_CURSOR_OFF);

     LCD_Cmd(_LCD_CLEAR);

     LCD_Out(1,1, "REAL TIME CLOCK");

     LCD_Out(2,1, "GSM MAHFUZ LIKHON");

     delay_ms(2000);

     LCD_Cmd(_LCD_CLEAR);

 

     TRISB = 3;

     Lcd_Init();                // Initialize LCD

     Lcd_Cmd(_LCD_CLEAR);       // Clear LCD display

     Lcd_Cmd(_LCD_CURSOR_OFF);  // Turn cursor off

     I2C1_Init(100000);         // initialize I2C at 100KHz

     return_:

     text = "TIME:  :  :" ;

     Lcd_Out(1, 1, text);

     text = "DATE:  /  /20" ;

     Lcd_Out(2, 1, text);

     write_value(0, 0);   //Reset seconds and start oscillator

    

     while(1)

     {

       if(i == 1)

       {

         Lcd_Cmd(_LCD_CLEAR);

         text = "Adjust Minute:";

         Lcd_Out(1, 2, text);

         minute = minute + minute10 * 10;

         while(1){

         if (Button(&PORTB, 0, 100, 0)) i++;

         if(i!=1){

         minute = ((minute/10) << 4) + (minute % 10);

         write_value( 1 , minute);

         goto return_;}

         if (Button(&PORTB, 1, 100, 0)) minute++;

         if (minute > 59) minute = 0;

         Lcd_Chr(2, 8, (minute/10) + 48);

         Lcd_Chr(2, 9, (minute % 10) + 48);}

       }

      

       if(i == 2)

       {

         Lcd_Cmd(_LCD_CLEAR);

         text = "Adjust Hour:";

         Lcd_Out(1, 2, text);

         hour = hour + hour10 * 10;

         while(1){

         if (Button(&PORTB, 0, 100, 0)) i++;

         if(i!=2){

         hour = ((hour/10) << 4) + (hour % 10);

         write_value( 2 , hour);

         goto return_;}

         if (Button(&PORTB, 1, 100, 0)) hour++;

         if (hour > 23) hour = 0;

         Lcd_Chr(2, 8, (hour/10) + 48);

         Lcd_Chr(2, 9, (hour % 10) + 48);}

       }

      

       if(i == 3)

       {

         Lcd_Cmd(_LCD_CLEAR);

         text = "Adjust Date:";

         Lcd_Out(1, 2, text);

         date = date + date10 * 10;

         while(1){

         if (Button(&PORTB, 0, 100, 0)) i++;

         if(i!=3){

         date = ((date/10) << 4) + (date % 10);

         write_value( 4 , date);

         goto return_;}

         if (Button(&PORTB, 1, 100, 0)) date++;

         if (date > 31) date = 1;

         Lcd_Chr(2, 8, (date/10) + 48);

         Lcd_Chr(2, 9, (date % 10) + 48);}

       }

      

       if(i == 4)

       {

         Lcd_Cmd(_LCD_CLEAR);

         text = "Adjust Month:";

         Lcd_Out(1, 2, text);

         month = month + month10 * 10;

         while(1){

         if (Button(&PORTB, 0, 100, 0)) i++;

         if(i!=4){

         month = ((month/10) << 4) + (month % 10);

         write_value( 5 , month);

         goto return_;}

         if (Button(&PORTB, 1, 100, 0)) month++;

         if (month > 12) month = 1;

         Lcd_Chr(2, 8, (month/10) + 48);

         Lcd_Chr(2, 9, (month % 10) + 48);}

       }

      

       if(i == 5)

       {

         Lcd_Cmd(_LCD_CLEAR);

         text = "Adjust Year:";

         Lcd_Out(1, 2, text);

         year = year + year10 * 10;

         while(1){

         if (Button(&PORTB, 0, 100, 0)) {i++;

         if (i > 5) i = 0;}

         if(i!=5){

         year = ((year/10) << 4) + (year % 10);

         write_value( 6 , year);

         goto return_;}

         if (Button(&PORTB, 1, 100, 0)) year++;

         if (year > 99) year = 0;

         Lcd_Chr(2, 7, 2 + 48);

         Lcd_Chr(2, 8, 0 + 48);

         Lcd_Chr(2, 9, (year/10) + 48);

         Lcd_Chr(2, 10, (year % 10) + 48);}

       }

      

       if (Button(&PORTB, 0, 100, 0)) i++;

     

        display();

    }

}


Schematic






Video










Line Follower Robot using Arduino

This project was a part of Line Follower Robot Competition