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