第十七課 用單晶片
創意自走車套件所附的
例題一 閃避前方的障礙物
假若右前方有障礙物, 則左馬達反轉, 左輪後退, 玩具車向左轉 .
假若左前方有障礙物, 則右馬達反轉, 右輪後退, 玩具車向右轉
.files/image002.jpg)
電路說明:
1 反相器的目的:
2 10KΩ電阻及100μF電容器目的:
在電源開啟時, 讓硬體電路穩定後, 再啟動軟體程式
3 本電路可在創意自走車所附的兩個小麵包板上做出來, 參考右頁圖片.
4
如果要走地面黑色路線 , 請把紅外線感測器朝向地面, 馬達電線的正負端子互換位置 , 程式不必改變. , R1可試改用300Ω,R10改
5
Keil公司網站提供免費下載的試用版編譯程式, 編譯後會佔用2K以後的記憶體 , 超出
例題一 (程式
1) ( Keil-C
) 本程式已燒錄在本創意自走車所附的
#include<at892051.h> // at892051.h 這個檔案裡有各個暫存器對應的記憶位址
main()
{
while (1)
// 讓程式反覆執行
{
if (P1_2==1) // 如果右前方有障礙物
P1_3=1;
// 左輪反轉
if (P1_2==0) // 如果右前方無障礙物
P1_3=0; // 左輪前進
if (P1_4==1)
// 如果左前方有障礙物
P1_5=1; // 右輪反轉
if (P1_4==0) // 如果左前方無障礙物
P1_5=0; // 右輪前進
}
}
例題二 閃避前方的障礙物
(先後退再轉彎)
本電路和例題一相同
假若右前方有障礙物, 則車子先後退, 再向左轉 .
假若左前方有障礙物, 則向右轉 (不後退)
#include<at892051.h> // at892051.h 這個檔案裡有各個暫存器對應的記憶位址
void
delay(unsigned int dly);
main()
{
while (1)
// 讓程式反覆執行
{
if (P1_2==1) // 如果右前方有障礙物
{
P1_3=1; // 左輪反轉
P1_5=1;
// 右輪反轉
delay(100); // 讓車子後退一段時間
P1_5=0; //右輪前進,車子開始向左轉
delay(40); // 讓車子轉彎一段時間
}
if (P1_2==0) // 如果右前方無障礙物
P1_3=0; // 左輪前進
delay(1); // 等一段時間, 讓干擾消失
if (P1_4==1)
// 如果左前方有障礙物
P1_5=1; // 右輪反轉
delay(1); // 等一段時間, 讓干擾消失
if (P1_4==0) // 如果左前方無障礙物
P1_5=0; // 右輪前進
delay(1); // 等一段時間, 讓干擾消失
}
}
void
delay(unsigned int dly) // 延遲時間的副程式
{
dly=dly*300;
while (dly>0)
dly--;
}
-------------------------------------------------------------------------------------------------------------------------
例題三 閃避前方的障礙物
假若右前方有障礙物, 則車子左右搖擺五次, 再轉彎前進.
假若左前方有障礙物, 則向右轉 (不後退)
#include<at892051.h>
void delay(unsigned int
dly);
unsigned int aa;
main()
{
while (1)
{
if (P1_2==1)
{
P1_3=1;
P1_5=1;
delay(1);
for (aa=1;aa<=5;aa=aa+1)
{
P1_3=1;
P1_5=0;
delay(40);
P1_3=0;
P1_5=1;
delay(40);
}
P1_5=0;
delay(100);
}
if (P1_2==0)
P1_3=0;
delay(1);
if (P1_4==1)
P1_5=1;
delay(1);
if (P1_4==0)
P1_5=0;
delay(1);
}
}
void delay(unsigned int
dly)
{
dly=dly*300;
while (dly>0)
dly--;
}