一直聽到許多做物聯網、智能家居的控制器使用的是Arduino,從師兄那里拿到了一塊Arduino開發板,進行了一下午的學習,感覺這個適合小孩子們玩:)
廢話少說,總結一下,便於以后可能會用得到。我主要參考了百度文庫的一個60+頁的《arduino從零開始學》和一些技術論壇如極客工坊吧。
由於之前學習過若干塊開發板,這里主要探究他們的異同,移植問題。
個人總結為三部分:
一、arduino IDE環境的搭建
由於無法進入官網下載,這里選擇了1.6.11免安裝版,並且是中文環境,非常方便
(2)驅動的安裝
這種老版本的CH340一般在電腦上無法識別,通過設備管理器里選擇手動安裝,選中arduino 安裝路徑里的drivers文件夾即可
(3)如何編譯
由於開發板主要通過串口進行程序的下載,所以需要選擇開發板型號以及串口端口

之后,點擊編譯按鈕、上傳按鈕實現程序的檢錯和下載。
二、基本語法的學習
(1)我們會發現arduino 主體程序包括兩部分: setup()和 loop()
setup()只能初始化一次, 主要放置一些初始化函數如端口配置等
loop()里所以的語句會被反復執行需要小心。
(2)變量類型,全局/局部變量,數學運算符,關系運算符,邏輯運算符,位操作
三大控制結構,數組,函數的學習
(3)一些 arduino 內置函數的學習
比如串口配置打印顯示,端口輸入輸出及賦值,pwm值的修改等
關於這部分,自己將學習的函數寫成一個個小程序, 每個小程序設計不同知識點的學習,大家可以從中學習。附在后面。
三、以ardunio為核心控制器,完成一系列擴充功能。
由於筆者手上只有一塊開發板,沒有多余的面包板等配件,故該部分無法一一驗證,不過總結一遍吧。
(1)首先要根據原理圖觀測開發板引腳的功能。
例如,在0-13引腳中:13引腳與LED相連,0/1引腳分別實現RX/TX功能,3/5/6/9/10/11/12/13端口輸出電壓值可變,即可實現pwm功能。
在A0-A5中,實現AD模擬輸入的功能,能夠將0-5v電壓分成0-1023份,利用逐次逼近實現采樣
數字電源,模擬電源等。
固定按鍵,或者那些端口可實現輸入功能,進而擴展為上拉電阻式的按鍵設計電路
(2)功能的設計
顯示類:數碼管數字顯示,LCD1602顯示,OLED顯示,8*8點陣顯示...
按鍵類:外接獨立按鍵,矩陣按鍵等
聲控類:蜂鳴器,紅外偵測等
定時中斷類:時鍾計數,脈沖計數,中斷進行偵測,AD采樣等
輸出控制類:步進電機,舵機控制;LED亮度變化,直流電機等
通信類:SPI通信,uart通信,紅外通信,外接網絡端口通信
數據存儲類:編碼器譯碼器模塊,SD模塊等
....
附代碼:
/******************* *功能:顯示串口打印信息 *作者:王茂春 *知識點:了解,入門,使用串口波特率設置函數、串口打印函數 *********************/ void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: Serial.println("wanghello"); delay(1000); } /******************* *功能:13引腳閃爍燈,時間間隔1000ms *作者:王茂春 *知識點:引腳輸出配置,高低電平配置 *********************/ void setup() { // put your setup code here, to run once: pinMode(13,OUTPUT); //將13引腳設置為輸出 } void loop() { // put your main code here, to run repeatedly: digitalWrite(13,HIGH); // //將13引腳高電平 delay(1000); digitalWrite(13,LOW); // //將13引腳低電平 delay(1000); } /******************* *功能:13引腳閃爍燈,時間間隔變化:1000-5000ms *作者:王茂春 *知識點:引腳輸出配置,高低電平配置 * 全局變量使用,if-else語句使用,操作符+=、++等的使用 *********************/ int ledPin = 13; //使用全局變量表明引腳為13 int delayTime = 1000; //延時100ms void setup() { // put your setup code here, to run once: pinMode(ledPin,OUTPUT); //將13引腳設置為輸出 } void loop() { // put your main code here, to run repeatedly: digitalWrite(ledPin,HIGH); // //將13引腳高電平 delay(delayTime); digitalWrite(ledPin,LOW); // //將13引腳低電平 delay(delayTime); delayTime+=100; if(delayTime ==5000) { delayTime = 1000; //恢復基准 } } /******************* *功能:全局數組數值打印 *作者:王茂春 *知識點:全局數組的初始化學習 * while循環的使用 *********************/ int arr[10]={1,2,3,4,5,6,7,8,9}; //全局數組聲明並初始化 int count=0; //定義計數器變量並初始化為0 void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: while(count < 10) { Serial.println(arr[count]); count++; } } /******************* *功能:全局數組數值打印 *作者:王茂春 *知識點:全局數組的初始化學習 * for循環的使用.注意該程序有一個錯誤: * 由於將計數器count初始化放置在for循環中,外加loop的影響導致該程序一直循環,容易死機 *********************/ int arr[10]={1,2,3,4,5,6,7,8,9}; //全局數組聲明並初始化 void setup() { // put your setup code here, to run once: Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: for(int count=0;count < 10;count++ ) { Serial.println(arr[count]); } } /******************* *功能:max函數的調用 *作者:王茂春 *知識點:自定義函數的使用(無需聲明) * 考慮形參一致問題,考慮到本次實驗無需循環,代碼放在setup里 *********************/ void setup() { // put your setup code here, to run once: Serial.begin(9600); int a=10,b=20; int value=maxValue(a,b); Serial.println(value); } void loop() { // put your main code here, to run repeatedly: } int maxValue(int x,int y) { return x > y ? x:y; }
今天就學習這么多了,希望和大家多多交流,推薦的博客有:
http://www.cnblogs.com/rayray/category/457863.html
http://www.cnblogs.com/shuqingstudy/
