部分代碼:
//當(dāng)前角度
int mAngleNum = 0;
//當(dāng)前是正向旋轉(zhuǎn)還是反向旋轉(zhuǎn)
char mFront = 0;
//設(shè)置舵機當(dāng)前的角度
mServo.write(180 - mAngleNum);
if( mFront == 0 )
{
mAngleNum ++;
if( mAngleNum > 180 )
{
mFront = 1;
}
}
else
{
mAngleNum --;
if( mAngleNum < 0 )
{
mFront = 0;
}
}
這里。實現(xiàn)了從 180度開始。每次減少1度。直到0度。然后開始從0度往180度增加。每次增加1度。
然后接下來。我們就需要 在每次舵機旋轉(zhuǎn)的時候。我們進(jìn)行超聲波測距。
//當(dāng)前距離
int mDistance = 0;
//超聲波測距引腳
const int mTrigPin = 2;
const int mEchoPin = 3;
pinMode(mTrigPin, OUTPUT);
// 要檢測引腳上輸入的脈沖寬度,需要先設(shè)置為輸入狀態(tài)
pinMode(mEchoPin, INPUT);
// 產(chǎn)生一個10us的高脈沖
digitalWrite(mTrigPin, LOW);
delayMicroseconds(2);
digitalWrite(mTrigPin, HIGH);
delayMicroseconds(10);
digitalWrite(mTrigPin, LOW);
mDistance = pulseIn(mEchoPin, HIGH) / 58.0; //將回波時間換算成cm
這里。我們就是測試當(dāng)前的距離。然后同時每次改變角度。都測試一次當(dāng)前距離。我們每次改變角度、測試距離之后。都把我們的當(dāng)前角度和距離。送給processing 讓processing知道我們的當(dāng)前狀態(tài)。然后。processing 方面。我們需要一直不停的接受 arduino傳遞過來的當(dāng)前硬件的狀態(tài)數(shù)據(jù)(就是當(dāng)前的角度和當(dāng)前前方的距離)我這里設(shè)計的是。只測試前方180度的1.5m范圍內(nèi)的障礙物。好了。我們繼續(xù)。我們在processing中。一直去查找數(shù)據(jù)。每次找到數(shù)據(jù)后。都把數(shù)據(jù)進(jìn)行組裝以及拆分。原因就是。我們傳遞的數(shù)據(jù)比較多。不是單一的數(shù)據(jù)。所以我們要區(qū)分我們具體每個數(shù)據(jù)。同時還要區(qū)分。多個數(shù)據(jù)的連續(xù)和間斷問題。就是如何去讀取和解析一個完整的數(shù)據(jù)包(包含當(dāng)前角度和當(dāng)前距離的一段數(shù)據(jù)) 首先我們需要在draw()里 每次都要讀取數(shù)據(jù)。當(dāng)然這里每次讀取的都是一個int類型的數(shù)據(jù)。其實他是一個byte或者說是一個字節(jié)。也就是8個二進(jìn)制 也同樣是一個C語言里的char 還同樣是一個ASCII 當(dāng)然關(guān)于是否是unsigned之類的就先不說了。我們只要知道read()一次 讀取出來的是個8個二進(jìn)制位表示出來的數(shù)據(jù) 就夠了。當(dāng)然他是用int類型來存放的
if ( myPort.available() > 0) {
val = myPort.read(); }。我們這里沒有真的用數(shù)據(jù)包的方式去處理的。而是用每次read之后。我把數(shù)據(jù)存放在181個int的數(shù)組中。因為角度是從0到180度。有181個數(shù)據(jù).....然后。在draw() 中。每次都清空畫布。然后重新繪制背景、然后繪制當(dāng)前掃描效果的扇形。然后繪制當(dāng)前的障礙物。畫布設(shè)置:int mWidth = 600;
int mHeight = 300;
設(shè)置300的原因是方便計算。我準(zhǔn)備掃描1.5米以內(nèi)的同時180度的范圍。所以可以設(shè)置成 寬度 1.5m * 2 = 150cm * 2 = 300cm, 高度1.5m = 150cm 。也可以設(shè)置成這個數(shù)據(jù)的一倍。就是 600cm, 300cm 或者兩倍。三倍。由于屏幕寬度高度的原因。我就設(shè)置成了600,300。然后,我們每次繪制出來畫布。就開始根據(jù)當(dāng)前角度。來繪制一個半透明的內(nèi)部填充的扇形。我吧當(dāng)前角度 放到了扇形的中間。最后。根據(jù)181個int的數(shù)組。吧181個角度的障礙物的距離。繪制到屏幕上。當(dāng)然 超出100cm或者少于5cm的都沒有繪制。當(dāng)然大家也可以自己回去改成 150cm 10cm之類的。
下面發(fā)一下繪制障礙物的具體代碼:
Y~@MA3@]21_TG0[C3SQDV`X.png (25.39 KB, 下載次數(shù): 161)
C]_G{P[4@C1UVUNAQB6$6BJ.png (25.56 KB, 下載次數(shù): 97)
| 歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |