About | NetLify | NeoCities | Project | TEST | 管理

<<Arduino常用函數>>

Arduino常用函數說明[1]:

近日對Arduino學習筆記進行梳理,整理了69個常用Arduino函數集合備查,分別是:pinMode()函數、digitalWrite()函數、analogWrite()函數、analogRead()函數、digitalRead()函數、analogReference()函數、11個Arduino字符函數、39個Arduino數學函數、6個Arduino三角函數、2個Arduino隨機數函數(randomSeed(seed)、random())、tone()函數、noTone()函數、pulseIn()函數、min(x, y)函數、max(x, y)函數。

 

Arduino常用函數列表[1]:

一、pinMode()函數

pinMode()函數用於將特定引腳配置為輸入或輸出。可以使用INPUT_PULLUP模式啟用內部上拉電阻。此外,INPUT模式顯式禁止內部上拉。

(一)pinMode()函數語法

Void setup () {
 pinMode (pin , mode);
}
              
  • pin - 你希望設置模式的引腳的編號
  • mode - INPUT,OUTPUT或INPUT_PULLUP。

(二)pinMode()函數程序示例

int button = 5 ; // button connected to pin 5
int LED = 6; // LED connected to pin 6
void setup () {
 pinMode(button , INPUT_PULLUP); 
 // set the digital pin as input with pull-up resistor
 pinMode(button , OUTPUT); // set the digital pin as output
}
void setup () {
 If (digitalRead(button ) == LOW) // if button pressed {
 digitalWrite(LED,HIGH); // turn on led
 delay(500); // delay for 500 ms
 digitalWrite(LED,LOW); // turn off led
 delay(500); // delay for 500 ms
 }
}
              

二、digitalWrite()函數

digitalWrite()函數用於向數字引腳寫入HIGH或LOW值。如果該引腳已通過pinMode()配置為OUTPUT,則其電壓將被設置為相應的值:HIGH為5V(或3.3V在3.3V板上),LOW為0V(接地)。如果引腳配置為INPUT,則digitalWrite()將啟用(HIGH)或禁止(LOW)輸入引腳的內部上拉。建議將pinMode()設置為INPUT_PULLUP,以啟用 內部上拉電阻。

如果不將pinMode()設置為OUTPUT,而將LED連接到引腳,則在調用digitalWrite(HIGH)時,LED可能會變暗。在沒有明確設置pinMode()時,digitalWrite()將啟用內部上拉電阻,這就像一個大的限流電阻。

(一)digitalWrite()函數語法

Void loop() {
 digitalWrite (pin ,value);
}
    • pin - 你希望設置模式的引腳的編號
    • value - HIGH或LOW。

(二)digitalWrite()函數程序示例

int LED = 6; // LED connected to pin 6
void setup () {
 pinMode(LED, OUTPUT); // set the digital pin as output
}
void setup () { 
 digitalWrite(LED,HIGH); // turn on led
 delay(500); // delay for 500 ms
 digitalWrite(LED,LOW); // turn off led
 delay(500); // delay for 500 ms
}
  

三、analogWrite()函數

analogWrite()函數將模擬值(PWM波)寫入引腳。它可用於以不同的亮度點亮LED或以各種速度驅動電機。在調用analogWrite()函數之後,引腳將產生指定占空比的穩定方波,直到下一次調用analogWrite()或在相同引腳上調用digitalRead()或digitalWrite()。大多數引腳上的PWM信號頻率約為490 Hz。在Uno和類似的板上,引腳5和6的頻率約為980Hz。Leonardo上的引腳3和11也以980Hz運行。

在大多數Arduino板上(ATmega168或ATmega328),此功能在引腳3,5,6,9,10和11上工作。在Arduino Mega上,它在引腳2-13和44-46上工作。舊的Arduino ATmega8板僅支持引腳9,10和11上的analogWrite()

Arduino Due支持引腳2至13以及引腳DAC0和DAC1上的 analogWrite()。與PWM引腳不同,DAC0和DAC1是數模轉換器,用作真正的模擬輸出。

在調用analogWrite()之前,不需要調用pinMode()將引腳設置為輸出。

(一)analogWrite()函數語法

analogWrite ( pin , value ) ;
value ? the duty cycle: between 0 (always off) and 255 (always on).

value - 占空比:0(始終導通)到255(始終關斷)之間。

(二)analogWrite()函數程序示例

int ledPin = 9; // LED connected to digital pin 9
int analogPin = 3; // potentiometer connected to analog pin 3
int val = 0; // variable to store the read value
void setup() {
 pinMode(ledPin, OUTPUT); // sets the pin as output
}
void loop() {
 val = analogRead(analogPin); // read the input pin
 analogWrite(ledPin, (val / 4)); // analogRead values go from 0 to 1023, 
 // analogWrite values from 0 to 255
}
  

四、analogRead()函數

Arduino能夠檢測是否有一個電壓施加到其引腳,並通過digitalRead()函數報告。開/關傳感器(檢測物體的存在)和模擬傳感器之間存在一個差異,模擬傳感器的值連續變化。為了讀取這種類型的傳感器,我們需要一個不同類型的引腳。

在Arduino板的右下角,你會看到6個標記為「Analog In」的引腳。這些特殊引腳不僅可以告知是否有電壓施加給它們,還可以告知它們的值。通過使用analogRead()函數,我們可以讀取施加到其中一個引腳的電壓。

此函數返回0到1023之間的數字,表示0到5伏特之間的電壓。例如,如果施加到編號0的引腳的電壓為2.5V,則analogRead(0)返回512。

(一)analogRead()函數語法

analogRead(pin);
  • pin - 要讀取的模擬輸入引腳的編號(大多數電路板上為0至5,Mini和Nano上為0至7,Mega上為0至15)

(二)analogRead()函數程序示例

int analogPin = 3;//potentiometer wiper (middle terminal) 
 // connected to analog pin 3 
int val = 0; // variable to store the value read
void setup() {
 Serial.begin(9600); // setup serial
} 
void loop() {
 val = analogRead(analogPin); // read the input pin
 Serial.println(val); // debug value
}
  

五、digitalRead()函數

Reads the value from a specified digital pin, either HIGH or LOW.

(一)digitalRead()函數語法

digitalRead(pin)

Parameters

pin: the number of the digital pin you want to read

返回值

HIGH or LOW

(二)digitalRead()函數程序示例

Sets pin 13 to the same value as pin 7, declared as an input.

int ledPin = 13; // LED connected to digital pin 13
int inPin = 7; // pushbutton connected to digital pin 7
int val = 0; // variable to store the read value
void setup() {
 pinMode(ledPin, OUTPUT); // sets the digital pin 13 as output
 pinMode(inPin, INPUT); // sets the digital pin 7 as input
}
void loop() {
 val = digitalRead(inPin); // read the input pin
 digitalWrite(ledPin, val); // sets the LED to the button's value
}
  

Notes and Warnings

If the pin isn’t connected to anything, digitalRead() can return either HIGH or LOW (and this can change randomly).

The analog input pins can be used as digital pins, referred to as A0, A1, etc. The exception is the Arduino Nano, Pro Mini, and Mini’s A6 and A7 pins, which can only be used as analog inputs.

六、analogReference()函數

配置用於模擬輸入的參考電壓(即用作輸入範圍頂部的值)。選項是:

  • DEFAULT - 5伏(5V Arduino板)或3.3伏(3.3V Arduino板)的默認模擬參考值
  • INTERNAL - 內置參考,在ATmega168或ATmega328上等於1.1伏特,在ATmega8上等於2.56伏特(不適用於Arduino Mega)
  • INTERNAL1V1 - 內置1.1V參考(僅限Arduino Mega)
  • INTERNAL2V56 - 內置2.56V參考(僅限Arduino Mega)
  • EXTERNAL - 施加到AREF引腳的電壓(僅限0到5V)用作參考

(一)analogReference()函數語法

analogReference (type);
  

type - 可以使用以下任何類型(DEFAULT,INTERNAL,INTERNAL1V1,INTERNAL2V56,EXTERNAL)

對AREF引腳的外部參考電壓,請勿使用小於0V或大於5V的任何值。如果在AREF引腳上使用外部參考,則必須在調用 analogRead()函數之前將模擬參考設置為EXTERNAL。否則,將短路有效參考電壓(內部產生的)和AREF引腳,可能會損壞Arduino板上的微控制器。

或者,你可以通過5K電阻將外部參考電壓連接到AREF引腳,從而允許在外部和內部參考電壓之間切換。

注意,電阻將改變用作參考的電壓,因為AREF引腳上有一個內部32K電阻。兩者用作分壓器。例如,通過電阻器施加的2.5V將在AREF引腳處產生2.5*32/(32+5)=~2.2V電壓。

(二)analogReference()程序示例

int analogPin = 3;// potentiometer wiper (middle terminal) connected to analog pin 3 
int val = 0; // variable to store the read value
void setup() {
 Serial.begin(9600); // setup serial
 analogReference(EXTERNAL); // the voltage applied to the AREF pin (0 to 5V only) 
 // is used as the reference.
}
void loop() {
 val = analogRead(analogPin); // read the input pin
 Serial.println(val); // debug value
}
  

七、Arduino字符函數

1、int isdigit(int c)

如果c是數字,則返回1,否則返回0。

2、int isalpha(int c)

如果c是字母,則返回1,否則返回0。

3、int isalnum(int c)

如果c是數字或字母,則返回1,否則返回0。

4、int isxdigit(int c)

如果c是十六進位數字字符,則返回1,否則返回0。

5、int islower(int c)

如果c是小寫字母,則返回1,否則返回0。

6、int isupper(int c)

如果c是大寫字母,則返回1;否則返回0。

7、int isspace(int c)

如果c是空白字符:換行符('\n')、空格符(' ')、換頁符('\f')、回車符('\r')、水平制表符('\t')或垂直制表符('\v'),則返回1,否則返回0。

8、int iscntrl(int c)

如果c是控制字符,如換行符('\n')、換頁符('\f')、回車符('\r')、水平制表符 (\v')、垂直制表符('\v')、alert('\a')或退格('\b'),則返回1,否則返回0。

9、int ispunct(int c)

如果c是除空格,數字或字母以外的列印字符,則返回1,否則返回0。

10、int isprint(int c)

如果c是包含空格(' ')的列印字符,則返回1,否則返回0。

11、int isgraph(int c)

如果c是除空格(' ')之外的列印字符,則返回1,否則返回0。

八、Arduino數學函數

1、double acos (double __x)

acos()函數計算x的反餘弦的主值。返回值在[0, pi]弧度的範圍內。不在[-1, +1]範圍內的參數會發生域錯誤。

2、double asin (double __x)

asin()函數計算x的反正弦的主值。返回值在[-pi/2, pi/2]弧度的範圍內。不在[-1, +1]範圍內的參數會發生域錯誤。

3、double atan (double __x)

atan()函數計算x的反正切的主值。返回值在[-pi/2, pi/2]弧度的範圍內。

4、double atan2 (double __y, double __x)

atan2()函數計算y/x的反正切的主值,使用兩個參數的符號來確定返回值的象限。返回值在[-pi, +pi]弧度的範圍內。

5、double cbrt (double __x)

cbrt()函數返回x的立方根值。

6、double ceil (double __x)

ceil()函數返回大於或等於x的最小整數值,以浮點數表示。

7、static double copysign (double __x, double __y)

copysign()函數返回x,但帶有y的符號。即使x或y是NaN或零,他們也可以工作。

8、double cos(double __x)

cos()函數返回x的餘弦,以弧度為單位。

9、double cosh (double __x)

cosh()函數返回x的雙曲餘弦。

10、double exp (double __x)

exp()返回e的x次冪的值。

11、double fabs (double __x)

fabs()函數計算浮點數x的絕對值。

12、double fdim (double __x, double __y)

fdim()函數返回max(x - y, 0)。如果x或y或者兩者都是NaN,則返回NaN。

13、double floor (double __x)

floor()函數返回小於或等於x的最大整數值,以浮點數表示。

14、double fma (double __x, double __y, double __z)

fma()函數執行浮點乘加,即運算(x * y) + z,但是中間結果不會四捨五入到目標類型。這有時可以提高計算的精度。

15、double fmax (double __x, double __y)

fmax()函數返回兩個值x和y中較大的一個。如果一個參數是NaN,則返回另一個參數。如果兩個參數都是NaN,則返回NaN。

16、double fmin (double __x, double __y)

fmin()函數返回兩個值x和y中較小的一個。如果一個參數是NaN,則返回另一個參數。如果兩個參數都是NaN,則返回NaN。

17、double fmod (double __x, double__y)

fmod()函數返回x / y的餘數。

18、double frexp (double __x, int * __pexp)

frexp()函數將浮點數分解為規格化分數和2的整次冪。它將整數存儲在pexp指向的int對象中。如果x是一個正常的浮點數,則frexp()函數返回值v,使得v具有區間[1/2, 1)或零的量值,而x等於v乘以2的pexp次冪。如果x是零,那麼結果的兩個部分都是零。如果x不是有限數字,frexp()將按原樣返回x,並通過pexp存儲0。

注意 ? 這個實現允許一個零指針作為指令來跳過存儲指數。

19、double hypot (double __x, double__y)

hypot()函數返回sqrt(x*x + y*y)。這是一個邊長為x和y的直角三角形的斜邊的長度,或點(x, y)距離原點的距離。使用這個函數而不是直接使用公式是比較明智的,因為誤差要小得多。x和y沒有下溢。如果結果在範圍內,則不會溢出。

20、static int isfinite (double __x)

如果x是有限的,isfinite()函數返回一個非零值:不是正或負無窮,也不是NaN。

21、int isinf (double __x)

如果參數x是正無窮大,則函數isinf()返回1;如果x是負無窮大,則返回-1,否則返回0。

注意 ? GCC 4.3可以用內聯代碼替換這個函數,這個代碼對兩個無窮大返回1值(gcc bug #35509)。

22、int isnan (double __x)

如果參數x表示「非數字」(NaN)對象,則函數isnan()返回1,否則返回0。

23、double ldexp (double __x, int __exp )

ldexp()函數將浮點數乘以2的整數次冪。它返回x乘以2的exp次冪的值。

24、double log (double __x)

log()函數返回參數x的自然對數。

25、double log10(double __x)

log10()函數返回參數x的對數,以10為基數。

26、long lrint (double __x)

lrint()函數將x四捨五入到最近的整數,將中間情況捨入到偶數整數方向(例如,1.5和2.5的值都捨入到2)。這個函數類似於rint()函數,但是它的返回值類型不同,並且有可能溢出。

返回四捨五入的長整數值。如果x不是有限數字或者溢出,則此實現返回LONG_MIN值(0x80000000)。

27、long lround (double __x)

lround()將函數將x四捨五入到最近的整數,但中間情況不捨入到0(不是到最近的偶數整數)。這個函數類似於round()函數,但是它的返回值的類型是不同的,並且有可能溢出。

返回四捨五入的長整數值。如果x不是有限數字或者溢出,則此實現返回LONG_MIN值(0x80000000)。

28、double modf (double __x, double * __iptr )

modf()函數將參數x分解為整數部分和小數部分,每個部分都與參數具有相同的符號。它在iptr指向的對象中將整數部分存儲為double。

modf()函數返回x的有符號小數部分。

注意 ? 這個實現跳過零指針的寫入。但是,GCC 4.3可以用內聯代碼替換這個函數,不允許使用NULL地址來避免存儲。

29、float modff (float __x, float * __iptr)

modf()函數的別名。

30、double pow (double __x, double __y)

pow()函數返回x的y次冪。

31、double round (double __x)

round()函數將x四捨五入到最近的整數,但中間情況不捨入到0(不是到最近的偶數整數)。不可能會溢出。

返回四捨五入的值。如果x是整數或無窮大,則返回x本身。如果x是NaN,則返回NaN。

32、int signbit (double __x)

如果x的值設置了符號位,signbit()函數將返回一個非零值。這與「x < 0.0」不同,因為IEEE 754浮點允許零署名。比較「-0.0 < 0.0」是錯的,但「signbit (-0.0)」會返回一個非零值。

33、double sin (double __x)

sin()函數返回x的正弦值,以弧度為單位。

34、double sinh (double __x)

sinh()函數返回x的雙曲正弦。

35、double sqrt (double __x)

sqrt()函數返回x的非負平方根。

36、double square (double __x)

square()函數返回x * x。

注意 ? 此函數不屬於C標準定義。

37、double tan (double __x)

tan()函數返回x的正切值,以弧度為單位。

38、double tanh ( double __x)

tanh()函數返回x的雙曲正切。

39、double trunc (double __x)

trunc()函數將x四捨五入為最近的整數,不大於絕對值。

九、Arduino三角函數

你需要使用三角幾何來計算移動物體的距離或角速度。Arduino提供了傳統的三角函數(sin,cos,tan,asin,acos,atan),可以通過編寫它們的原型來概括。Math.h包含三角函數的原型。

(一)三角函數語法

double sin(double x); //returns sine of x radians
double cos(double y); //returns cosine of y radians
double tan(double x); //returns the tangent of x radians
double acos(double x); //returns A, the angle corresponding to cos (A) = x
double asin(double x); //returns A, the angle corresponding to sin (A) = x
double atan(double x); //returns A, the angle corresponding to tan (A) = x
  

(二)三角函數程序示例

double sine = sin(2); // approximately 0.90929737091
double cosine = cos(2); // approximately -0.41614685058
double tangent = tan(2); // approximately -2.18503975868
  

十、Arduino隨機數函數:randomSeed(seed)

randomSeed(seed)函數重置Arduino的偽隨機數生成器。雖然random()返回的數字的分布本質上是隨機的,但是順序是可預測的。你應該將發生器重置為某個隨機值。如果你有一個未連接的模擬引腳,它可能會從周圍環境中拾取隨機噪音。這些可能是無線電波,宇宙射線,手機的電磁干擾,螢光燈等。

例子

randomSeed(analogRead(5)); // randomize using noise from analog pin 5
  

十一、Arduino隨機數函數:random()

random函數生成偽隨機數。以下是語法。

(一)random()語法

long random(max) // it generate random numbers from 0 to max
long random(min, max) // it generate random numbers from min to max
  

(二)random()程序示例

long randNumber;
void setup() {
 Serial.begin(9600);
 // if analog input pin 0 is unconnected, random analog
 // noise will cause the call to randomSeed() to generate
 // different seed numbers each time the sketch runs.
 // randomSeed() will then shuffle the random function.
 randomSeed(analogRead(0));
}
void loop() {
 // print a random number from 0 to 299
 Serial.print("random1=");
 randNumber = random(300);
 Serial.println(randNumber); // print a random number from 0to 299
 Serial.print("random2=");
 randNumber = random(10, 20);// print a random number from 10 to 19
 Serial.println (randNumber);
 delay(50);
}
  

十二、tone()函數

(一)tone()函數簡介

tone()函數可以產生固定頻率的PWM信號來驅動揚聲器發聲。發聲時間長度和聲調都可以通過參數控制。定義發聲時間長度有兩種方法,第一種是通過tone()函數的參數來定義發聲時長,另一種是使用noTone()函數來停止發聲。如果您在使用tone()函數時沒有定義發聲時間長度,那麼除非您通過noTone()函數來停止聲音,否則Arduino將會一直通過tone()函數產生聲音信號。

Arduino一次只能產生一個聲音。假如Arduino的某一個引腳正在通過tone()函數產生發聲信號,那麼此時讓Arduino使用另外一個引腳通過tone()函數發聲是不行的。

請注意:

1. 對於Arduino Mega以外的控制器,使用tone()函數時會影響引腳3和引腳11的PWM信號輸出。

2. 如果你想要使用不同的引腳產生不同的聲音音調,每一次更換發聲引腳以前都要使用noTone函數停止上一個引腳發聲。Arduino是不支持兩個引腳同時發聲的。

(二)tone()函數語法

tone(pin, frequency)

tone(pin, frequency, duration)

參數

pin: 發聲引腳(該引腳需要連接揚聲器)

frequency: 發聲頻率(單位:赫茲) – 無符號整數型

duration: 發聲時長(單位:微秒,此參數為可選參數) – 無符號長整型

(三)tone()函數返回值

(四)tone()函數示例程序

多音調發聲

void setup() {

}

void loop() {

noTone(8); //停止8號引腳發聲

tone(6, 440, 200); //6號引腳發聲200毫秒

delay(200);

noTone(6); //停止6號引腳發聲

tone(7, 494, 500); //7號引腳發聲500毫秒

delay(500);

noTone(7); //停止7號引腳發聲

tone(8, 523, 300); //8號引腳發聲300毫秒

delay(300);

}

十三、noTone()函數

(一)noTone()函數說明

noTone()函數用來停止tone()函數發聲。

註:如您需要使用多個Arduino引腳發聲,要在每個引腳輸出聲音信號前調用noTone()函數來停止當前的聲音信號。

(二)noTone()函數語法

noTone(pin)

參數

pin: 停止發聲引腳

(三)noTone()函數返回值

(四)noTone()函數示例程序

請見Tone()函數

十四、pulseIn()函數

(一)pulseIn()函數說明

讀引腳的脈衝信號, 被讀取的脈衝信號可以是 HIGH 或 LOW. 例如我們要檢測HIGH脈衝信號, Arduino將在引腳變為高電平時開始計時, 當引腳變為低電平時停止記時,並返回脈衝持續時長(時間單位:微秒)。如果在超時時間內沒有讀到脈衝信號的話, 將返回0.

根據經驗發現,pulseIn()函數在檢測脈衝間隔過短的信號時會產生錯誤。Arduino可檢測的脈衝間隔時間範圍是10微秒到3分鐘。請留意假如調用pulseIn()函數時讀取信號的引腳上已經為高電平,此時Arduino將等待該引腳變為低電平以後再開始檢測脈衝信號。另外只有Arduino的中斷是開啟時,才能使用pulseIn()。

(二)pulseIn()函數語法

pulseIn(pin, value)

pulseIn(pin, value, timeout)

參數

pin 引腳編號

state 脈衝狀態

timeout 超時時間(單位:微秒)

如果Arduino在超時時間(timeout)內沒有讀到脈衝信號的話, 該函數將返回0.超時時間參數是可選參數,其默認值為1秒。

(三)pulseIn()函數返回值

脈衝持續時長。

如果在超時時間內沒有讀到脈衝信號, 將返回0.

(四)pulseIn()函數示例程序

int pin = 7;

unsigned long duration;

void setup()

{

pinMode(pin, INPUT);

}

void loop()

{

duration = pulseIn(pin, HIGH);

}

十五、min(x, y)函數

(一)min(x,y)函數說明

取兩者之間最小值

參數

x: 第一個數字(可以是任何數據類型)

y: 第二個數字(可以是任何數據類型)

(二)min(x,y)函數返回值

兩個數字中較小的數值。

(三)min(x,y)函數程序示例

sensVal = min(sensVal, 100); // 將 sensVal 或 100 中更小的數值賦給sensVal

// 這麼做可以確保sensVal數值永遠不超過100

十六、max(x, y)函數

(一)max(x,y)函數說明

取兩者之間最大值

參數

x: 第一個數字(可以是任何數據類型)

y: 第二個數字(可以是任何數據類型)

(二)max(x,y)函數返回值

兩個數字中較大的數值。

(三)max(x,y)函數程序示例

sensVal = max(senVal, 20); // 將 sensVal 或 20 中更大的數值賦給sensVal

// 這麼做可以確保sensVal數值永遠不小於20

 

Arduino常用函數注意[1]:

max()的括號中參數不能使用函數。

max(a–, 0); //a++不能在這裡使用。否則會產生錯誤結果

max(a, 0); //要實現以上語句功能應該使用這種方法。

a–; //所有數學計算都應在max()函數外進行。

 

Arduino常用函數備註[1]:

以上資料來源於網絡整理,特別感謝w3cschool太極創客,僅供大家學習使用。

初始化工作室專注於「Arduino、Scratch、樂高的學習以及STEAM教育的實施」,如果需要更多相關課程,請關注我,謝謝。

 

Arduino常用函數參閱來源:

https://kknews.cc/zh-tw/code/bzygnpj.html

https://www.w3schools.com/

http://www.taichi-maker.com/

https://v.ifeng.com/c/7uzqwtVXPsg

Jplopsoft | THI | Netlify | NeoCities | LionFree

加密工具 | 提交歸檔 | QRCODE產生器 | 密碼產生器

アクセスカウンター