Ardunio程式設計基礎 一

2021-09-18 05:21:11 字數 3900 閱讀 8350

一.專案結構

1.setup()

arduino控制器通電或復位後,即會開始執行setup() 函式中的程式,該部分只會執行一次。

通常我們會在setup() 函式中完成arduino的初始化設定,如配置i/o口狀態,初始化串列埠等操作。 

示例程式

// 給13號引腳連線的裝置設定乙個別名「led」

int led = 13;

// 在板子啟動或者復位重啟後, setup部分的程式只會執行一次

void setup()

// setup部分程式執行完後,loop部分的程式會不斷重複執行

void loop() 

2.loop()

在setup() 函式中的程式執行完後,arduino會接著執行loop() 函式中的程式。而loop()函式是乙個死迴圈,其中的程式會不斷的重複執行。

通常我們會在loop() 函式中完成程式的主要功能,如驅動各種模組,採集資料等。 

示例程式

// 給13號引腳連線的裝置設定乙個別名「led」

int led = 13;

// 在板子啟動或者復位重啟後, setup部分的程式只會執行一次

void setup()

3.arduino程式main函式結構解析

在進行arduino開發時,沒有像傳統c/c++程式使用入口函式main。實際上main函式存在於arduino核心庫中,且仍然是程式的入口。

在arduino核心庫中可見main.cpp檔案,其內容如下: 

#include

// declared weak in arduino.h to allow user redefinitions.

int atexit(void (* /*func*/ )())

// weak empty variant initialization function.

// may be redefined by variant files.

void initvariant() __attribute__((weak));

void initvariant()

void setupusb() __attribute__((weak));

void setupusb()

int main(void)

return 0;

}通過以上程式可見,arduino程式中編寫的setup和loop函式,都在main函式中呼叫了。

loop的迴圈執行,是通過for迴圈實現的,且每次loop結束後,都會進行串列埠事件判斷,也正是因為這種設計,串列埠事件不能實時響應。 

// setup部分程式執行完後,loop部分的程式會不斷重複執行

void loop() 

二.數字輸入輸出

1.pinmode(pin, mode)

在使用輸入或輸出功能前,你需要先通過pinmode() 函式配置引腳的模式為輸入模式或輸出模式。 

引數引數pin為指定配置的引腳編號

引數mode為指定的配置模式

通常可用模式有三種:

input 輸入模式

output 輸出模式

input_pullup 輸入上拉模式 

示例程式

/*blink

等待一秒鐘,點亮led,再等待一秒鐘,熄滅led,如此迴圈

*/// 在大多數arduino控制板上 13號引腳都連線了乙個標有「l」的led燈

// 給13號引腳連線的裝置設定乙個別名「led」

int led = 13;

// 在板子啟動或者復位重啟後, setup部分的程式只會執行一次

void setup()

// setup部分程式執行完後,loop部分的程式會不斷重複執行

void loop() 

2.digitalwrite(pin, value)

之前我們在blink程式中使用到了pinmode(13, output),即是把13號引腳配置為輸出模式。

配置成輸出模式後,你還需要使用digitalwrite() 讓其輸出高電平或者是低電平。 

引數引數pin為指定輸出的引腳編號;

引數value為你要指定輸出的電平

使用high指定輸出高電平,或是使用low指定輸出低電平。 

示例程式

/*blink

等待一秒鐘,點亮led,再等待一秒鐘,熄滅led,如此迴圈

*/// 在大多數arduino控制板上 13號引腳都連線了乙個標有「l」的led燈

// 給13號引腳連線的裝置設定乙個別名「led」

int led = 13;

// 在板子啟動或者復位重啟後, setup部分的程式只會執行一次

void setup()

// setup部分程式執行完後,loop部分的程式會不斷重複執行

void loop() 

其他說明

arduino中輸出的低電平為0v,輸出的高電平為當前arduino的工作電壓。

例如arduino uno的工作電壓為5v,其高電平輸出也是5v;arduino uno工作電壓為3.3v,所以高電平輸出也就是3.3v。 

3.digitalread(pin)

在使用輸入或輸出功能前,你需要先通過pinmode() 函式配置引腳的模式為輸入模式或輸出模式。 

引數引數pin為指定讀取狀態的引腳編號。 

返回值返回值為獲取到的訊號狀態,1為高電平,0為低電平。 

示例程式

/*通過2號引腳連線的按鍵,控制13號引腳連線的led

*/// 設定各引腳別名

const int buttonpin = 2;     // 連線按鍵的引腳

const int ledpin =  13;      // 連線led的引腳

// 變數定義

int buttonstate = 0;         // 儲存按鍵狀態的變數

void setup()

void loop() 

else

}三.模擬輸入輸出

1.analogread(pin)

模擬輸入引腳是帶有adc(analog-to-digital converter,模數轉換器)功能的引腳。

它可以將外部輸入的模擬訊號轉換為晶元運算時可以識別的數碼訊號,從而實現讀入模擬值的功能。

模擬輸入功能需要使用analogread() 函式。 

引數引數pin是指定要讀取模擬值的引腳,被指定的引腳必須是模擬輸入引腳。

如analogread(a0),即是讀取a0引腳上的模擬值。 

返回值arduino uno模擬輸入功能有10位精度,即可以將0~5v的電壓訊號轉換為0~1023的整數形式表示。 

示例程式

/*光敏電阻檢測環境光

*/void setup()

void loop() 

2.analogwrite(pin,value)

使用analogwrite() 函式實現pwm輸出功能。

在arduino uno中,提供pwm功能的引腳為3、5、6、9、10、11。 

在analogwrite() 和analogread() 函式內部,已經完成了引腳的初始化,因此不用在setup() 函式中進行初始化操作。 

引數引數pin是指定要輸出pwm波的引腳;

引數value指定是pwm的脈衝寬度,範圍為0~255。 

示例程式

/*fading

通過analogwrite() 函式實現呼吸燈效果

*/int ledpin = 9;    // led連線在9號引腳上

void setup()   

void loop()   

// 從亮到暗,以每次減5的形式逐漸暗下來

for(int fadevalue = 255 ; fadevalue >= 0; fadevalue -=5)  

}

Ardunio和HAL庫函式程式設計(二 三)

二 hal庫函式介紹 三 兩者之間的區別 二 mcu整合開發平台,stduino ide的實踐感悟 三 三 總結 標準外設庫 standard peripherals library 是對stm32晶元的乙個完整的封裝,包括所有標準器件外設的器件驅動器。在使用中我們只需要配置結構體變數成員就可以修改...

shell程式設計基礎(一)

一 命令列 命令列結構 命令名 命令選項和命令引數三部分內容組成,中間以空格或製表符等空白字元分隔。如下 命令名 命令選項 命令引數 command option parameter 命令選項通常以減號 開始的單個字元,主要用於限定命令的具體功能,同時也決定命令的最終執行結果 選項可以單獨給出,也可...

網路程式設計基礎(一)

網路程式設計基礎 網路程式設計的實現就必須有伺服器和客戶端的存在 伺服器 為客戶提供服務的一方 客戶端 獲取資料的為客戶端,可以是任意一台主機,只要它和伺服器存在連線,並且的到伺服器的授權,就可以使用伺服器提供的服務 有兩種協議可以選擇 1 tcp 面向連線的 可靠的 流式服務 2 udp 無連線 ...