單片機
今天我用我的經歷來告訴大家一個我認為比較有效的單片機學習方法。
上大學時,因為癡迷機器人制作,我開始自學單片機。隨著深入了解,我開始對單片機產生濃厚的興趣。室友們在開黑玩dota,我在搭電路敲代碼;室友們在看天下霸唱的小說《鬼吹燈》無法自拔,我在讀郭天祥的自述《我的大學六年》斗志昂揚。就這樣,學習了一段時間C語言和單片機,我就開始著手制作機器人。經過一年多時間,我制作的機器人數(shù)量不斷的增多,對單片機的理解和使用也有了很大的提升。后來我的好友也開始學習單片機,可沒多久他就跑來和我抱怨單片機太難學,我就讓他去網(wǎng)上買了一套單片機開發(fā)板,或許這樣學習會更容易一點。別說,開發(fā)板上的資源還挺豐富,流水燈、數(shù)碼管、矩陣鍵盤、LED點陣、紅外遙控器、直流電機、步進電機、LCD屏......應有盡有,還配有視頻教程。這可比我當初自己搭建的最小系統(tǒng)板強多了,這下應該沒問題了。
單片機開發(fā)板
果然,沒過多久好友就告訴我:“單片機其實還是挺簡單的嘛?!拔医o他設計了幾個小項目,他瞄了一眼,說這個太簡單,涉及到的知識點開發(fā)板上的教程都有講過,不用再做了,自己回去找點別的項目做。過了一段時間,我的機器人小組要招新人,考題是根據(jù)提供的材料現(xiàn)場制作一輛循跡避障智能車。我的好友也來了,看著他自信滿滿的樣子,我也就放心了。可是最后的結果出乎我的意料,他什么都沒做出來,他自己也很詫異,明明想法是有的,可是卻無從下手。后來,又有幾個學弟在學單片機的時候也存在這種問題。我開始認真的思考他們的問題所在:
初學階段過度依賴單片機開發(fā)板,完全跟著開發(fā)板的教程學習,缺乏主動性。
對單片機的認知不足,急于求成,恨不得一天就把單片機學會,導致基礎不扎實。
盲目自信,跟著教程學習了板上所有資源就覺得自己已經學會了單片機,不屑于從簡單的項目開始做起。
遇到疑難問題總是逃避,不積極處理,總想留在以后解決。
誤認為單片機主要學習內容就是寫代碼,不重視底層硬件知識和接口電路知識。
總而言之,沒有找到正確的學習方法。
那為什么我在學習單片機過程中沒有出現(xiàn)他們的這些現(xiàn)象呢?
第一點,我沒有使用開發(fā)板進行學習,我不是說開發(fā)板不好,其實開發(fā)板是很好的單片機學習入門工具,但僅限于入門,它的延展性太差,無法引導大家更深入的學習。
第二點,我學習單片機主要是為了制作機器人,而機器人制作則恰好為我深入學習單片機開辟了一條正確的道路:當我制作紅外循跡智能車時,我認識了紅外反射傳感器,設計了紅外傳感器接口電路和H橋電機驅動電路,編寫了多路紅外傳感器掃描和PWM調速代碼;當我制作CCD循跡智能車時,我認識了圖像傳感器,設計了圖像傳感器接口電路,編寫了圖像傳感器的驅動程序和簡單的圖像處理算法,認識了opencv開源庫,學習了PID控制算法;當我制作六足機器人的時候,我認識了舵機,開發(fā)了多路舵機控制器,開始學習Labview編寫上位機;當我制作自平衡車的時候,我認識了加速度傳感器和陀螺儀,了解了卡爾曼濾波,加深了對PID的認識;當我......
在這些機器人的制作過程中,我熟練掌握了各種調試技巧,注重代碼編寫的質量,面向接口編程,接觸了設計模式,歸納了編程中常見錯誤......就這樣,沿著機器人制作這條路去學習單片機,不會因為某一個模塊代碼簡單就不寫,不會因為某一個模塊電路簡單就不畫,更不會因為眼前的困難而放棄,因為我的目標就是完成我的機器人制作。
說了這么多,只是想讓大家知道我的方法并不是空穴來風,而是我這么年來的經驗之談,即使現(xiàn)在已經工作好幾年,我依然通過這種方式在進步。當然,這也只是我的一家之談,希望對你有所幫助。
再次鄭重提醒,初學單片機時,再簡單的代碼也要敲,不要眼高手低,bug往往藏在最簡單的語句中,多寫多練,歸納易錯點是非常必要的。考考你:
if (1 == ir_num) { } //注釋:這是我當時自己歸納總結的,后來在《C++ Primer》中也看到這種寫法。
(審核編輯: 林靜)
分享