隨著單片機故障的出現,機器人調試工作被迫中止,我也被迫得以清閑。于是寫一篇半技術文,小結一下我的機器人比賽前段經歷。到目前為止,遇到過3次非常頭疼的問題。所謂非常頭疼,就是看起來特別弱智的問題,但花了一兩天也解決不了。當然解決了以后證明確實很弱智。羞恥錄如下:
首先是剛買回來我的第一塊單片機之后的第一個程序:想點亮一盞LED燈,怎么也不行,這就像剛學編程的人想輸出“HELLO, WORLD!”卻總是失敗一樣打擊人。結果是,用的編程器progisp有bug,應該先擦掉再寫入,它卻先寫入后擦掉……手動先擦再寫就解決問題了。
其次是我單片機升級的時候,由atmega16換成atmega128之后,想測試一下芯片,寫了一個讓一盞燈不停閃爍的程序,又失敗了!這就像剛學編程的人想輸出“HELLO, WORLD! MY NAME IS WYT.”卻總是失敗一樣打擊人。我想,上次失敗是軟件問題,這次不該是了呀,肯定是程序寫得有問題,找了兩天程序的問題(當然順便學了頭文件和軟件使用方面等等好多東西),最后發現是編譯軟件ICCAVR要設置單片機型號,同樣的語句對不同型號的單片機有不同的翻譯方法……
第三次就是這次了。總也無法下載程序,上網查資料,問題沒解決,但是學到了好多熔絲位設置,時鐘設置等方面的知識,同時也學到了解決類似問題的許多種方法,可惜都不適合我這個問題。
通過這三次經歷,我的體會之一是:問題,的確是上天賜予你的進步的捷徑。只是很多人看不到這條捷徑,而選擇放棄。實際上問題越難,你將獲得越大的進步。好比這次困難,如果我上網查到的第一條解答就解決了問題,那我就不可能繼續深究了。
除了這三次最頭疼的問題,還有無數次遇到小問題。我喜歡解決問題,特別喜歡用非一般的方法解決問題,還喜歡不斷發現問題。
舉幾個例子吧:
機器人有尺寸要求,要能裝進直徑20cm的圓筒。先介紹下背景:聯軸器是連接電機軸和車輪的東西,車輪內側有一個正六邊形的凹槽,聯軸器剛好能與凹槽吻合這樣車輪就不會打空轉。但我們發現電機加輪子加聯軸器怎么擺都會超寬,輪子又沒有別的可選。因此我放棄了過長的聯軸器,裝上了一個比較短的塑料齒輪,然后把齒輪用鋼銼銼成剛好能固定車輪的正六邊形,最后用繩子把車輪和齒輪綁牢,至今車子都跑得挺好。
后來選傳感器,前輩和別人一直都用紅外測距,但我覺得超聲傳感器沒什么不好,就買了一個試試,后來發現效果很好,當然,測試的過程也是充滿艱辛,從明明就對的程序卻無法運行,到運行之后測量不精確,到拿一本書擺在傳感器面前的各種位置各種角度進行性能測試,到多個傳感器之間的相互串擾測試,到從用中斷控制改為非中斷控制以加強程序穩定性,我假期在家的時間基本都是在研究超聲傳感器中度過的。雖然現在對其外部特性基本熟知了,但因為沒遇到傳感器不能工作的情況,所以一直沒有動力研究硬件結構。現在已經有其他隊伍也想用超聲傳感器了,呵呵,不小心改寫了一下傳統……
后來寫程序,我一直記著要模塊化以便程序越來越大的時候不會混亂。因此寫了很多函數,各種可能的方法都要進行測試:比如兩個輪子控制轉彎時候究竟是一輪轉一輪停呢,還是一輪快轉一輪慢轉呢,還是一輪正轉一輪倒轉呢?都試過。現在已經寫了900行代碼,暫時還沒有亂的感覺,可能就要歸功于之前堅持的模塊化原則吧。
還有保證車子方向的程序,自己想了三四個方法,翔哥也提供了很多建設性的想法,我都會寫出程序進行試驗,最終選出效果最好的方法。
另一個比較有個性的是:我從家里翻出來小學的學具,類似積木一樣可以插接的東西,而且顏色鮮艷,我用這些東西把傳感器固定在車上,很牢固也很陽光,哈哈……
最后寫一句在別處看到的,我也比較認同的話,來紀念我一個假期沒日沒夜每分每秒都與機器人廝混的生活:時間在哪里,成就就在哪里;而興趣在哪里,時間就在哪里。
|