輸入輸出函數(shù)
Arduino 內(nèi)含了一些處理輸出與輸入的切換功能,相信已經(jīng)從書中程式范例略知一二。
pinMode(pin, mode)
將數(shù)位腳位(digital pin)指定為輸入或輸出。
范例 :
pinMode(7,INPUT); // 將腳位 7 設(shè)定為輸入模式
digitalWrite(pin, value)
將數(shù)位腳位指定為開(kāi)或關(guān)。腳位必須先透過(guò)pinMode明示為輸入或輸出模式digitalWrite才能生效。
范例 :
digitalWrite(8,HIGH); //將腳位 8設(shè)定輸出高電位
int digitalRead(pin)
將輸入腳位的值讀出,當(dāng)感測(cè)到腳位處于高電位時(shí)時(shí)回傳HIGH,否則回傳LOW。
范例 :
val = digitalRead(7); // 讀出腳位 7 的值并指定給 val
int analogRead(pin)
讀出類比腳位的電壓并回傳一個(gè) 0到1023 的數(shù)值表示相對(duì)應(yīng)的0到5的電壓值。
范例 :
val = analogRead(0); //讀出類比腳位 0 的值并指定給 val變數(shù)
analogWrite(pin, value)
改變PWM腳位的輸出電壓值,腳位通常會(huì)在3、5、6、9、10與11。Value變數(shù)范圍0-255,例如:輸出電壓2.5伏特(V),該值大約是128。
范例 :
analogWrite(9,128); // 輸出電壓約2.5伏特(V)
unsigned long pulseIn(pin, value)
設(shè)定讀取腳位狀態(tài)的持續(xù)時(shí)間,例如使用紅外線、加速度感測(cè)器測(cè)得某一項(xiàng)數(shù)值時(shí),在時(shí)間單位內(nèi)不會(huì)改變狀態(tài)。
范例 :
time = pulsein(7,HIGH); // 設(shè)定腳位7的狀態(tài)在時(shí)間單位內(nèi)保持為HIGH
shiftOut(dataPin, clockPin, bitOrder, value)
把資料傳給用來(lái)延伸數(shù)位輸出的暫存器,函式使用一個(gè)腳位表示資料、一個(gè)腳位表示時(shí)脈。bitOrder用來(lái)表示位元間移動(dòng)的方式(LSBFIRST最低有效位元或是MSBFIRST最高有效位元),最后value會(huì)以byte形式輸出。此函式通常使用在延伸數(shù)位的輸出。
范例 :
shiftOut(dataPin, clockPin, LSBFIRST, 255);
時(shí)間函數(shù)
控制與計(jì)算晶片執(zhí)行期間的時(shí)間
unsigned long millis()
回傳晶片開(kāi)始執(zhí)行到目前的毫秒
范例:
duration = millis()-lastTime; // 表示自"lastTime"至當(dāng)下的時(shí)間
delay(ms)
暫停晶片執(zhí)行多少毫秒
范例:
delay(500); //暫停半秒(500毫秒)
delay Microseconds(us)
暫停晶片執(zhí)行多少微秒
范例:
delayMicroseconds(1000); //暫停1豪秒
數(shù)學(xué)函式
三角函數(shù)以及基本的數(shù)學(xué)運(yùn)算
min(x, y)
回傳兩數(shù)之間較小者
范例:
val = min(10,20); // 回傳10
max(x, y)
回傳兩數(shù)之間較大者
范例:
val = max(10,20); // 回傳20
abs(x)
回傳該數(shù)的絕對(duì)值,可以將負(fù)數(shù)轉(zhuǎn)正數(shù)。
范例:
val = abs(-5); // 回傳5
constrain(x, a, b)
判斷x變數(shù)位于a與b之間的狀態(tài)。x若小于a回傳a;介于a與b之間回傳x本身;大于b回傳b
范例:
val = constrain(analogRead(0), 0, 255); // 忽略大于255的數(shù)
map(value, fromLow, fromHigh, toLow, toHigh)
將value變數(shù)依照f(shuō)romLow與fromHigh范圍,對(duì)等轉(zhuǎn)換至toLow與toHigh范圍。時(shí)常使用于讀取類比訊號(hào),轉(zhuǎn)換至程式所需要的范圍值。
例如:
val = map(analogRead(0),0,1023,100, 200); // 將analog0 所讀取到的訊號(hào)對(duì)等轉(zhuǎn)換至100 – 200之間的數(shù)值。
double pow(base, exponent)
回傳一個(gè)數(shù)(base)的指數(shù)(exponent)值。
范例:
double x = pow(y, 32); // 設(shè)定x為y的32次方
double sqrt(x)
回傳double型態(tài)的取平方根值。
范例:
double a = sqrt(1138); // 回傳1138平方根的近似值 33.73425674438
double sin(rad)
回傳角度(radians)的三角函數(shù)sine值。
范例:
double sine = sin(2); // 近似值 0.90929737091
double cos(rad)
回傳角度(radians)的三角函數(shù)cosine值。
范例:
double cosine = cos(2); //近似值-0.41614685058
double tan(rad)
回傳角度(radians)的三角函數(shù)tangent值。
范例:
double tangent = tan(2); //近似值-2.18503975868
亂數(shù)函式
產(chǎn)生亂數(shù)
randomSeed(seed)
事實(shí)上在Arduino里的亂數(shù)是可以被預(yù)知的。所以如果需要一個(gè)真正的亂數(shù),可以呼叫此函式重新設(shè)定產(chǎn)生亂數(shù)種子。你可以使用亂數(shù)當(dāng)作亂數(shù)的種子,以確保數(shù)字以隨機(jī)的方式出現(xiàn),通常會(huì)使用類比輸入當(dāng)作亂數(shù)種子,藉此可以產(chǎn)生與環(huán)境有關(guān)的亂數(shù)(例如:無(wú)線電波、宇宙雷射線、電話和螢光燈發(fā)出的電磁波等)。
范例:
randomSeed(analogRead(5)); // 使用類比輸入當(dāng)作亂數(shù)種子
long random(max)
long random(min, max)
回傳指定區(qū)間的亂數(shù),型態(tài)為long。如果沒(méi)有指定最小值,預(yù)設(shè)為0。
范例:
long randnum = random(0, 100); // 回傳0 – 99 之間的數(shù)字
long randnum = random(11); // 回傳 0 -10之間的數(shù)字
序列通訊
你可以在第五章看見(jiàn)一些使用序列埠與電腦交換訊息的范例,以下是函式解釋。
Serial.begin(speed)
你可以指定Arduino從電腦交換訊息的速率,通常我們使用9600 bps。當(dāng)然也可以使用其他的速度,但是通常不會(huì)超過(guò)115,200 bps(每秒位元組)。
范例:
Serial.begin(9600);
Serial.print(data)
Serial.print(data, encoding)
經(jīng)序列埠傳送資料,提供編碼方式的選項(xiàng)。如果沒(méi)有指定,預(yù)設(shè)以一般文字傳送。
范例:
Serial.print(75); // 列印出 "75"
Serial.print(75, DEC); //列印出 "75"
Serial.print(75, HEX); // "4B" (75 的十六進(jìn)位)
Serial.print(75, OCT); // "113" (75 in的八進(jìn)位)
Serial.print(75, BIN); // "1001011" (75的二進(jìn)位)
Serial.print(75, BYTE); // "K" (以byte進(jìn)行傳送,顯示以ASCII編碼方式)
Serial.println(data)
Serial.println(data, encoding)
與Serial.print()相同,但會(huì)在資料尾端加上換行字元( )。意思如同你在鍵盤上打了一些資料后按下Enter。
范例:
Serial.println(75); //列印出"75 "
Serial.println(75, DEC); //列印出"75 "
Serial.println(75, HEX); // "4B "
Serial.println(75, OCT); // "113 "
Serial.println(75, BIN); // "1001011 "
Serial.println(75, BYTE); // "K "
int Serial.available()
回傳有多少位元組(bytes)的資料尚未被read()函式讀取,如果回傳值是0代表所有序列埠上資料都已經(jīng)被read()函式讀取。
范例:
int count = Serial.available();
int Serial.read()
讀取1byte的序列資料
范例:
int data = Serial.read();
Serial.flush()
有時(shí)候因?yàn)橘Y料速度太快,超過(guò)程式處理資料的速度,你可以使用此函式清除緩沖區(qū)內(nèi)的資料。經(jīng)過(guò)此函式可以確保緩沖區(qū)(buffer)內(nèi)的資料都是最新的。
范例:
Serial.flush();
- mpu-6050 加速度、陀螺儀傳感器的調(diào)試
- Arduino在串口讀取多個(gè)字符串,并且轉(zhuǎn)換
- Arduino + W5100 學(xué)習(xí)
- Arduino + nRF24L01+無(wú)線測(cè)試實(shí)驗(yàn)
- Arduino的Serial.readBytes()使用例子
- Arduino電機(jī)驅(qū)動(dòng)模塊(293D)使用
- Arduino連接LCD_1602屏
- Arduino 控制多路步進(jìn)電機(jī)
- 如何使用Arduino 制作 串口(UART)轉(zhuǎn)WiF
- Arduino驅(qū)動(dòng)DS3231高精度時(shí)鐘模塊