Çizgi İzleyen R. Yapımı 3

*Program CCS C derleyicisinde yazılmıştır.
On-Off Kontrol programı
#include <16F877A.h>
#device adc=10
#FUSES HS //High speed Osc (> 4mhz)
 
#use delay(clock=20000000)
 
#use fast_io (a)
#use fast_io (c)
 
void main()
{
    set_tris_a(0xFF);
    set_tris_c(0xF0);
    while (true)
    {
        if(input(pin_a0)==1)
        {
            output_c(0x0a); // Sağ geri sol ileri
        }
 
        if(input(pin_a1)==1)
        {
            output_c(0x02); // Sağ duruyor sol ileri
        }
 
        if(input(pin_a2)==1)
        {
            output_c(0x06); // Sağ ileri sol ileri
        }
 
        if(input(pin_a3)==1)
        {
            output_c(0x04); // Sağ ileri sol duruyor
        }
 
        if(input(pin_a5)==1)
        {
            output_c(0x05); // Sağ ileri sol geri
        }
    }
}
PWM programı
#include <16F877A.h>
#device adc=10
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
 
#use delay(clock=20000000)
 
#use fast_io(a)
#use fast_io(c)
unsigned int8 sensorler=0,solpwm=0,sagpwm=0;
 
void main()
{
   setup_timer_2(T2_DIV_BY_1,249,1); //50.0 us overflow, 50.0 us interrupt
   setup_ccp1(CCP_PWM); // ccp1 ucu pwm çıkışı olarak ayarlandı
   setup_ccp2(CCP_PWM); // ccp2 ucu pwm çıkışı olarak ayarlandı
   set_tris_a(0xFF); // a portunu giriş olarak ayarla
   set_tris_c(0xF0);
 
   while(true) //sonsuz döngü
   {
       sensorler = input_a(); // A porundaki tüm pinleri oku
       sensorler = sensorler * "b00101111"; // Sensörden gelen değerleri maskeleyerek al
 
       // birinci ifade beyaz zemin üzeri siyah çizgi için
       // ikinci ifade siyah zemin üzerine beyaz çizgi için
       //Düz git
       if(sensorler=="b00000100" || sensorler=="b00101011")
       {
           solpwm=990;
           sagpwm=990;
       }
       //sola dön vites1
       if(sensorler=="b00000110" || sensorler=="b00101001")
       {
           solpwm=700;
           sagpwm=990;
       }
       //saga dön vites1
       if(sensorler=="b00001100" || sensorler=="b00100011")
       {
           solpwm=990;
           sagpwm=700;
       }
       //sola dön vites2
       if(sensorler=="b00000010" || sensorler=="b00101101")
       {
           solpwm=500;
           sagpwm=990;
       }
       //saga dön vites2
       if(sensorler=="b00001000" || sensorler=="b00100111")
       {
           solpwm=990;
           sagpwm=500;
       }
       //sola dön vites3
       if(sensorler=="b00000011" || sensorler=="b00101100")
       {
           solpwm=300;
           sagpwm=990;
       }
       //saga dön vites3
       if(sensorler=="b00101000" || sensorler=="b00000111")
       {
           solpwm=990;
           sagpwm=300;
       }
       //sola dön vites4
       if(sensorler=="b00100000" || sensorler=="b00001111")
       {
           solpwm=0;
           sagpwm=990;
       }
       //saga dön vites4
       if(sensorler=="b00000001" || sensorler=="b00101110")
       {
           solpwm=990;
           sagpwm=0;
       }
       set_pwm1_duty(solpwm);
       set_pwm2_duty(sagpwm);
    }
}
Projenin proteus dosyalarını buradan indirebilirsiniz.
iNdirme Sitesi: http://www.emrahbudak.com/indir/cizgi_izleyen_robot.rar

Yorum Gönder

0 Yorumlar