談談使用Arduino

這兩天接了一個小活是用arduino做一個類似智能家居檢測的東西,包括溫度、溼度、煙霧檢測。對於arduino其實並不是第一次接觸,之前和同學一起整過那個3軸的機器手畫圖,不過當時代碼沒有親自寫。這次算是完完整整接觸了一回。

首先第一感覺就是便宜,一共淘寶了兩次,加上七七八八的東西一共100塊不到,arduino uno主板才25塊錢,倒是有的好的傳感器比較貴。畢竟arduino這東西硬件開源,一下大大拉低了價格。其次就是arduino的開發環境,這個也是我覺得爲什麼他能這麼流行起來的原因,非常的straightforward,沒有什麼devicetree,  memory map之類的,直接一個C++的編程環境,一個void setup() 一個void loop(),幾行代碼就可以點燈、驅動lcd屏,獲取傳感器數據等,非常的方便,這個世界還是軟件的世界,因此適合軟件編程纔是正道。

整個系統搭起來前前後後也花了多半天時間,要把一件簡單的是做好也是挺不容易的,下面講講其中一些經驗。

1,對於arduino的編程風格,我覺得這個是最重要的,也是我寫代碼之前在搜索引擎上最想找到的,arduino因爲軟硬件都開源,所以可以非常好的繼承已有的代碼,避免重複造輪子,這也是軟件編程最大的特點。特別是傳感器就那麼幾種,肯定有別人寫好的驅動,現成的庫,因此千萬不要拿到一個傳感器就去找他的datasheet,然後重新寫一個時序,這不是arduino的風格,是以前嵌入式單片機的風格。

這裏我用的DHT11和LCD1602屏就是用的已有的庫文件,其中DHT11是網上找到的,LCD的驅動是arduino開發環境自帶的,都是用C++寫的,想去看其具體函數實現可以直接查源代碼。

2,,開始LCD的使用還是找的中文社區的資料,主要是熟悉硬件的連接方式,後來發現arduino自帶庫文件之後,發現他官網上是有library的說明的,在這裏https://www.arduino.cc/en/Tutorial/LiquidCrystalAutoscroll,比如實現液晶屏文字滾動的效果,看到他.h文件裏有個autosroll,但是用了半天總感覺不對,看源代碼也沒太看出什麼門道來,後來仔細看他官網上的描述和示例程序,很快發現並不是我想要的功能,隨後用scrollDisplayLeft這個函數實現了想要的功能,目前只有LCD的blink功能沒有成功使用,估計是lcd的驅動型號的問題,這個目前使用delay和lcd.clear函數簡單替代,暫時也就不深究了。

3,說一點調試方面的經驗,arduino可以非常方便的利用串口,只需要一個簡單的初始化就可以用其串口來,這是一個非常好的調試手段。目前據我所知arduino的開發環境是沒有單步調試的,所以調試還是要善於利用串口print。

4,還想簡單說說arduino的library,他在安裝目錄下面有個library目錄,裏面有它自帶的一些庫文件,第三方庫文件可以直接放到這個目錄就可以正常工作(不過需要重啓arduino),其實在arduino的工作目錄下,也有一個library目錄,第三方庫放到這裏也可以,同樣需要重啓arduino。這裏我自己也利用C++的類開發了一個無源蜂鳴器的庫,可以看到arduino的庫都是用面向對象的方式開發的。

5,一個小問題,arduino的int類型是16bit的,這也是昨天debug時間最長的一個問題,這個主要是因爲他的單片機是16位的,因此如果有超過32768的數就需要32bit的long類型運算,而且他編譯器裏面的格式轉換是跟運算數對應而非和被賦值的數對應的,也就是兩個int類型相乘結果還是int類型,無論賦值到int還是long都用可能出現溢出的問題。有可能C和C++裏面就是這麼定義的,自己有點忘了:p


總而言之,arduino還是個挺好玩的東西,現在這個時代很適合給小朋友當玩具啊哈哈。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章