目錄
(一)數字I/O
1)pinMode(pin,mode)
描述:將指定的引腳配置成輸出或輸入。
語法:pinMode(pin,mode)。
參數:pin,要設置模式的引腳;mode,INPUT或OUTPUT。
程序示例:
LEDPin = 13
void setup()
{
pinMode(LEDPin,OUTPUT);
}
void loop()
{
digitalWrite(LEDPin,HIGH);
delay(1000);
digitalWrite(LEDPin,LOW);
delay(1000);
}
其實還可以設置爲上拉電阻模式。
注意:模擬輸入引腳也能當作數字引腳使用。
2)digitalWrite(pin,value)
描述:給一個數字引腳寫入HIGH或者LOW。如果一個引腳已經使用pinMode()函數配置爲OUTPUT模式,其電壓將被設置爲相應的值,HIGH爲5V(3.3V控制板上爲3.3V),LOW爲0V。
如果引腳配置爲INPUT模式,使用digitalWrite()寫入HIGH值,將使內部20k歐姆上拉電阻接入。寫入LOW將會禁用上拉。上拉電阻可以點亮一個LED,讓其微微亮。如果出現LED工作,但是亮度很低,這種情況可能即使由上拉電阻引起的。補救的辦法是使用pinMode()函數設置爲輸出引腳。
數字13號引腳難以作爲數字輸入使用,因爲大部分的控制板上使用了一顆LED和一個電阻與其鏈接。如果啓動內部的20k歐姆的上拉電阻,其電壓將在1.7V左右,而不是正常的5V,因爲板載LED串聯的電阻使其電壓降了下來,因此其返回值總是LOW。如果必須使用數字13號引腳的輸入模式,則需要使用外部上拉和下拉電阻。
3)digitalRead(pin)
描述:讀取指定引腳的值,HIGH或LOW。
語法:digitalRead(PIN)。
參數:pin,想讀取數值的引腳號(int)。
返回:HIGH或者LOW。
程序示例:
//將引腳13設置爲輸入引腳7的值
LEDPin = 13 //LED連接到引腳13
int inPin = 7; //按鈕連接道數字引腳7
int val = 0; //定義變量以存儲讀取值
void setup()
{
pinMode(LEDPin,OUTPUT);
pinMode(inPin,INPUT);
}
void loop()
{
val = digitalRead(inPin); //讀取輸入引腳的值
digitalWrite(LEDPin,val);
}
(二)模擬I/O
1)analogReference(type)
描述:設定用於模擬輸入的基準電壓(輸入範圍的最大值)。
type的可選值爲:
-
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)用作參考
注意:改變基準電壓後,之前從analogRead()讀取的數據可能不準確。
注意:對AREF引腳的外部參考電壓,請勿使用小於0V或大於5V的任何值。如果在AREF引腳上使用外部參考,則必須在調用 analogRead()函數之前將模擬參考設置爲EXTERNAL。否則,將短路有效參考電壓(內部產生的)和AREF引腳,可能會損壞Arduino板上的微控制器。
或者,你可以通過5K電阻將外部參考電壓連接到AREF引腳,從而允許在外部和內部參考電壓之間切換。
注意,電阻將改變用作參考的電壓,因爲AREF引腳上有一個內部32K電阻。兩者用作分壓器。例如,通過電阻器施加的2.5V將在AREF引腳處產生2.5*32/(32+5)=〜2.2V電壓。
2)analogRead()
描述:從指定的模擬引腳讀取數據值。Arduino板包含一個6通道(Arduino ProMinn和Arduino Nano有8個通道,Arduino Mega有16個通道)、10位模擬/數字轉換器,這表示它將0~5V的輸入電壓映射到0~1023的整數值,即每個讀數對應電壓值爲5V/1024,每個單位0.0049V(4.9mV)。輸入範圍和精度可以通過analogReference()改變,其大約需要0.0001s來讀取模擬輸入,所以最大的閱讀速度是每秒10000次。
語法:
analogRead(pin);
pin - 要讀取的模擬輸入引腳的編號(大多數電路板上爲0至5,Mini和Nano上爲0至7,Mega上爲0至15)
示例:
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
}
Serial.print()是打印之後不換行,Serial.println()是打印之後換行。
3)analogWrite()
描述:從一個引腳輸出PWM模擬值(Plulse Width Modulation,脈衝寬度調整),讓LED以不同的亮度點亮或驅動電機以不同的速度旋轉。analogWrite()輸出結束後,該引腳將產生一個穩定的特定佔空比的PWM,該PWM輸出繼續到下次調用analogWrite()(或在同一引腳調用digitalRead()或digitalWrite())。
PWM信號的頻率大約是490Hz。大多數Arduino板(ATmega168或ATmega328)只有引腳3、5、6、9、10和11可以實現該功能。在Arduino Mega上,引腳2~13可以實現該功能。舊版本的Arduino板(ATmega8)只有引腳9、10、11可以使用analogWrite()。在使用analogWrite()之前,不需要調用pinMode()來設置引腳爲輸出引腳。analogWrite函數與模擬引腳、analogRead函數沒有直接關係。
這裏從開發板上也是可以區分的,一般模擬值的引腳下面有一個~。
語法:analogWrite(pin,value)。
-
pin - 你希望設置模式的引腳的編號
-
value - HIGH或LOW。
注意事項:引腳5和6的PWM輸出將高於預期的佔空比(輸出的數值偏高),這時因爲millis()、delay()功能和PWM輸出共享相同的內部定時器。這將導致大多時候處於低佔空比狀態(如0~10),並可能導致在數值爲0時,沒有完全關閉引腳5和6。
程序示例:
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
}
下面的可能不經常用到,但是也可以提前瞭解一下。
(三)高級I/O
1)tone()
描述:在一個引腳上產生一個特定頻率的方波(50%佔空比)。
2)noTone()
描述:停止由tone()產生的方波。如果沒有使用tone()將不會有變化。
3)ShiftOut()
描述:將數據的一個字節一位一位地移除。
4)shiftIn()
描述:將數據的一個字節一位一位地移入。
5)pulseIn()
描述:讀取一個引腳的脈衝(HIGH或LOW)。
(四)時間函數
1)millis()
描述:返回Arduino開發板運行當前程序開始的毫秒數,這個數字將在約50天后溢出(歸零)。
2)micros()
描述:返回Arduino開發板從運行當前程序開始的微妙數,這個數字將在70min後溢出(歸零)。
3)delay()
描述:是程序設定的暫停時間(單位毫秒)。
4)delayMicroseconds()
描述:使程序暫停指定的一段時間(單位爲毫秒)。
(五)數學函數
1、min(x,y):傳回最小值
例如:val=min(10,20)
2、max(x,y):傳回最大值
例如:val=max(10,20)
3、abs(x):回傳該數的絕對值
例如:val=abs(-10)
4、constrain(x,a,b):判斷x和a b兩者之間的狀態。
若x<a則回傳a;若x>b則回傳b;若a<x<b則回傳x
5、map(value,fromLow,fromHigh,toLow,toHigh)
例如:map(analogRead(0),0,1023,100,200):將analog0引腳所讀的信號進行對等轉換至100~200之間的值
6、double pow(x,y)
例如:pow(2,3):表示2的3次方
7、double sqrt(x)
例如:double a=sqrt(10):表示10的算術平方根
8、double sin(rad)
9、double cos(rad)
10、double tan(rad)
例如:sin(2)=0.9092……
(六)三角函數
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
(七)外部中斷函數
(1)attachInterrupt(interrupt, mode)
外部中斷只能用到數字IO 口2 和3,interrupt 表示中斷口初始0 或1,表示一個功能函數,mode:LOW低電平中斷,CHANGE 有變化就中斷,RISING 上升沿中斷,FALLING 下降沿中斷。
(2)detachInterrupt(interrupt)
中斷開關,interrupt=1 開,interrupt=0 關。
(八)中斷使能函數
(1)interrupts()
使能中斷
(2)noInterrupts()
禁止中斷
(九)串口收發函數
(1) Serial.begin(speed)
串口定義波特率函數,speed 表示波特率,如9600,19200 等。
(2) int Serial.available()
判斷緩衝器狀態。
(3)int Serial.read()
讀串口並返回收到參數。
(4)Serial.flush()
清空緩衝器。
(5)Serial.print(data)
串口輸出數據。
(6)Serial.println(data)
串口輸出數據並帶回車符。