各位大師好,我現在遇到難題了,希望高手能幫忙指點解決一下,感激不盡,
我需要寫避障循跡程序,端口分配大致是這樣:
p1.2 右轉方向信號
p1.5 左轉方向信號
p1.3 左輪pwm調速信號
p1.4 右輪pwm調速信號
p0.0 左邊紅外避障傳感器輸入信號
p0.1 前邊紅外避障傳感器輸入信號
p0.2 右邊紅外避障傳感器輸入信號
p2.0----p2.7 為循跡傳感器信號輸入
共有16路用2個鎖存器控制,只用p2口
實現功能:當左邊傳感器被觸發小車右轉
當前邊傳感器被觸發小車左轉
當右邊傳感器被觸發小車左轉
當左、前邊傳感器被觸發小車右轉
當右、前邊傳感器被觸發小車左轉
當同時觸發時,小車后退,直到左、右兩側傳感器中的任意一個停止觸發,小車停止倒退
以上觸發都是低電平有效
麻煩您指點一下避障的程序該怎么些,先謝謝你了
我已解決此問題,特分享給大家,
我有三個傳感器,分別裝在左、前、右(z、q、y)
程序如下:
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit z=P0^0;//定義紅外避障檢測端口
sbit q=P0^4;
sbit y=P0^2;
sbit mz=P1^5;//定義電機Mz電平輸出端口
sbit my=P1^2;//定義電機My電平輸出端口
void delay_ms(uint z);//聲明延時函數
main()//主函數
{
uint i=0;//初始值設定
mz=1;
my=1;
while(1)//無限循環
{
if(z==0&&q==1&&y==1)//表示z方有障礙物 進行y轉向
{
for(i=0;i<5;i++)
{
mz=1;
my=0;
delay_ms(100);//狀態保持100ms
mz=1;
my=1;
delay_ms(2);//狀態保持2ms
}
}
if(z==1&&q==0&&y==1)//表示前方有障礙物 進行y轉向
{
for(i=0;i<5;i++)
{
mz=1;
my=0;
delay_ms(100);//狀態保持100ms
mz=1;
my=1;
delay_ms(2);//狀態保持2ms
}
}
if(z==1&&q==1&&y==0)//表示y方有障礙物 進行z轉向
{
for(i=0;i<5;i++)
{
mz=0;
my=1;
delay_ms(100);//狀態保持100ms
mz=1;
my=1;
delay_ms(2);//狀態保持2ms
}
}
if(z==0&&q==0&&y==1)//表示z前方有障礙物 進行y轉向
{
for(i=0;i<5;i++)
{
mz=1;
my=0;
delay_ms(100);//狀態保持100ms
mz=1;
my=1;
delay_ms(2);//狀態保持2ms
}
}
if(z==1&&q==0&&y==0)//表示y前方有障礙物 進行z轉向
{
for(i=0;i<5;i++)
{
mz=0;
my=1;
delay_ms(100);//狀態保持100ms
mz=1;
my=1;
delay_ms(2);//狀態保持2ms
}
}
if(z==0&&q==0&&y==0)//表示前有障礙物 進行hou轉向
{
for(i=0;i<5;i++)
{
mz=0;
my=0;
delay_ms(100);//狀態保持100ms
mz=1;
my=1;
delay_ms(2);//狀態保持2ms
}
}
if(z==1&&q==1&&y==1)//表示前方無障礙物 直線行駛
{
mz=1;
my=1;
delay_ms(2);//狀態保持2ms
}
}
}
我也試運行一下
zhangbiao 發表于 2011-7-3 09:04
**** 作者被禁止或刪除 內容自動屏蔽 ****

zhangbiao 發表于 2011-7-3 09:04
我已解決此問題,特分享給大家,
我有三個傳感器,分別裝在左、前、右(z、q、y)
程序如下:
| 歡迎光臨 (http://m.raoushi.com/bbs/) | Powered by Discuz! X3.1 |