日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

arduinohanshu_Arduino 常用函数参考文档

發(fā)布時間:2024/10/8 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 arduinohanshu_Arduino 常用函数参考文档 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

封裝好的API,使得程序中的語句更容易被理解,我們不用理會單片機(jī)中繁雜的寄存器配置,就能直觀的控制Arduino,增強(qiáng)程序可讀性的同時,也提高了開發(fā)效率。

本篇主要介紹:

一,項(xiàng)目結(jié)構(gòu)

1.setup

2.loop

3.main

二,數(shù)字輸入輸出

1.pinMode ( pin , mode )

2.digitalWrite ( pin , value )

3.digitalRead ( pin )

三,模擬輸入輸出

1.analogRead

2.analogWrite

四,模擬輸入輸出

1.tone

2.pulisein

3.外部中斷

-----------------------------------------------------------------------------------------------------------

一,項(xiàng)目結(jié)構(gòu)

1.setup

2.loop

3.main

1.setup():

Arduino控制器通電或復(fù)位后,即會開始執(zhí)行setup() 函數(shù)中的程序,該部分只會執(zhí)行一次。

通常我們會在setup() 函數(shù)中完成Arduino的初始化設(shè)置,如配置I/O口狀態(tài),初始化串口等操作。

eg.示例程序

//給13號引腳連接的設(shè)備設(shè)置一個別名“l(fā)ed”

int led = 13;//在板子啟動或者復(fù)位重啟后, setup部分的程序只會運(yùn)行一次

voidsetup(){//將“l(fā)ed”引腳設(shè)置為輸出狀態(tài)

pinMode(led, OUTPUT);

}//setup部分程序運(yùn)行完后,loop部分的程序會不斷重復(fù)運(yùn)行

voidloop()

{

digitalWrite(led, HIGH);//點(diǎn)亮LED

delay(1000); //等待一秒鐘

digitalWrite(led, LOW); //通過將引腳電平拉低,關(guān)閉LED

delay(1000); //等待一秒鐘

}

2.loop():

在setup() 函數(shù)中的程序執(zhí)行完后,Arduino會接著執(zhí)行l(wèi)oop() 函數(shù)中的程序。而loop()函數(shù)是一個死循環(huán),其中的程序會不斷的重復(fù)運(yùn)行。

通常我們會在loop() 函數(shù)中完成程序的主要功能,如驅(qū)動各種模塊,采集數(shù)據(jù)等。

eg.示例程序

//給13號引腳連接的設(shè)備設(shè)置一個別名“l(fā)ed”

int led = 13;//在板子啟動或者復(fù)位重啟后, setup部分的程序只會運(yùn)行一次

voidsetup(){//將“l(fā)ed”引腳設(shè)置為輸出狀態(tài)

pinMode(led, OUTPUT);

}//setup部分程序運(yùn)行完后,loop部分的程序會不斷重復(fù)運(yùn)行

voidloop()

{

digitalWrite(led, HIGH);//點(diǎn)亮LED

delay(1000); //等待一秒鐘

digitalWrite(led, LOW); //通過將引腳電平拉低,關(guān)閉LED

delay(1000); //等待一秒鐘

}

3.main():

在進(jìn)行Arduino開發(fā)時,沒有像傳統(tǒng)C/C++程序使用入口函數(shù)main。實(shí)際上main函數(shù)存在于Arduino核心庫中,且仍然是程序的入口。

在Arduino核心庫中可見main.cpp文件,其內(nèi)容如下:

#include

//Declared weak in Arduino.h to allow user redefinitions.

int atexit(void (* /*func*/ )()) { return 0; }//Weak empty variant initialization function.//May be redefined by variant files.

voidinitVariant() __attribute__((weak));voidinitVariant() { }voidsetupUSB() __attribute__((weak));voidsetupUSB() { }int main(void)

{

init();

initVariant();#if defined(USBCON)USBDevice.attach();#endifsetup();for(;;) {

loop();if(serialEventRun) serialEventRun();

}return 0;

}

通過以上程序可見,Arduino程序中編寫的setup和loop函數(shù),都在main函數(shù)中調(diào)用了。

loop的循環(huán)執(zhí)行,是通過for循環(huán)實(shí)現(xiàn)的,且每次loop結(jié)束后,都會進(jìn)行串口事件判斷,也正是因?yàn)檫@種設(shè)計(jì),串口事件不能實(shí)時響應(yīng)。

二,數(shù)字輸入輸出

1.pinMode ( pin , mode )

2.digitalWrite ( pin , value )

3.digitalRead ( pin )

1.pinMode ( pin , mode ) :

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

參數(shù):

參數(shù)pin為指定配置的引腳編號

參數(shù)mode為指定的配置模式

通常可用模式有三種:

INPUT 輸入模式

OUTPUT 輸出模式

INPUT_PULLUP 輸入上拉模式

eg.示例程序

/*

Blink

等待一秒鐘,點(diǎn)亮LED,再等待一秒鐘,熄滅LED,如此循環(huán)

*/

// 在大多數(shù)Arduino控制板上 13號引腳都連接了一個標(biāo)有“L”的LED燈

// 給13號引腳連接的設(shè)備設(shè)置一個別名“l(fā)ed”

int led = 13;

// 在板子啟動或者復(fù)位重啟后, setup部分的程序只會運(yùn)行一次

void setup(){

// 將“l(fā)ed”引腳設(shè)置為輸出狀態(tài)

pinMode(led, OUTPUT);

}

// setup部分程序運(yùn)行完后,loop部分的程序會不斷重復(fù)運(yùn)行

void loop()

{

digitalWrite(led, HIGH); // 點(diǎn)亮LED

delay(1000); // 等待一秒鐘

digitalWrite(led, LOW); // 通過將引腳電平拉低,關(guān)閉LED

delay(1000); // 等待一秒鐘

}

2.digitalWrite ( pin , value ) :

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

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

參數(shù):

參數(shù)pin為指定輸出的引腳編號;

參數(shù)value為你要指定輸出的電平

使用HIGH指定輸出高電平,或是使用LOW指定輸出低電平。

eg.示例程序

/*

Blink

等待一秒鐘,點(diǎn)亮LED,再等待一秒鐘,熄滅LED,如此循環(huán)

*/

// 在大多數(shù)Arduino控制板上 13號引腳都連接了一個標(biāo)有“L”的LED燈

// 給13號引腳連接的設(shè)備設(shè)置一個別名“l(fā)ed”

int led = 13;

// 在板子啟動或者復(fù)位重啟后, setup部分的程序只會運(yùn)行一次

void setup(){

// 將“l(fā)ed”引腳設(shè)置為輸出狀態(tài)

pinMode(led, OUTPUT);

}

// setup部分程序運(yùn)行完后,loop部分的程序會不斷重復(fù)運(yùn)行

void loop()

{

digitalWrite(led, HIGH); // 點(diǎn)亮LED

delay(1000); // 等待一秒鐘

digitalWrite(led, LOW); // 通過將引腳電平拉低,關(guān)閉LED

delay(1000); // 等待一秒鐘

}

Arduino中輸出的低電平為0V,輸出的高電平為當(dāng)前Arduino的工作電壓。

例如Arduino UNO的工作電壓為5V,其高電平輸出也是5V;Arduino Uno工作電壓為3.3V,所以高電平輸出也就是3.3V。

3.digitalRead ( pin ) :

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

參數(shù):

參數(shù)pin為指定讀取狀態(tài)的引腳編號。

返回值:

返回值為獲取到的信號狀態(tài),1為高電平,0為低電平。

eg.示例程序

1 /*

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

4

5 //設(shè)置各引腳別名

6 const int buttonPin = 2; //連接按鍵的引腳

7 const int ledPin = 13; //連接LED的引腳8

9 //變量定義

10 int buttonState = 0; //存儲按鍵狀態(tài)的變量

11

12 voidsetup() {13 //初始化LED引腳為輸出狀態(tài)

14 pinMode(ledPin, OUTPUT);15 //初始化按鍵引腳為輸入狀態(tài)

16 pinMode(buttonPin, INPUT);17 }18

19 voidloop(){20 //讀取按鍵狀態(tài)并存儲在變量中

21 buttonState =digitalRead(buttonPin);22

23 //檢查按鍵是否被按下24 //如果按鍵按下,那buttonState應(yīng)該為高電平

25 if (buttonState ==HIGH) {26 //點(diǎn)亮LED

27 digitalWrite(ledPin, HIGH);28 }29 else{30 //熄滅LED

31 digitalWrite(ledPin, LOW);32 }33 }

三,模擬輸入輸出

1.analogRead

2.analogWrite

1.analogRead ( pin ) :

模擬輸入引腳是帶有ADC(Analog-to-Digital Converter,模數(shù)轉(zhuǎn)換器)功能的引腳。

它可以將外部輸入的模擬信號轉(zhuǎn)換為芯片運(yùn)算時可以識別的數(shù)字信號,從而實(shí)現(xiàn)讀入模擬值的功能。

模擬輸入功能需要使用analogRead() 函數(shù)。

參數(shù):

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

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

返回值:

Arduino Uno模擬輸入功能有10位精度,即可以將0~5V的電壓信號轉(zhuǎn)換為0~1023的整數(shù)形式表示。

eg.示例程序

/*光敏電阻檢測環(huán)境光http://www.arduino.cn/

*/

voidsetup()

{//初始化串口

Serial.begin(9600);

}voidloop()

{//讀出當(dāng)前光線強(qiáng)度,并輸出到串口顯示

int sensorValue =analogRead(A0);

Serial.println(sensorValue);

delay(1000);

}

2.analogWrite ( pin , value ) :

使用analogWrite() 函數(shù)實(shí)現(xiàn)PWM輸出功能。

在Arduino Uno中,提供PWM功能的引腳為3、5、6、9、10、11。

在analogWrite() 和analogRead() 函數(shù)內(nèi)部,已經(jīng)完成了引腳的初始化,因此不用在Setup() 函數(shù)中進(jìn)行初始化操作。

參數(shù):

參數(shù)pin是指定要輸出PWM波的引腳;

參數(shù)value指定是PWM的脈沖寬度,范圍為0~255。

返回值:

Arduino Uno模擬輸入功能有10位精度,即可以將0~5V的電壓信號轉(zhuǎn)換為0~1023的整數(shù)形式表示。

eg.示例程序

/*Fading

通過analogWrite() 函數(shù)實(shí)現(xiàn)呼吸燈效果*/

int ledPin = 9; //LED連接在9號引腳上

voidsetup() {//Setup部分不進(jìn)行任何處理

}voidloop() {//從暗到亮,以每次加5的形式逐漸亮起來

for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) {//輸出PWM

analogWrite(ledPin, fadeValue);//等待30ms,以便觀察到漸變效果

delay(30);

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

for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) {//輸出PWM

analogWrite(ledPin, fadeValue);//等待30ms,以便觀察到漸變效果

delay(30);

}

}

四,模擬輸入輸出

1.tone

2.pulisein

3.外部中斷

1.調(diào)聲函數(shù)

1)tone ( ) :

可以讓指定引腳產(chǎn)生一個占空比為50%的指定頻率的方波。

語法:

tone(pin, frequency) tone(pin, frequency, duration)

返回值:

Arduino Uno模擬輸入功能有10位精度,即可以將0~5V的電壓信號轉(zhuǎn)換為0~1023的整數(shù)形式表示。

2)no Tone ( pin ):

停止指定引腳上的方波輸出。

語法:

noTone(pin)

參數(shù):

pin : 余姚停止方波輸出的引腳

eg.示例程序

/*Melody

Plays 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,0, NOTE_B3, NOTE_C4};//音符持續(xù)時間 4為四分音符, 8為八分音符

int noteDurations[] ={4, 8, 8, 4,4,4,4,4};voidsetup() {//遍歷整個曲子的音符

for (int thisNote = 0; thisNote < 8; thisNote++) {//noteDurations[]數(shù)組中存儲的是音符的類型//我們需要將其換算為音符持續(xù)時間,方法如下://音符持續(xù)時間=1000ms / 音符類型//例如,四分音符=1000 / 4,8分音符 = 1000/8

int noteDuration = 1000/noteDurations[thisNote];

tone(8, melody[thisNote],noteDuration);//為了能辨別出不同的音調(diào),你需要在兩個音調(diào)間設(shè)置一定的延時//增加30%延時時間是比較合適的

int pauseBetweenNotes = noteDuration * 1.30;

delay(pauseBetweenNotes);//停止發(fā)聲

noTone(8);

}

}voidloop() {//程序并不重復(fù),因此這里為空

}

2.pulisein() :

檢測指定引腳上的脈沖信號寬度。

例如當(dāng)要檢查高電平脈沖時,pulseln()會等待指定引腳輸入的電平變高,當(dāng)變高后開始記時,知道輸入電平變低,停止計(jì)時。

pulseln()函數(shù)會返回這個脈沖信號的持續(xù)時間,即這個脈沖的寬度。

函數(shù)還可以設(shè)定超時時間,如果超時設(shè)定時間,仍未檢測到脈沖,則會退出pulseln()函數(shù)并返回0.

當(dāng)沒有設(shè)定超時時間時,pulseln()會默認(rèn)1秒鐘的超時時間。

語法:

1)pulseln ( pin , value )

2)pulsein ( pin , value , timeout )

參數(shù):

pin : 需要讀取脈沖的引腳

value :需要讀取的脈沖類型, HIGH OR LOW

timeout :超時時間 ,單位微秒 ,數(shù)據(jù)類型為無符號長整型。

返回值:

返回脈沖寬度 , 單位微秒 ,數(shù)據(jù)類型為無符號長整型 。 如果在指定時間內(nèi)沒有檢測到脈沖,則返回0 .

eg.示例程序

/*SR04超聲波傳感器驅(qū)動

串口顯示檢測距離*/

//設(shè)定SR04連接的Arduino引腳

const int TrigPin = 2;const int EchoPin = 3;floatdistance;voidsetup()

{//初始化串口通信及連接SR04的引腳

Serial.begin(9600);

pinMode(TrigPin, OUTPUT);//要檢測引腳上輸入的脈沖寬度,需要先設(shè)置為輸入狀態(tài)

pinMode(EchoPin, INPUT);

Serial.println("Ultrasonic sensor:");

}voidloop()

{//產(chǎn)生一個10us的高脈沖去觸發(fā)TrigPin

digitalWrite(TrigPin, LOW);

delayMicroseconds(2);

digitalWrite(TrigPin, HIGH);

delayMicroseconds(10);

digitalWrite(TrigPin, LOW);//檢測脈沖寬度,并計(jì)算出距離

distance = pulseIn(EchoPin, HIGH)/ 58.00;

Serial.print(distance);

Serial.print("cm");

Serial.println();

delay(1000);

}

3.外部中斷

影響中斷的處理程序——中斷函數(shù),當(dāng)中斷觸發(fā)后,Arduino便會進(jìn)行這個函數(shù)。

該函數(shù)不能帶任何參數(shù),且返回類型為空。如:

voidHello () {

flag=ture ;

}

1)attachlneterrupt ( pin , ISR , mode )

對中斷引腳進(jìn)行初始化設(shè)置,以開啟Arduino的外部中斷功能

示例:

attachinterrupt ( 2 , Hello , LOW ) ;該語句會開啟Arduino Uno 的 2 號引腳(中斷編號0)的外部中斷功能,并指定下降沿時觸發(fā)該中斷。

當(dāng)2號引腳上電平由高變低后,該中斷會被觸發(fā),Arduino即會運(yùn)行Hello ()函數(shù)中的語句。

2) detachlnterrupt ( pin )

如果你不需要使用外部中斷了,你可以用中斷分離函數(shù)detachlnterrupt()來關(guān)閉中斷功能。

參數(shù):

pin : 需要禁用中斷的引腳。

示例:

detachlnterrupt( 2 )

eg.示例程序

/*Arduino外部中斷的使用

外部中斷觸發(fā)警報(bào)聲*/

//默認(rèn)無遮擋,蜂鳴器發(fā)聲

volatile boolean RunBuzzer = true;voidsetup()

{

Serial.begin(9600);//初始化外部中斷//當(dāng)2號引腳輸入的電平由高變低時,觸發(fā)中斷函數(shù)warning

attachInterrupt(2, warning, CHANGE);

}voidloop()

{if(RunBuzzer)

{

tone(8,1000);

}else{

noTone(8);

}

}//中斷函數(shù)

voidwarning ()

{

RunBuzzer=!RunBuzzer;

}

總結(jié)

以上是生活随笔為你收集整理的arduinohanshu_Arduino 常用函数参考文档的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。