熱門(mén): 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂(lè)園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
發(fā)布時(shí)間: 2019-8-10 16:57
正文摘要:先貼本人自己寫(xiě)出來(lái)的程序吧。 問(wèn)題是在環(huán)島掃到全黑的情況與全黑停車(chē)情況的判斷,車(chē)子掃到全黑時(shí)總是突然開(kāi)始倒車(chē)并附有卡頓挺迷的。希望大家能給個(gè)好建議。 PS.如果輪子轉(zhuǎn)速太快紅外測(cè)速無(wú)法記錄外部中斷 ... |
隨便說(shuō)說(shuō):其實(shí)這種路線使用4個(gè)紅外循跡模塊的話是可以更加容易的實(shí)現(xiàn)區(qū)分環(huán)島和停車(chē)點(diǎn)的。使用4個(gè)傳感器全部放在車(chē)頭排放位置類(lèi)似于色子上的4,只不過(guò)前面的兩個(gè)稍微寬一些 |
代碼問(wèn)題有點(diǎn)多。首先你的PWM頻率太低了吧,20Hz?,電機(jī)控制起碼是幾千Hz的這樣你走起來(lái)就會(huì)很抖的,還有就是PWM電平反轉(zhuǎn)的判斷語(yǔ)句,也不對(duì)的能用可以說(shuō)是巧合,C的if判斷不能這么寫(xiě),然后就是你的最后一塊兒代碼邏輯不對(duì)。你的停車(chē)線比較寬,用計(jì)時(shí)的方法判斷是進(jìn)環(huán)島還是停車(chē)可以,但是代碼寫(xiě)得很不對(duì),你要在檢測(cè)到雙黑線后開(kāi)始time計(jì)數(shù),繼續(xù)前進(jìn)延時(shí)一段時(shí)間后再檢測(cè)一次是不是全黑,是的話停車(chē)不是就繼續(xù)循跡。最后,倒車(chē)這個(gè)我倒不確定,但是抖動(dòng)就是你最后那塊兒沒(méi)寫(xiě)好。可能是抖著抖著自己后退了,跟你驅(qū)動(dòng)頻率太低也可能有關(guān)系。 |
判斷式應(yīng)該是連續(xù)的,而不是單獨(dú)的,如if(right2 == left2 == 0 && right1 == left1 == 1)。。else if(right2 == left2 == 0 && right1 == left1 == 1)這樣;if(R_flag) xunji();這樣試看 |
xianfajushi 發(fā)表于 2019-8-10 19:59 R_flag 的判斷內(nèi)容要寫(xiě)些什么呢?是對(duì)紅外的判斷還是? |
隨便說(shuō)說(shuō),首先不要直接使用 int char 應(yīng)使用unsigned int這樣的;2邏輯簡(jiǎn)化這當(dāng)然不是必要的,只是可以簡(jiǎn)化代碼如 if(right2 == left2 == 0 && right1 == left1 == 1);3調(diào)用尋跡前添加判斷R_flag |
隨便說(shuō)說(shuō),首先不要直接使用 int char 應(yīng)使用unsigned int這樣的;2邏輯簡(jiǎn)化這當(dāng)然不是必要的,只是可以簡(jiǎn)化代碼如 if(right2 == left2 == 0 && right1 == left1 == 1);3調(diào)用尋跡前添加判斷R_flag這是猜測(cè)的。 |
Powered by 單片機(jī)教程網(wǎng)