(二)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