|
控制程序源代碼
void DodgeEdge(void)
{
FindEdge(); // 開始檢測邊緣
while(g_edge_find_flag) // 如果到達邊緣
{
MoveBack(15); // 機器人后退
FindEdge(); // 再次檢測邊緣
}
}
檢測敵人:
temp16 = read_gpio(); // 紅外傳感器觸發時輸出為低
io_in = (uint8)(temp16>>8);
io_in &= (FIND_ENEMY_SENSOR); // #define FIND_ENEMY_SENSOR 0x80
if((io_in & FIND_ENEMY_SENSOR) == 0) // 檢測傳感器如檢測到輸入則再檢測4次防止誤判斷
{
temp8++;
or(i = 0 ; i < 3 ; i++) // 120ms內檢測再3次傳感器累加值大于2即說明傳感器輸入有效
{delay(2); // 延時2*20=40ms
temp16 = read_gpio();
io_in = (uint8)(temp16>>8);
io_in &= (FIND_ENEMY_SENSOR); // 默認傳感器觸發時輸出為低
if((io_in & FIND_ENEMY_SENSOR) == 0)
{
temp8++;
}
}
}
碰撞檢測:
FindEnemy(); // 開始檢測敵人
if(g_enemy_find_flag == 1) //前超聲傳感器檢測到敵人
{
g_enemy_find_times = 0; //前超聲傳感器檢測敵人次數初始為0
DodgeEdge(); // 開始檢測邊緣
MoveOn(20); // 前進驅趕敵人
FindEnemy();
}
else //即前后超聲傳感器都沒檢測到敵人
{
DodgeEdge(); // 開始檢測邊緣
TurnRight(3); // 轉動一個角度
delay(10);
FindEnemy();
}
武術擂臺賽機器人程序主函數說明如下 int main(void)
{
Sys_Init(); // 系統初始化
gpio_mode_set(IO_MODE); // 設置io口模式IO0-IO7全為輸入IO8-IO15全為輸出(1為輸出0為輸入)
write_gpio(g_io_value); // 設置io輸出值及輸入狀態IO0-IO7輸入使能由于電路原因。
// 輸出為低時led才會亮IO8-IO15輸出信號為低0。
g_find_redblock_mode = 1; //進入尋心模式
delay(10); //延時10x0.1s=1s
武術擂臺攻擊型機器人控制系統設計
30 FindRedBlockFirstTime();
while(TRUE) // TRUE,FALSE
{
while(g_find_redblock_mode) //進入尋心模式
{
FindblackBlock(); //尋找擂臺黑色圓心
}
while(g_anti_enemy_mode) //進入尋找敵人攻擊敵人模式
{
AntiEnemyAction(); //尋找并攻擊敵人
}
}
while(FALSE) // 單模式調試用
{
AntiEnemyAction(); //尋找并攻擊敵人
}
while(FALSE) // 單模式調試用
{
FindblackBlock(); //尋找擂臺黑色圓心
}
}
機器人前行與后退;
void MoveOn(uint8 move_time) / /機器人前行
{
uint8 array_dc[8] = {0}; //定義機器人運動數組
array_dc[0] = 0;
array_dc[1] = 1 * move_time; //電機運動函數的分辨率為0.1s注意控制延時的長短
array_dc[2] = 0xFE; //左右前輪為12電機左右后輪為三四電機兩兩速度相反 rray_dc[3] = 1 * move_time;
array_dc[4] = 0;
array_dc[5] = 1 * move_time;
rray_dc[6] = 0xFE;
array_dc[7] = 1 * move_time;
dc_moto_control(array_dc);
delay(5 * move_time);
}
void MoveBack(uint8 move_time) //機器人后退
{
uint8 array_dc[8]={0};
array_dc[0]=0xFE;
array_dc[1]=1*move_time;
array_dc[2]=0;
array_dc[3]=1*move_time;
array_dc[4]=0xFE;
array_dc[5]=1*move_time;
array_dc[6]=0;
array_dc[7]=1*move_time;
dc_moto_control(array_dc);
delay(5*move_time);
}
機器人左右轉轉:
void TurnRight(uint8 move_time) //機器人右轉
{
uint8 array_dc[8]={0};
array_dc[0]=0;
array_dc[1]=1*move_time;
array_dc[2]=0;
array_dc[3]=1*move_time;
array_dc[4]=0;
array_dc[5]=1*move_time;
array_dc[6]=0;
array_dc[7]=1*move_time;
dc_moto_control(array_dc);
delay(5*move_time);
}
void TurnLeft(uint8 move_time) //機器人3轉
{
uint8 array_dc[8]={0};
array_dc[0]=0xFE;
array_dc[1]=1*move_time;
array_dc[2]=0xFE;
array_dc[3]=1*move_time;
array_dc[4]=0xFE;
array_dc[5]=1*move_time;
array_dc[6]=0xFE;
array_dc[7]=1*move_time;
dc_moto_control(array_dc);
delay(5*move_time);
}
|
-
123.png
(71.71 KB, 下載次數: 42)
下載附件
2019-7-11 22:14 上傳
-
-
武術擂臺機器人(1).docx
2019-7-11 22:15 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
2.1 MB, 下載次數: 17, 下載積分: 黑幣 -5
-
-
小車程序,仿真,電路圖.rar
2019-7-11 22:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
128.98 KB, 下載次數: 17, 下載積分: 黑幣 -5
|