arduino筆記10:基本函數 數字I/O 模擬I/O

 

目錄

(一)數字I/O

1)pinMode(pin,mode)

2)digitalWrite(pin,value)

3)int digitalRead(pin)

(二)模擬I/O

1)analogReference(type)

2)analogRead()

3)analogWrite()

(三)高級I/O

1)tone()

2)noTone()

3)ShiftOut()

4)shiftIn()

5)pulseIn()

(四)時間函數

1)millis()

2)micros()

3)delay()

4)delayMicroseconds()

(五)數學函數

(六)三角函數

(七)外部中斷函數

(八)中斷使能函數

(九)串口收發函數


(一)數字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)

  串口輸出數據並帶回車符。

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章