Bọn e đang làm một con robot dò đường. Mạch, code xong
nhưng nó vẫn chưa hoàn thiện tốt
Xe của em khi gặp bẫy chữ T có khả năng dò lùi nhưng do chưa phát triển tốt thời gian nó ra khỏi bẫy lớn.
Còn đây là code
#include <REGX52.h>
#define motorthuan1 P0_0
#define motornguoc1 P0_2
#define motorthuan2 P0_3
#define motornguoc2 P0_5
#define pwm1 P0_1
#define pwm2 P0_4
#define phai2 P2_0
#define phai1 P2_1
#define phai0 P2_2
#define trai0 P2_3
#define trai1 P2_4
#define trai2 P2_5
unsigned char dem1=0,dem2=0;
unsigned char xungphai=0,xungtrai=0;
void delayms(int ms) //ham tao tre khoang 1ms
{
int i,j;
for(i=0;i<ms;i++)
for(j=0;j<85;j++)
{}
}
void khoitao(void)
{
P1_5=0;
EA=0;
TMOD=0x02;
TL0=0xF0;
TH0=0xF0;
ET0=1;
EX1=1;
EA=1;
TR0=1;
}
void timer0(void)interrupt 1
{
TR0=0;
TF0=0;
dem1++;
dem2++;
if (dem1<=xungtrai)
{
P0_4=1;
}
else
{
P0_4=0;
}
if (dem1==10) dem1=0;
if (dem2<=xungphai)
{
P0_1=1;
}
else
{
P0_1=0;
}
if (dem2==10) dem2=0;
TR0=1;
}
/*void start(void) interrupt 2
{
xungtrai=0;
xungphai=0;
} */
void dung(void)
{
xungphai=0;
xungtrai=0;
}
void main (void)
{
khoitao();
//while(P1_3==1);
motorthuan1=1;
motornguoc1=0;
motorthuan2=1;
motornguoc2=0;
delayms(100);
for(
{
while((trai1==0)&&(trai0==0)&&(phai0==0)&&(phai1== 1)) //lech trai nhieu nhat
{
P1=0xF2;
xungtrai=8;
xungphai=5;
/* if (trai1==1&&trai0==1&&phai0==1&&phai1==1) //chay ra khoi duong
{
P1=0xF1;
delayms(5);
xungtrai=10;
xungphai=3;
delayms(15); //chay vao trong 15ms
while (trai1==1&&trai0==1&&phai0==1&&phai1==1)
{
P1=0xF1;
xungtrai=8; //tiep tuc quay vao
xungphai=4;
}
while(phai0==1&&phai1==0) //phai bat line
{
P1=0xF3;
xungtrai=5;
xungphai=7;
delayms(10);
}
} */
}
while(trai1==0&&trai0==0&&phai0==1&&phai1==1) //lech trai vua
{
P1=0xF3;
xungtrai=8;
xungphai=6;
}
while(trai1==0&&trai0==0&&phai0==1&&phai1==0) //lechtrai hiem
{
xungtrai=7;
xungphai=6;
}
while(trai1==0&&trai0==1&&phai0==1&&phai1==1) //lech trai it nhat
{
P1=0xF4;
xungtrai=8;
xungphai=7;
}
while(trai1==0&&trai0==1&&phai0==1&&phai1==0) //ko lech
{
P1=0xF5;
xungtrai=9;
xungphai=9;
}
while(trai1==1&&trai0==0&&phai0==0&&phai1==0) //lech phai nhieu
{
P1=0xF8;
xungphai=8;
xungtrai=5;
/*if (trai1==1&&trai0==1&&phai0==1&&phai1==1) //chay ra khoi duong
{
P1=0xF1;
delayms(5);
xungtrai=3;
xungphai=10;
delayms(15); //chay vao trong 15ms
while (trai1==1&&trai0==1&&phai0==1&&phai1==1)
{
P1=0xF1;
xungtrai=4; //tiep tuc quay vao
xungphai=8;
}
while(trai1==0&&trai0==1) //trai bat line
{
P1=0xF8;
xungtrai=7;
xungphai=5;
delayms(10);
}
} */
}
while(trai1==1&&trai0==1&&phai0==0&&phai1==0) //lech phai vua
{
P1=0xF7;
xungphai=8;
xungtrai=5;
}
while(trai1==0&&trai0==1&&phai0==0&&phai1==0) //lechphai hiem
{
xungphai=8;
xungtrai=5;
}
while(trai1==1&&trai0==1&&phai0==1&&phai1==0) //lech phai it
{
P1=0xF6;
xungphai=8;
xungtrai=7;
}
while(trai1==1&&trai0==1&&phai0==1&&phai1==1) //tranh bay nga tu
{
P1=0xF0;
xungtrai=9;
xungphai=9;
}
if (trai2==0&&trai1==0&&trai0==0&&phai0==0&&phai1==0& &phai2==0)
{ delayms(5);
while(trai2==0&&trai1==0&&trai0==0&&phai0==0&&phai 1==0&&phai2==0)
{ P1=0xF1;
dung(); //dung xe
delayms(30);
motorthuan1=0; //dy lui
motornguoc1=1;
motorthuan2=0;
motornguoc2=1;
xungtrai=8;
xungphai=8;
delayms(10);
for(
{
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==0&&trai0==1&&phai0==1&&phai 1==0&&phai2==0) //ko lech
{
P1=0xF5;
xungtrai=9;
xungphai=9;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&(trai1==0)&&(trai0==0)&&(phai0==0) &&(phai1==1)&&phai2==0) //lech trai nhieu nhat
{
P1=0xF2;
xungtrai=6;
xungphai=9;
/* if (trai1==1&&trai0==1&&phai0==1&&phai1==1) //chay ra khoi duong
{
P1=0xF1;
delayms(5);
xungtrai=10;
xungphai=3;
delayms(15); //chay vao trong 15ms
while (trai1==1&&trai0==1&&phai0==1&&phai1==1)
{
P1=0xF1;
xungtrai=8; //tiep tuc quay vao
xungphai=4;
}
while(phai0==0&&phai1==1) //phai bat line
{
P1=0xF2;
xungtrai=5;
xungphai=7;
}
} */
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==0&&trai0==0&&phai0==1&&phai 1==1&&phai2==0) //lech trai vua
{
P1=0xF3;
xungtrai=5;
xungphai=8;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==0&&trai0==1&&phai0==0&&phai 1==0&&phai2==0) //lechphai hiem
{
xungphai=5;
xungtrai=8;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==0&&trai0==1&&phai0==1&&phai 1==1&&phai2==0) //lech trai it nhat
{
P1=0xF4;
xungtrai=9;
xungphai=9;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==0&&trai0==0&&phai0==1&&phai 1==0&&phai2==0) //lechtrai hiem
{
xungtrai=9;
xungphai=9;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&trai1==1&&trai0==0&&phai0==0&&phai1 ==0&&phai2==0) //lech phai nhieu
{
P1=0xF8;
xungphai=5;
xungtrai=8;
/*if (trai1==1&&trai0==1&&phai0==1&&phai1==1) //chay ra khoi duong
{
P1=0xF1;
delayms(5);
xungtrai=3;
xungphai=10;
delayms(15);
//chay vao trong 15ms
while (trai1==0&&trai0==0&&phai0==0&&phai1==0)
{
P1=0xF1;
xungtrai=4; //tiep tuc quay vao
xungphai=8;
}
while(trai1==1&&trai0==0) //trai bat line
{
P1=0xF8;
xungtrai=7;
xungphai=5;
}
} */
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==1&&trai0==1&&phai0==0&&phai 1==0&&phai2==0) //lech phai vua
{
P1=0xF7;
xungphai=4;
xungtrai=6;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==1&&trai0==1&&phai0==1&&phai 1==0&&phai2==0) //lech phai it
{
P1=0xF6;
xungphai=6;
xungtrai=8;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==1&&trai0==1&&phai0==1&&phai 1==1&&phai2==0)
{P1=0xF0;
xungtrai=8;
xungphai=8;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0)
{
P1=0xF9;
dung();
delayms(10);
motorthuan1=1; //dao chieu dong co
motornguoc1=0;
motorthuan2=0;
motornguoc2=1;
xungphai=8;
xungtrai=8;
while(trai1==1||trai0==1) delayms(10) ;
dung();
//delayms(50);
motorthuan2=1;
motornguoc2=0;
xungtrai=8;
xungphai=8;
delayms(10);
}
if(trai2==0&&phai1==1&&phai2==1&&trai1==0)
{
P1=0xF9;
dung();
//delayms(10);
motorthuan1=0; //dao chieu dong co
motornguoc1=1;
motorthuan2=1;
motornguoc2=0;
xungphai=8;
xungtrai=8;
while (phai1==1||phai2==1)delayms(10) ;
dung();
//delayms(50);
motorthuan1=1;
motornguoc1=0;
xungtrai=8;
xungphai=8;
//delayms(10);
}
}
}
}
}
Mọi người có thể giúp em tìm gia phương hướng để nó tốt hơn
Cảm biến: 6 sensor đặt thẳng hàng.......
tks
nhưng nó vẫn chưa hoàn thiện tốt
Xe của em khi gặp bẫy chữ T có khả năng dò lùi nhưng do chưa phát triển tốt thời gian nó ra khỏi bẫy lớn.
Còn đây là code
#include <REGX52.h>
#define motorthuan1 P0_0
#define motornguoc1 P0_2
#define motorthuan2 P0_3
#define motornguoc2 P0_5
#define pwm1 P0_1
#define pwm2 P0_4
#define phai2 P2_0
#define phai1 P2_1
#define phai0 P2_2
#define trai0 P2_3
#define trai1 P2_4
#define trai2 P2_5
unsigned char dem1=0,dem2=0;
unsigned char xungphai=0,xungtrai=0;
void delayms(int ms) //ham tao tre khoang 1ms
{
int i,j;
for(i=0;i<ms;i++)
for(j=0;j<85;j++)
{}
}
void khoitao(void)
{
P1_5=0;
EA=0;
TMOD=0x02;
TL0=0xF0;
TH0=0xF0;
ET0=1;
EX1=1;
EA=1;
TR0=1;
}
void timer0(void)interrupt 1
{
TR0=0;
TF0=0;
dem1++;
dem2++;
if (dem1<=xungtrai)
{
P0_4=1;
}
else
{
P0_4=0;
}
if (dem1==10) dem1=0;
if (dem2<=xungphai)
{
P0_1=1;
}
else
{
P0_1=0;
}
if (dem2==10) dem2=0;
TR0=1;
}
/*void start(void) interrupt 2
{
xungtrai=0;
xungphai=0;
} */
void dung(void)
{
xungphai=0;
xungtrai=0;
}
void main (void)
{
khoitao();
//while(P1_3==1);
motorthuan1=1;
motornguoc1=0;
motorthuan2=1;
motornguoc2=0;
delayms(100);
for(
{
while((trai1==0)&&(trai0==0)&&(phai0==0)&&(phai1== 1)) //lech trai nhieu nhat
{
P1=0xF2;
xungtrai=8;
xungphai=5;
/* if (trai1==1&&trai0==1&&phai0==1&&phai1==1) //chay ra khoi duong
{
P1=0xF1;
delayms(5);
xungtrai=10;
xungphai=3;
delayms(15); //chay vao trong 15ms
while (trai1==1&&trai0==1&&phai0==1&&phai1==1)
{
P1=0xF1;
xungtrai=8; //tiep tuc quay vao
xungphai=4;
}
while(phai0==1&&phai1==0) //phai bat line
{
P1=0xF3;
xungtrai=5;
xungphai=7;
delayms(10);
}
} */
}
while(trai1==0&&trai0==0&&phai0==1&&phai1==1) //lech trai vua
{
P1=0xF3;
xungtrai=8;
xungphai=6;
}
while(trai1==0&&trai0==0&&phai0==1&&phai1==0) //lechtrai hiem
{
xungtrai=7;
xungphai=6;
}
while(trai1==0&&trai0==1&&phai0==1&&phai1==1) //lech trai it nhat
{
P1=0xF4;
xungtrai=8;
xungphai=7;
}
while(trai1==0&&trai0==1&&phai0==1&&phai1==0) //ko lech
{
P1=0xF5;
xungtrai=9;
xungphai=9;
}
while(trai1==1&&trai0==0&&phai0==0&&phai1==0) //lech phai nhieu
{
P1=0xF8;
xungphai=8;
xungtrai=5;
/*if (trai1==1&&trai0==1&&phai0==1&&phai1==1) //chay ra khoi duong
{
P1=0xF1;
delayms(5);
xungtrai=3;
xungphai=10;
delayms(15); //chay vao trong 15ms
while (trai1==1&&trai0==1&&phai0==1&&phai1==1)
{
P1=0xF1;
xungtrai=4; //tiep tuc quay vao
xungphai=8;
}
while(trai1==0&&trai0==1) //trai bat line
{
P1=0xF8;
xungtrai=7;
xungphai=5;
delayms(10);
}
} */
}
while(trai1==1&&trai0==1&&phai0==0&&phai1==0) //lech phai vua
{
P1=0xF7;
xungphai=8;
xungtrai=5;
}
while(trai1==0&&trai0==1&&phai0==0&&phai1==0) //lechphai hiem
{
xungphai=8;
xungtrai=5;
}
while(trai1==1&&trai0==1&&phai0==1&&phai1==0) //lech phai it
{
P1=0xF6;
xungphai=8;
xungtrai=7;
}
while(trai1==1&&trai0==1&&phai0==1&&phai1==1) //tranh bay nga tu
{
P1=0xF0;
xungtrai=9;
xungphai=9;
}
if (trai2==0&&trai1==0&&trai0==0&&phai0==0&&phai1==0& &phai2==0)
{ delayms(5);
while(trai2==0&&trai1==0&&trai0==0&&phai0==0&&phai 1==0&&phai2==0)
{ P1=0xF1;
dung(); //dung xe
delayms(30);
motorthuan1=0; //dy lui
motornguoc1=1;
motorthuan2=0;
motornguoc2=1;
xungtrai=8;
xungphai=8;
delayms(10);
for(
{
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==0&&trai0==1&&phai0==1&&phai 1==0&&phai2==0) //ko lech
{
P1=0xF5;
xungtrai=9;
xungphai=9;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&(trai1==0)&&(trai0==0)&&(phai0==0) &&(phai1==1)&&phai2==0) //lech trai nhieu nhat
{
P1=0xF2;
xungtrai=6;
xungphai=9;
/* if (trai1==1&&trai0==1&&phai0==1&&phai1==1) //chay ra khoi duong
{
P1=0xF1;
delayms(5);
xungtrai=10;
xungphai=3;
delayms(15); //chay vao trong 15ms
while (trai1==1&&trai0==1&&phai0==1&&phai1==1)
{
P1=0xF1;
xungtrai=8; //tiep tuc quay vao
xungphai=4;
}
while(phai0==0&&phai1==1) //phai bat line
{
P1=0xF2;
xungtrai=5;
xungphai=7;
}
} */
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==0&&trai0==0&&phai0==1&&phai 1==1&&phai2==0) //lech trai vua
{
P1=0xF3;
xungtrai=5;
xungphai=8;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==0&&trai0==1&&phai0==0&&phai 1==0&&phai2==0) //lechphai hiem
{
xungphai=5;
xungtrai=8;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==0&&trai0==1&&phai0==1&&phai 1==1&&phai2==0) //lech trai it nhat
{
P1=0xF4;
xungtrai=9;
xungphai=9;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==0&&trai0==0&&phai0==1&&phai 1==0&&phai2==0) //lechtrai hiem
{
xungtrai=9;
xungphai=9;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&trai1==1&&trai0==0&&phai0==0&&phai1 ==0&&phai2==0) //lech phai nhieu
{
P1=0xF8;
xungphai=5;
xungtrai=8;
/*if (trai1==1&&trai0==1&&phai0==1&&phai1==1) //chay ra khoi duong
{
P1=0xF1;
delayms(5);
xungtrai=3;
xungphai=10;
delayms(15);
//chay vao trong 15ms
while (trai1==0&&trai0==0&&phai0==0&&phai1==0)
{
P1=0xF1;
xungtrai=4; //tiep tuc quay vao
xungphai=8;
}
while(trai1==1&&trai0==0) //trai bat line
{
P1=0xF8;
xungtrai=7;
xungphai=5;
}
} */
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==1&&trai0==1&&phai0==0&&phai 1==0&&phai2==0) //lech phai vua
{
P1=0xF7;
xungphai=4;
xungtrai=6;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==1&&trai0==1&&phai0==1&&phai 1==0&&phai2==0) //lech phai it
{
P1=0xF6;
xungphai=6;
xungtrai=8;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
while(trai2==0&&trai1==1&&trai0==1&&phai0==1&&phai 1==1&&phai2==0)
{P1=0xF0;
xungtrai=8;
xungphai=8;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0) break;
if(trai2==0&&phai1==1&&phai2==1&&trai1==0) break;
}
if(trai2==1&&trai1==1&&phai2==0&&phai1==0)
{
P1=0xF9;
dung();
delayms(10);
motorthuan1=1; //dao chieu dong co
motornguoc1=0;
motorthuan2=0;
motornguoc2=1;
xungphai=8;
xungtrai=8;
while(trai1==1||trai0==1) delayms(10) ;
dung();
//delayms(50);
motorthuan2=1;
motornguoc2=0;
xungtrai=8;
xungphai=8;
delayms(10);
}
if(trai2==0&&phai1==1&&phai2==1&&trai1==0)
{
P1=0xF9;
dung();
//delayms(10);
motorthuan1=0; //dao chieu dong co
motornguoc1=1;
motorthuan2=1;
motornguoc2=0;
xungphai=8;
xungtrai=8;
while (phai1==1||phai2==1)delayms(10) ;
dung();
//delayms(50);
motorthuan1=1;
motornguoc1=0;
xungtrai=8;
xungphai=8;
//delayms(10);
}
}
}
}
}
Mọi người có thể giúp em tìm gia phương hướng để nó tốt hơn
Cảm biến: 6 sensor đặt thẳng hàng.......
tks
Comment