#include <16f877.h>
#device ADC=8 // 8-bit ADC
#fuses XT, NOWDT, NOPROTECT, NOBROWNOUT, NOLVP, NOPUT, NOWRT, NODEBUG, NOCPD
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, stop=1)
#use fast_io(a) // Perform of I/O for Port A
#use standard_io(b)
//#use standard_io(c)
int right=0;
int left=0;
float angle_1=0;
float angle_2=0;
float diff=0;
int go=0;
float angle=0;
#int_rb
void rb_isr()
{
if(input(PIN_B4)==1||input(PIN_B5)==1)
{
if(right==0&&left==0)
{
if((input(PIN_B4)==1)&&(input(PIN_B5)==0)) //Eger vurus yeni ise burada sag veya soldan geldýgýný anlýcak
{
puts("\rright swing");
right=1;
//goto sag;
}
if((input(PIN_B4)==0)&&(input(PIN_B5)==1))
{
puts("\rleft swing");
left=1;
//goto sol;
}
}
if (right==1&&left==0)
{
right:
if((input(PIN_B4)==1)&&(input(PIN_B5)==0)) //ýlk sensor kontrolu
{
puts("right sensor");
angle_1=angle; //ilk açýyý al
}
if((input(PIN_B4)==0)&&(input(PIN_B5)==1)) //Eger 2.sensor aktif ise buradan 2. aciyi alacak.
{ //eger sensör rangeleri birbirini kapsar ise sagi buraya koyabilirz
puts("left sensor");
angle_2=angle;
diff=angle_2-angle_1;
go=1; //ýsýmýzýn býttýgýný programa solucek degýsken
right=0; //býr sonraki vurus icin degiþkeni sýfýrla
}
}
if (right==0&&left==1)
{
left:
if((input(PIN_B5)==1)&&(input(PIN_B4)==0)) //ýlk sensor kontrolu
{
puts("left sensor");
angle_1=angle; //ilk açýyý al
}
if((input(PIN_B5)==0)&&(input(PIN_B4)==1)) //Eger 2.sensor aktif ise buradan 2. aciyi alacak.
{ //eger sensör rangeleri birbirini kapsar ise sagi buraya koyabilirz
puts("right sensor");
angle_2=angle;
diff=angle_2-angle_1;
left=0; //býr sonraki vurus icin degiþkeni sýfýrla
go=1; //ýsýmýzýn býttýgýný programa solucek degýsken
}
}
}
}
#int_ext
void ext_isr()
{
if(input(PIN_B1)==1)
angle=angle+.1;
else
angle=angle-.1;
}
void main ()
{
float battery;
float angle_control;
int battery_status;
angle_control=angle;
set_tris_A(00000001);
// set_tris_B(00110011);
setup_adc(ADC_CLOCK_INTERNAL); // ADC clock frequency is equal internal clock frequency
setup_adc_ports(AN0); // AN0 is Analog.
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_RB);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
ext_int_edge(H_TO_L);
while(TRUE)
{
angle=0;
set_adc_channel(0);
delay_us(10);
battery = read_adc();
if(battery>=250)
battery_status=10;
else if(battery>=225)
battery_status=9;
else if(battery>=200)
battery_status=8;
else if(battery>=175)
battery_status=7;
else if(battery>=150)
battery_status=6;
else if(battery>=125)
battery_status=5;
else if(battery>=100)
battery_status=4;
else if(battery>=75)
battery_status=3;
else if(battery>=50)
battery_status=2;
else if(battery>=25)
battery_status=1;
else if(battery>=0)
battery_status=0;
puts("battery_status");
printf("%d\r",battery_status);
output_C(0x00);
while((right==0)&&(left==0));
while(go==0)
{
while(angle_control==angle);
angle_control=angle;
//printf("%f",angle_control);
}
//disable_interrupts(INT_RB);
puts("angle difference");
printf("%f\r\r",diff);
right=0;
left=0;
go=0;
}
}