Rukawa+
Üye
- Katılım
- 23 Kas 2013
- Mesajlar
- 1
- Puanları
- 1
- Yaş
- 31
Meraba arkadaşlar elimde çizgi izleyen bir robot var C dilinde yazılmış bir program ile sorunum ise bunun algoritmasını nasıl çıkarabilirim ben biraz uğraştım fakat prof. bir şekilde yazıldğı için pek hakim olamadım yardımcı olan herkese şimdiden teşekkür ederim
#include <18f452.h> ; PIC ı başlat
#use delay(clock=40000000) ; kullanılacak olan kristalin 4MHz olduğunu anlatmaktadır
#FUSES NOWDT,H4,noPROTECT,BROWNOUT,BORV20,PUT,NOLVP ; Yardımcı komutlar
#use fast_io(d) ; Port yönlendirme komutu d için geçerli
unsigned int16 sag_hiz=1020; ; değişken bildirimleri yapıldı
unsigned int16 sol_hiz=1020;
int sag=0;
int sensor=0;
void hiz_hesapla()
{
switch (sensor) {
case 0b00000001: sag_hiz=64; sag=0; sol_hiz=960; break;
case 0b00000011: sag_hiz=128; sol_hiz=896; break;
case 0b00000010: sag_hiz=192; sol_hiz=832; break;
case 0b00000110: sag_hiz=256; sol_hiz=768; break;
case 0b00000100: sag_hiz=320; sol_hiz=704; break;
case 0b00001100: sag_hiz=384; sol_hiz=640; break;
case 0b00001000: sag_hiz=448; sol_hiz=576; break;
case 0b00011000: sag_hiz=512; sol_hiz=512; break;
case 0b00010000: sag_hiz=576; sol_hiz=448; break;
case 0b00110000: sag_hiz=640; sol_hiz=384; break;
case 0b00100000: sag_hiz=704; sol_hiz=320; break;
case 0b01100000: sag_hiz=768; sol_hiz=256; break;
case 0b01000000: sag_hiz=832; sol_hiz=192; break;
case 0b11000000: sag_hiz=896; sol_hiz=128; break;
case 0b10000000: sag_hiz=960; sag=1; sol_hiz=64; break;
case 0b00000000: if sag==1 sag_hiz=1024; sol_hiz=0; else
sag_hiz=1024; sol_hiz=0; break;
}
}
void main ()
{
set_tris_b(0x00); b portunu çıkış yap
set_tris_d(0xff); d portunu giriş yap
setup_ccp1(CCP_PWM); CCP1 PWM modülünü aç
setup_ccp2(CCP_PWM); CCP2 PWM modulünü aç
set_pwm1_duty(0);
set_pwm2_duty(0);
setup_timer_2(T2_DIV_BY_16, 255, 1);
enable_interrupts(global);
while(TRUE)
{
sensor=input_d();
hiz_hesapla();
set_pwm1_duty((unsigned int32)(sag_hiz));
set_pwm2_duty((unsigned int32)(sol_hiz));
output_b(sensor);
}
}
#include <18f452.h> ; PIC ı başlat
#use delay(clock=40000000) ; kullanılacak olan kristalin 4MHz olduğunu anlatmaktadır
#FUSES NOWDT,H4,noPROTECT,BROWNOUT,BORV20,PUT,NOLVP ; Yardımcı komutlar
#use fast_io(d) ; Port yönlendirme komutu d için geçerli
unsigned int16 sag_hiz=1020; ; değişken bildirimleri yapıldı
unsigned int16 sol_hiz=1020;
int sag=0;
int sensor=0;
void hiz_hesapla()
{
switch (sensor) {
case 0b00000001: sag_hiz=64; sag=0; sol_hiz=960; break;
case 0b00000011: sag_hiz=128; sol_hiz=896; break;
case 0b00000010: sag_hiz=192; sol_hiz=832; break;
case 0b00000110: sag_hiz=256; sol_hiz=768; break;
case 0b00000100: sag_hiz=320; sol_hiz=704; break;
case 0b00001100: sag_hiz=384; sol_hiz=640; break;
case 0b00001000: sag_hiz=448; sol_hiz=576; break;
case 0b00011000: sag_hiz=512; sol_hiz=512; break;
case 0b00010000: sag_hiz=576; sol_hiz=448; break;
case 0b00110000: sag_hiz=640; sol_hiz=384; break;
case 0b00100000: sag_hiz=704; sol_hiz=320; break;
case 0b01100000: sag_hiz=768; sol_hiz=256; break;
case 0b01000000: sag_hiz=832; sol_hiz=192; break;
case 0b11000000: sag_hiz=896; sol_hiz=128; break;
case 0b10000000: sag_hiz=960; sag=1; sol_hiz=64; break;
case 0b00000000: if sag==1 sag_hiz=1024; sol_hiz=0; else
sag_hiz=1024; sol_hiz=0; break;
}
}
void main ()
{
set_tris_b(0x00); b portunu çıkış yap
set_tris_d(0xff); d portunu giriş yap
setup_ccp1(CCP_PWM); CCP1 PWM modülünü aç
setup_ccp2(CCP_PWM); CCP2 PWM modulünü aç
set_pwm1_duty(0);
set_pwm2_duty(0);
setup_timer_2(T2_DIV_BY_16, 255, 1);
enable_interrupts(global);
while(TRUE)
{
sensor=input_d();
hiz_hesapla();
set_pwm1_duty((unsigned int32)(sag_hiz));
set_pwm2_duty((unsigned int32)(sol_hiz));
output_b(sensor);
}
}