Arduino,是一個(gè)開(kāi)放源代碼的單芯片微電腦,它使用了Atmel AVR單片機(jī),采用了基于開(kāi)放源代碼的軟硬件平臺(tái),構(gòu)建于開(kāi)放源代碼 simple I/O 接口板,并且具有使用類(lèi)似Java,C 語(yǔ)言的Processing/Wiring開(kāi)發(fā)環(huán)境。
Arduino開(kāi)發(fā)板封裝了常用的庫(kù)到開(kāi)發(fā)環(huán)境中,可以讓用戶在開(kāi)發(fā)產(chǎn)品時(shí),將主要注意力放置于所需要實(shí)現(xiàn)的功能上,而不是開(kāi)發(fā)的過(guò)程中。在為Arduino寫(xiě)串口程序時(shí),我們只需要用Serial.begin(9600)以9600的速率初始化串口,而在往串口發(fā)送數(shù)據(jù)時(shí),可以用Serial.write('1')的方式向串口發(fā)送字串'1'。
Arduino的出現(xiàn)很大程度上降低了電子制作的難度,初學(xué)者甚至不懂編程也可以上手Arduino,這也是它的魅力所在。
為了滿足各種需求,Arduino團(tuán)隊(duì)設(shè)計(jì)了很多款開(kāi)發(fā)板,如UNO、Pro mini、Mega2560、Due、Leonardo、Yún、Pro、Fio、Nano等十幾種 開(kāi)發(fā)板和擴(kuò)展板。最適合初學(xué)者的一款是Arduino UNO 。下圖是Arduino UNO 的外觀圖:
注:后面的程序也是基于Arduino UNO開(kāi)發(fā)板來(lái)講解。
開(kāi)發(fā)環(huán)境如上圖,十分簡(jiǎn)潔,編寫(xiě)代碼需要知道兩個(gè)基本的函數(shù):
void setup(){
}
void loop(){
}
setup()
函數(shù)用于初始化(如GPIO初始化,串口初始化,定時(shí)器初始化等)特點(diǎn)是只執(zhí)行一次;loop()
函數(shù)是一個(gè)死循環(huán),可以看做C語(yǔ)言的while(1)
函數(shù)。
對(duì)初學(xué)者來(lái)說(shuō),點(diǎn)亮led已成為入門(mén)必修課,使用Arduino控制led十分簡(jiǎn)單,并且很容易理解。 使用到的函數(shù):
上一段代碼分析:
int led=13;
void setup()
{
pinMode(led,OUTPUT);
}
void loop()
{
digitalWrite(led,HIGH);
delay(1000);
digitalWrite(led,LOW);
delay(1000);
}
該程序?qū)崿F(xiàn)Arduino單片機(jī)13號(hào)引腳以1S時(shí)間電平翻轉(zhuǎn),如果外接一個(gè)led,就可以看到led以1S的間隔閃爍;函數(shù)pinMode()
有兩個(gè)參數(shù)pin、value,pin參數(shù)用來(lái)指定引腳號(hào),本程序中設(shè)置為13號(hào)引腳,mode用于設(shè)置引腳模式,有三個(gè)值:
INPUT
OUTPUT
INPUT_PULLUP
表示讓某一個(gè)IO引腳作輸入,反之,
OUTPUT
則使一個(gè)IO引腳做輸出INPUT_PULLUP
則配置一個(gè)IO引腳具有上拉輸入功能(上拉電阻的目的是為了保證在無(wú)信號(hào)輸入時(shí)輸入端的電平為高電平),從英文意思也能很直觀的看出來(lái)。理解了pinMode()
函數(shù),digitalWrite()
就很容易理解啦,value的取值有兩個(gè)HIGH
、LOW
,HIGH
表示讓某一個(gè)引腳輸出高電平,反之,LOW
則使某一個(gè)引腳輸出低電平。 程序中還是用到delay(ms)
函數(shù),它表示延時(shí)多少毫秒,例如延時(shí)500 ms ,直接調(diào)用delay(500);
就可以了。
如果你仔細(xì)查看我的描述,你會(huì)發(fā)現(xiàn)我沒(méi)有講13號(hào)引腳怎么來(lái)的,是這樣的:Arduino團(tuán)隊(duì)為了簡(jiǎn)化對(duì)引腳描述,對(duì)每個(gè)引腳都進(jìn)行了編號(hào),以UNO開(kāi)發(fā)板為例,可以發(fā)現(xiàn)開(kāi)發(fā)板排座的附近有對(duì)應(yīng)的白顏色的數(shù)字,那便是所有的引腳編號(hào),A0~A5是6路ADC輸入引腳,0-13表示13路基本IO,數(shù)字前面的~
表示該引腳具有PWM功能。如果要使用某一引腳,只需要知道引腳編號(hào)就可編寫(xiě)相應(yīng)代碼進(jìn)行操作。
例如digitalWrite(2,LOW)
表示向2號(hào)引腳輸出低電平。其他操作類(lèi)似,是不是so easy ^-^ !
使用到的基本函數(shù):
在此項(xiàng)目中需要使用串口,Arduino串口初始化使用Serial.begin(9600);
,其傳輸波特率為9600,其他波特率也行,函數(shù)位于setup()
中,之后可以使用Serial.read()
、Serial.write()
讀入一個(gè)字符,輸出一個(gè)字符,使用Serial.print()
輸出字符串.代碼如下:
char ch='1';
void setup()
{
Serial.begin(9600);
}
void loop()
{
Serial.write(ch);
while(1)
{
if(Serial.available())
{
ch = Serial.read();
Serial.print(ch);
}
}
}
以上程序?qū)崿F(xiàn)字符的輸出(Serial.write(),Serial.print())和讀入(Serial.read())。如果需要了解更多,可以參考:Arduino官網(wǎng)
如果你對(duì)Arduino的Setup很疑惑的話,可以看看這里。下面Arduino源碼目錄中的main函數(shù):
#include <Arduino.h>
int main(void)
{
init();
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
更多建議: