Arduino 笔记。开篇
之前寫過關(guān)于外部中斷使用的筆記了,但是始終沒有正式的對Arduino開個頭。
也許大家很早很早就聽說過Arduino 的大名,但是Arduino 卻在專業(yè)開發(fā)者眼中顯得如此不二流, 如此低級。但是福利君不這么認(rèn)為,當(dāng)然,如果我也這么想我就不會用了。
廢話不說。
Arduino到底是什么
Arduino 是一個(或者說一套)較為完整的開源硬件開發(fā)平臺。其實(shí)Arduino 是一個AVR的開發(fā)板。當(dāng)然,他好像沒有引出所有的接口,尤其對于MEGA2560和STM32系列的開發(fā)板來說。
對于Arduino硬件平臺來說,他有好多種,主要的有下面幾種。
幸虧二頭同學(xué)的大力支持,現(xiàn)在福利君有兩款 ,UNO和Mega 2560 還有從HouminLi 那里拿來的ArduPilot Mega 1.X
所以,在沒有新設(shè)備進(jìn)入的情況下,筆記內(nèi)容不會超越這三個板子的功能。
當(dāng)然,Mega2560 已經(jīng)非常非常強(qiáng)大了,并且不和其他的atmegax8系列特性完全一樣,所以程序是不能不修改直接移植的,就算我們使用了相同的擴(kuò)展板。
說道atmega8 不得不說說這個系列芯片的特性。
根據(jù)這個圖,我們很容易可以看出每個數(shù)字代表的含義。
比如 Atmega328P??? -------- 32 代表32k flash?? 8 代表 8位機(jī)???? P代表低功耗
這些是arduino所支持的主控芯片。
對于我們比較常見的應(yīng)用來說,我們需要知道Arduino 的基本電氣特性。
我們來一張大照片。
我們可以從絲印(神馬是絲印? 去翻該篇的附錄1)中看到:
- 14個數(shù)字IO
- 6個模擬輸入
- 3路地
- 2路參考輸入電壓
- 1路3.3V輸出
- 1路5V輸出
還有兩個ICSP,現(xiàn)在對我們來說用處不大。 因?yàn)橘I來的板子bootloader都燒寫完畢了。
下面詳細(xì)介紹一下。
14路數(shù)字輸入輸出口:工作電壓為5V,每一路能輸出和接入最大電流為40mA。每一路配置了20-50K歐姆內(nèi)部上拉電阻(默認(rèn)不連接)。除此之外,有些引腳有特定的功能
- 串口信號RX(0號)、TX(1號): 與內(nèi)部 ATmega8U2 USB-to-TTL 芯片相連,提供TTL電壓水平的串口接收信號。
- 外部中斷(2號和3號):觸發(fā)中斷引腳,可設(shè)成上升沿、下降沿或同時觸發(fā)。
- 脈沖寬度調(diào)制PWM(3、5、6、9、10 、11):提供6路8位PWM輸出。
- SPI(10(SS),11(MOSI),12(MISO),13(SCK)):SPI通信接口。
- LED(13號):Arduino專門用于測試LED的保留接口,輸出為高時點(diǎn)亮LED,反之輸出為低時LED熄滅。
6路模擬輸入A0到A5:每一路具有10位的分辨率(即輸入有1024個不同值),默認(rèn)輸入信號范圍為0到5V,可以通過AREF調(diào)整輸入上限。除此之外,有些引腳有特定功能
- TWI接口(SDA A4和SCL A5):支持通信接口(兼容I2C總線)。
AREF:模擬輸入信號的參考電壓。
Reset:信號為低時復(fù)位單片機(jī)芯片。
硬件資源就是這么多,就像普通單片機(jī)一樣我們需要編程,雖然大家學(xué)過了數(shù)字電路,而且分高的一逼,那么真的明白寄存器是什么嗎,好吧,學(xué)霸的答案是肯定的。真的理解尋址是什么嗎,當(dāng)然,學(xué)霸的答案也是肯定的,那我們真正理解時序嗎,學(xué)霸的答案必須是肯定的,要不怎么能畫時序圖,做電路邏輯功能呢,但是,如果給學(xué)霸一份datasheet ,學(xué)霸能把一片Atmega8玩的和74LS163一樣嗎,哦,我們堅強(qiáng)的學(xué)霸告訴你,可以。好吧,我們認(rèn)為,學(xué)霸是不需要用Arduino ,學(xué)霸直接從AVR學(xué)起就可以了,當(dāng)然學(xué)霸必須選擇32位,ARM才是學(xué)霸入門的正確選擇,正所謂人間正道是滄桑,后話不提。
當(dāng)然,福利君不是學(xué)霸,福利君很懶,福利君要做的是加速開發(fā)流程,所以福利君選擇了Arduino。
讓我們看一下Arduino最基礎(chǔ)的小程序Blink,這個程序的地位如同編程語言中的Hello World ,通過這個,我們就能認(rèn)識到Arduino編程語言的基本結(jié)構(gòu)。
void setup() { // initialize the digital pin as an output.// Pin 13 has an LED connected on most Arduino boards:pinMode(13, OUTPUT); }void loop() {digitalWrite(13, HIGH); // set the LED ondelay(1000); // wait for a seconddigitalWrite(13, LOW); // set the LED offdelay(1000); // wait for a second }忘了說,在Arduino的數(shù)字13腳連了一個LED,當(dāng)輸出高電平就亮,低電平就滅。板子上本身就帶著這個LED以便測試Arduino的功能正常。
上面這個程序是合法的可執(zhí)行的,讓我們看一下結(jié)構(gòu)。
有兩個程序段:?? setup( ) 和 loop( )
根據(jù)簡單的英語翻譯,安裝,循環(huán)。
setup( ) 段中的內(nèi)容是用來定義io腳模式,載入庫,初始化變量的。這個程序段只會在打開電源或者按下重啟后運(yùn)行一次。
loop ( ) 段內(nèi)的code將在setup段執(zhí)行后執(zhí)行,并總在結(jié)束后重新開始。
從字面意思上來看,上面的程序讓板載led 一滅一亮,間隔都是一秒。
digitalWrite 的用法就是定義針腳和輸出電平,高電平電壓為輸入電壓,低電平電壓為ground電壓。
delay 的單位是毫秒。
?
MEGA2560 我們以后再說,小程序還用不上大炮。
附錄1 :
絲印:說明白點(diǎn)就是你在PCB電路板上看到的字。
例如UNO上面的
轉(zhuǎn)載于:https://www.cnblogs.com/Kaysin/archive/2013/02/15/2913060.html
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Arduino 笔记。开篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 项目杂记——在后台获取Repeater控
- 下一篇: 在字符串中附加格式化的字符串
