Arduino 常用函数参考文档
Arduino 常用函數參考文檔
- 一、程序結構
- 二、數字輸入輸出
- 三、模擬輸入輸出
- 四、模擬輸入輸出
一、程序結構
1.setup():
Arduino控制器通電或復位后,即會開始執行setup() 函數中的程序,該部分只會執行一次。 通常我們會在setup() 函數中完成Arduino的初始化設置,如配置I/O口狀態,初始化串口等操作。eg.示例程序
// 給13號引腳連接的設備設置一個別名“led” ;// 在板子啟動或者復位重啟后, setup部分的程序只會運行一次 void setup(){// 將“led”引腳設置為輸出狀態pinMode(led, OUTPUT); }// setup部分程序運行完后,loop部分的程序會不斷重復運行 void loop() {digitalWrite(led, HIGH); // 點亮LEDdelay(); // 等待一秒鐘digitalWrite(led, LOW); // 通過將引腳電平拉低,關閉LEDdelay(); // 等待一秒鐘 }2.loop():
在setup() 函數中的程序執行完后,Arduino會接著執行loop() 函數中的程序。而loop()函數是一個死循環,其中的程序會不斷的重復運行。 通常我們會在loop() 函數中完成程序的主要功能,如驅動各種模塊,采集數據等。eg.示例程序
// 給13號引腳連接的設備設置一個別名“led” ;// 在板子啟動或者復位重啟后, setup部分的程序只會運行一次 void setup(){// 將“led”引腳設置為輸出狀態pinMode(led, OUTPUT); }// setup部分程序運行完后,loop部分的程序會不斷重復運行 void loop() {digitalWrite(led, HIGH); // 點亮LEDdelay(); // 等待一秒鐘digitalWrite(led, LOW); // 通過將引腳電平拉低,關閉LEDdelay(); // 等待一秒鐘 }3.main():
在進行Arduino開發時,沒有像傳統C/C++程序使用入口函數main。實際上main函數存在于Arduino核心庫中,且仍然是程序的入口。 在Arduino核心庫中可見main.cpp文件,其內容如下: #include <Arduino.h>// Declared weak in Arduino.h to allow user redefinitions. ; }// 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) {init();initVariant();#if defined(USBCON)USBDevice.attach(); #endifsetup();for (;;) {loop();if (serialEventRun) serialEventRun();}; }通過以上程序可見,Arduino程序中編寫的setup和loop函數,都在main函數中調用了。
loop的循環執行,是通過for循環實現的,且每次loop結束后,都會進行串口事件判斷,也正是因為這種設計,串口事件不能實時響應。
二、數字輸入輸出
1.pinMode ( pin , mode ) :
在使用輸入或輸出功能前,你需要先通過pinMode() 函數配置引腳的模式為輸入模式或輸出模式。
參數:
1、參數pin為指定配置的引腳編號
2、參數mode為指定的配置模式
3、通常可用模式有三種:
4、INPUT 輸入模式
5、OUTPUT 輸出模式
6、INPUT_PULLUP 輸入上拉模式
eg.示例程序
2.digitalWrite ( pin , value ) :
①之前我們在Blink程序中使用到了pinMode(, OUTPUT),即是把13號引腳配置為輸出模式。
②配置成輸出模式后,你還需要使用digitalWrite() 讓其輸出高電平或者是低電平。
參數:
①、參數pin為指定輸出的引腳編號;
②、參數value為你要指定輸出的電平
③、使用HIGH指定輸出高電平,或是使用LOW指定輸出低電平。
eg.示例程序
Arduino中輸出的低電平為0V,輸出的高電平為當前Arduino的工作電壓。
例如Arduino UNO的工作電壓為5V,其高電平輸出也是5V;Arduino Uno工作電壓為3.3V,所以高電平輸出也就是3.3V。
3、digitalRead ( pin ) :
在使用輸入或輸出功能前,你需要先通過pinMode() 函數配置引腳的模式為輸入模式或輸出模式。
參數: 參數pin為指定讀取狀態的引腳編號。
返回值: 返回值為獲取到的信號狀態,1為高電平,0為低電平。
eg.示例程序
三、模擬輸入輸出
1.analogRead ( pin ) :
① 模擬輸入引腳是帶有ADC(Analog-to-Digital Converter,模數轉換器)功能的引腳。
②它可以將外部輸入的模擬信號轉換為芯片運算時可以識別的數字信號,從而實現讀入模擬值的功能。
③模擬輸入功能需要使用analogRead() 函數。
參數: 參數pin是指定要讀取模擬值的引腳,被指定的引腳必須是模擬輸入引腳。如analogRead(A0),即是讀取A0引腳上的模擬值。
返回值: Arduino Uno模擬輸入功能有10位精度,即可以將0~5V的電壓信號轉換為0~1023的整數形式表示。
eg.示例程序
2.analogWrite ( pin , value ) :
①使用analogWrite() 函數實現PWM輸出功能。
②在Arduino Uno中,提供PWM功能的引腳為3、5、6、9、10、11。
③在analogWrite() 和analogRead() 函數內部,已經完成了引腳的初始化,因此不用在Setup() 函數中進行初始化操作。
參數: 參數pin是指定要輸出PWM波的引腳;參數value指定是PWM的脈沖寬度,范圍為0~255。
返回值: Arduino Uno模擬輸入功能有10位精度,即可以將0~5V的電壓信號轉換為0~1023的整數形式表示。
eg.示例程序
/*
Fading
通過analogWrite() 函數實現呼吸燈效果
*/
; // LED連接在9號引腳上
void setup() {
// Setup部分不進行任何處理
}
void loop() {
// 從暗到亮,以每次加5的形式逐漸亮起來
; fadeValue <= ; fadeValue +=) {
// 輸出PWM
analogWrite(ledPin, fadeValue);
// 等待30ms,以便觀察到漸變效果
delay();
}
// 從亮到暗,以每次減5的形式逐漸暗下來
; fadeValue >= ; fadeValue -=) {
// 輸出PWM
analogWrite(ledPin, fadeValue);
// 等待30ms,以便觀察到漸變效果
delay();
}
}
四、模擬輸入輸出
1.調聲函數
1)tone ( ) :
可以讓指定引腳產生一個占空比為50%的指定頻率的方波。
語法:
tone(pin, frequency) tone(pin, frequency, duration)
返回值:
Arduino Uno模擬輸入功能有10位精度,即可以將0~5V的電壓信號轉換為0~1023的整數形式表示。
2)no Tone ( pin ):
停止指定引腳上的方波輸出。
語法:
noTone(pin)
參數:
pin : 余姚停止方波輸出的引腳
eg.示例程序
/* MelodyPlays a melody This example code is in the public domain. http://arduino.cc/en/Tutorial/Tone */#include "pitches.h"// 記錄曲子的音符 int melody[] = {NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,, NOTE_B3, NOTE_C4};// 音符持續時間 4為四分音符, 8為八分音符 int noteDurations[] = {, , , ,,,, };void setup() {// 遍歷整個曲子的音符; thisNote < ; thisNote++) {// noteDurations[]數組中存儲的是音符的類型 // 我們需要將其換算為音符持續時間,方法如下:// 音符持續時間=1000ms / 音符類型// 例如,四分音符=1000 / 4,8分音符 = 1000/8/noteDurations[thisNote];tone(, melody[thisNote],noteDuration);// 為了能辨別出不同的音調,你需要在兩個音調間設置一定的延時// 增加30%延時時間是比較合適的int pauseBetweenNotes = noteDuration * 1.30;delay(pauseBetweenNotes);// 停止發聲noTone();} }void loop() {// 程序并不重復,因此這里為空 }2.pulisein() :
檢測指定引腳上的脈沖信號寬度。
例如當要檢查高電平脈沖時,pulseln()會等待指定引腳輸入的電平變高,當變高后開始記時,知道輸入電平變低,停止計時。
pulseln()函數會返回這個脈沖信號的持續時間,即這個脈沖的寬度。
函數還可以設定超時時間,如果超時設定時間,仍未檢測到脈沖,則會退出pulseln()函數并返回0.
當沒有設定超時時間時,pulseln()會默認1秒鐘的超時時間。
語法:
1)pulseln ( pin , value )
2)pulsein ( pin , value , timeout )
參數:
pin : 需要讀取脈沖的引腳
value :需要讀取的脈沖類型, HIGH OR LOW
timeout :超時時間 ,單位微秒 ,數據類型為無符號長整型。
返回值:
返回脈沖寬度 , 單位微秒 ,數據類型為無符號長整型 。 如果在指定時間內沒有檢測到脈沖,則返回0 .
eg.示例程序
3.外部中斷
影響中斷的處理程序——中斷函數,當中斷觸發后,Arduino便會進行這個函數。
該函數不能帶任何參數,且返回類型為空。如:
void Hello () {flag = ture ; }1)attachlneterrupt ( pin , ISR , mode )
對中斷引腳進行初始化設置,以開啟Arduino的外部中斷功能
示例:
attachinterrupt ( 2 , Hello , LOW ) ;該語句會開啟Arduino Uno 的 2 號引腳(中斷編號0)的外部中斷功能,并指定下降沿時觸發該中斷。
當2號引腳上電平由高變低后,該中斷會被觸發,Arduino即會運行Hello ()函數中的語句。
2) detachlnterrupt ( pin )
如果你不需要使用外部中斷了,你可以用中斷分離函數detachlnterrupt()來關閉中斷功能。
參數: pin : 需要禁用中斷的引腳。
示例: detachlnterrupt( 2 )
eg.示例程序
/* Arduino外部中斷的使用 外部中斷觸發警報聲 */// 默認無遮擋,蜂鳴器發聲 volatile boolean RunBuzzer = true;void setup() {Serial.begin();// 初始化外部中斷// 當2號引腳輸入的電平由高變低時,觸發中斷函數warningattachInterrupt(, warning, CHANGE); }void loop() {if(RunBuzzer){tone(,);}else{noTone();} }// 中斷函數 void warning () {RunBuzzer=!RunBuzzer; }轉載:https://www.bbsmax.com/A/VGzlae21Jb/
總結
以上是生活随笔為你收集整理的Arduino 常用函数参考文档的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 谈谈mysql locate函数
- 下一篇: Neo4j 查询语法入门