周富峰 孫樹森
【摘 要】在編寫的程序中加入循環(huán)結(jié)構(gòu),加入相關(guān)的知識點,就能夠?qū)W好循環(huán)結(jié)構(gòu)的編程,當(dāng)學(xué)生理解了循環(huán)結(jié)構(gòu)和用法就能夠?qū)⒅R用到機器人完成任務(wù)的各種循環(huán)程序編寫了。
【關(guān)鍵詞】傳感器數(shù)據(jù);循環(huán)結(jié)構(gòu)
機器人能夠自動運行需要傳感器,機器人傳感器有多種,比如:紅外傳感器、角度傳感器、超聲波傳感器、灰度傳感器、指南針傳感器等,在樂高機器人主控器上有自帶的傳感器檢測程序,而其他類型的多數(shù)機器人需要使用者自己編寫檢測程序。用好傳感器就能充分激發(fā)調(diào)動學(xué)生學(xué)習(xí)機器人興趣,如用機器人指南針來檢測房屋的方向,看看是不是正南正北,偏離多大的角度;利用灰度傳感器來測一測皮膚、頭發(fā)的光亮值等。
以下以未來伙伴機器人的JC代碼編程來講述如何使用傳感器檢測講解循環(huán)程序的編寫教學(xué)方法。
一、傳感器的簡單檢測程序運行討論
樣例程序:
int a=0;
void main()
{
a = AI(0);
printf(“a =%d”,a);
}
二、簡單改進,引入while最簡單的循環(huán),分析結(jié)構(gòu),觀察現(xiàn)象分析,理解while(1)循環(huán)
新知識點:while循環(huán)結(jié)構(gòu),循環(huán)條件“1”“0”的意義。
檢測樣例程序
int a=0;
void main()
{
while(1)
{
a=AI(0);
printf("a=%d",a);
}
}
三、能夠隨時保持記錄數(shù)據(jù)的程序
新知識點:1.while循環(huán)條件使用傳感器數(shù)據(jù)作為條件。2.循環(huán)條件的獲取和處理。3.循環(huán)條件的數(shù)據(jù)類型。
在檢測中增加一個按鈕,接在DI端口上的就是數(shù)字類型,獲取值是“1”或“0”,接在AI端口上就是模擬,獲取值是可能是0~254(具體由主控器廠商設(shè)定),下面以按鈕接在模擬口為例編程,程序分析見后面的注釋。
int a=1024; ? //按鈕獲取數(shù)據(jù)存放到a
int m=0; //檢測的傳感器數(shù)據(jù)存放到m
void main()
{
a=AI(0); //為進入下面循環(huán)獲得循環(huán)條件的數(shù)據(jù)
while(a≥500) //按鈕不按下a值為1024,滿足循環(huán)條件循環(huán)
{
m=AI(4);
//傳感器檢測
printf(“m=%d”,m); //傳感器檢測的數(shù)據(jù)顯示出來
wait(0.300000); //降低數(shù)據(jù)顯示的閃爍有利于讀取數(shù)據(jù)
a=AI(0); //更新循環(huán)條件,監(jiān)測按鈕是否按下,當(dāng)按下時a==0
}
wait(20); //顯示保持
}
這個程序能夠在程序獲取到數(shù)據(jù)的瞬間按下按鈕,數(shù)據(jù)就可以停留在顯示屏上一段時間。但它的缺點是要重新檢測就要重新啟動程序。
四、可以重復(fù)檢測好用的檢測程序
知識點:循環(huán)嵌套程序
int a=1024;
int m=0;
void main( )
{
a = AI(0);
while(1) 無限循環(huán),循環(huán)內(nèi)檢測、數(shù)據(jù)保持可重復(fù)進行 {
while(a ≥ 500)
{
m=AI(4);
printf( “m =%d” ,m);
wait( 0.300000 );
a = AI(0); //按鈕檢測,當(dāng)按下時a==0
}
while(a <500) ? ? ? //按鈕按下,程序在此循環(huán)不斷檢測按鈕數(shù)據(jù),讀數(shù)保持
{
a = AI(0);
}
}
}
五、智能多傳感器檢測程序
一些機器人顯示屏顯示空間有限,采用循環(huán)程序加上一些運算等,就可以將我們要知道的一些數(shù)據(jù)逐一顯示出來,下例程序有采用while循環(huán)進行檢測數(shù)據(jù)并且用一些變量來存儲數(shù)據(jù),亦有采用while循環(huán)來顯示數(shù)據(jù)同時等待按鈕按下顯示下一個數(shù)據(jù)內(nèi)容。
int a,b,min1,min2,max1,max2,n,an;
void main()
{
min1 = AI(4); ? //AI(4)最小值
max1 = AI(4); ? //AI(4)最大值
min2 = AI(5); //AI(5)最小值
max2 = AI(5); ? //AI(5)最大值
an=AI(0); ? ? //an存放按鈕狀態(tài)
通過以上對傳感器一系列數(shù)據(jù)檢測程序的編寫和實際檢測,加上教師對程序結(jié)構(gòu)和相關(guān)知識的講解,能夠使學(xué)生掌握循環(huán)程序的結(jié)構(gòu)有了較深的理解。在此基礎(chǔ)上就可以引導(dǎo)學(xué)生用循環(huán)程序來解決機器人智能行走、智能完成一些較為復(fù)雜的任務(wù)等。
【參考文獻】
[1]徐科軍.傳感器與檢測技術(shù)[M].北京:電子工業(yè)出版社,2007
[2]李科杰.新編傳感器技術(shù)手冊[M].北京:國防工業(yè)出版社,2003