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