Arduino 語法舉例說明

2021-02-21 GeezerRecordlife

Arduino 語法舉例說明

#Arduino 語法

setup()     初始化函數

loop()      循環體函數

控制語句類似於C

//if  if…else、for、switch case、while、do… while、break、continue、return、goto

擴展語法類似於C

//;(分號)、{}(跨括號)、//(單行注釋)、 /* */(多行注釋)、#define 、#include

算數運算符類似於C

//=(賦值運算符)、+(加)、 -(減)、*(乘)、/(除)、%(模)

比較運算符類似於C

//==(等於)、 !=(不等於)、<(小於)< span="">、>(大於)、 <=(小於等於)< span="">、 >=(大於等於)

布爾運算符類似於C

//&&(與)、||(或)、!(非)

指針運算符類似於C

//* 取消引用運算符 、& 引用運算符

位運算符類似於C

& (bitwise and) 、

 | (bitwise or) 、

^ (bitwise xor) 、

~ (bitwise not) 、

<< (bitshift left)、

>> (bitshift right)

複合運算符類似於C

++ (increment)、

— (decrement)、

+= (compound addition)、

-= (compound subtraction)

、*= (compound multiplication)、

/= (compound division)、

&= (compound bitwise and)、

|= (compound bitwise or)

常量

constants 預定義的常量

BOOL   true false

引腳電壓定義,HIGH和LOW【當讀取(read)或寫入(write)數字引腳時只有兩個可能的值: HIGH 和 LOW 】

HIGH(參考引腳)的含義取決於引腳(pin)的設置,引腳定義為INPUT或OUTPUT時含義有所不同。當一個引腳通過pinMode被設置為 INPUT,並通過digitalRead讀取(read)時。如果當前引腳的電壓大於等於3V,微控制器將會返回為HIGH。 引腳也可以通過pinMode被設置為INPUT,並通過digitalWrite設置為HIGH。輸入引腳的值將被一個內在的20K上拉電阻 控制 在HIGH上,除非一個外部電路將其拉低到LOW。 當一個引腳通過pinMode被設置為OUTPUT,並digitalWrite設置為HIGH時,引腳的電壓應在5V。在這種狀態下,它可以 輸出電流 。例如,點亮一個通過一串電阻接地或設置為LOW的OUTPUT屬性引腳的LED。

LOW的含義同樣取決於引腳設置,引腳定義為INPUT或OUTPUT時含義有所不同。當一個引腳通過pinMode配置為INPUT,通過 digitalRead設置為讀取(read)時,如果當前引腳的電壓小於等於2V,微控制器將返回為LOW。 當一個引腳通過pinMode配置為OUTPUT,並通過digitalWrite設置為LOW時,引腳為0V。在這種狀態下,它可以 倒灌 電流。例如,點亮一個通過串聯電阻連接到+5V,或到另一個引腳配置為OUTPUT、HIGH的的LED。

數字引腳(Digital pins)定義,INPUT和OUTPUT【數字引腳當作 INPUT 或 OUTPUT都可以 。用pinMode()方法使一個數字引腳從INPUT到OUTPUT變化】

Arduino(Atmega)引腳通過pinMode()配置為 輸入(INPUT) 即是將其配置在一個高阻抗的狀態。配置為INPUT的引腳可以理解為引腳取樣時對電路有極小的需求,即等效於在引腳前串聯一個100兆歐姆 (Megohms)的電阻。這使得它們非常利於讀取傳感器,而不是為LED供電。

引腳通過pinMode()配置為 輸出(OUTPUT) 即是將其配置在一個低阻抗的狀態。

這意味著它們可以為電路提供充足的電流。Atmega引腳可以向其他設備/電路提供(提供正電流positive current)或倒灌(提供負電流negative current)達40毫安(mA)的電流。這使得它們利於給LED供電,而不是讀取傳感器。輸出(OUTPUT)引腳被短路的接地或5V電路上會受到損壞甚至燒毀。Atmega引腳在為繼電器或電機供電時,由於電流不足,將需要一些外接電路來實現供電。

整數常量

進位

例子

格式

備註

10(十進位)

123


2(二進位)

B1111011

前綴』B』

只適用於8位的值(0到255)字符0-1有效

8(八進位)

0173

前綴」0」

字符0-7有效

16(十六進位)

0x7B

前綴」0x」

字符0-9,A-F,A-F有效

小數是十進位數。這是數學常識。如果一個數沒有特定的前綴,則默認為十進位。

二進位以2為基底,只有數字0和1是有效的。

『u』 or 『U』 指定一個常量為無符號型。(只能表示正數和0) 例如: 33u

『l』 or 『L』 指定一個常量為長整型。(表示數的範圍更廣) 例如: 100000L

『ul』 or 『UL』 這個你懂的,就是上面兩種類型,稱作無符號長整型。 例如:32767ul

浮點常量

浮點數

被轉換為

10.0

10

2.34E5

2.34

10^5

234000

67E-12

67.0

10^-12

0.000000000067

數據類型類似於C

Void、boolean、char、unsigned char、byte、int、unsigned int、word、long、unsigned long、    float、double、string – char array、String – object、array-(數組)

數據類型轉換類似於C

char()、byte()、int()、word()、long()、float()、word()

把一個值轉換為word數據類型的值,或由兩個字節創建一個字符。

word(x)

word(h, l)

參數

X:任何類型的值

H:高階(最左邊)字節

L:低序(最右邊)字節

修飾符類似於C

Static、volatile、const

輔助工具

sizeof()

數字 I/O

pinMode()

將指定的引腳配置成輸出或輸入【pinMode(pin, mode) pin:要設置模式的引腳  mode:INPUT或OUTPUT】

例子:

ledPin = 13 // LED連接到數字腳13

void setup()

{

pinMode(ledPin,OUTPUT); //設置數字腳為輸出

}

void loop()

{

digitalWrite(ledPin,HIGH); //點亮LED

delay(1000);                  // 等待一秒

digitalWrite(ledPin, LOW);    // 滅掉LED

delay(1000);  //等待第二個

}

digitalWrite()

給一個數字引腳寫入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號引腳的輸入模式,需要使用外部上拉下拉電阻。

digitalRead()

digitalRead(PIN)【pin:你想讀取的引腳號(int),返回 HIGH 或 LOW】

例子:

ledPin = 13 // LED連接到13腳

int inPin = 7;   // 按鈕連接到數字引腳7

int val = 0;  //定義變量存以儲讀值

void setup()

{

pinMode(ledPin, OUTPUT);      // 將13腳設置為輸出

pinMode(inPin, INPUT);      // 將7腳設置為輸入

}

void loop()

{

val = digitalRead(inPin);   // 讀取輸入腳

digitalWrite(ledPin, val);    //將LED值設置為按鈕的值

}

模擬 I/O

analogReference()

analogReference(type)

配置用於模擬輸入的基準電壓(即輸入範圍的最大值)。選項有:

DEFAULT:默認5V(Arduino板為5V)或3.3伏特(Arduino板為3.3V)為基準電壓。

INTERNAL:在ATmega168和ATmega328上以1.1V為基準電壓,以及在ATmega8上以2.56V為基準電壓(Arduino Mega無此選項)

INTERNAL1V1:以1.1V為基準電壓(此選項僅針對Arduino Mega)

INTERNAL2V56:以2.56V為基準電壓(此選項僅針對Arduino Mega)

EXTERNAL:以AREF引腳(0至5V)的電壓作為基準電壓。

type:使用哪種參考類型(DEFAULT, INTERNAL, INTERNAL1V1, INTERNAL2V56, 或者 EXTERNAL)

改變基準電壓後,之前從anal??ogRead()讀取的數據可能不準確。

不要在AREF引腳上使用使用任何小於0V或超過5V的外部電壓。如果你使用AREF引腳上的電壓作為基準電壓,你在調用analogRead()前必須設置參考類型為EXTERNAL。否則,你將會削短有效的基準電壓(內部產生)和AREF引腳,這可能會損壞您Arduino板上的單片機。

另外,您可以在外部基準電壓和AREF引腳之間連接一個5K電阻,使你可以在外部和內部基準電壓之間切換。請注意,總阻值將會發生改變,因為AREF引腳內部有一個32K電阻。這兩個電阻都有分壓作用。所以,例如,如果輸入2.5V的電壓,最終在在AREF引腳上的電壓將為2.5 * 32 /(32 + 5)= 2.2V。

analogRead()

從指定的模擬引腳讀取數據值。 Arduino板包含一個6通道(Mini和Nano有8個通道,Mega有16個通道),10位模擬數字轉換器。這意味著它將0至5伏特之間的輸入電壓映射到0至1023之間的整數值。這將產生讀數之間的關係:5伏特/ 1024單位,或0.0049伏特(4.9 mV)每單位。輸入範圍和精度可以使用analogReference()改變。 它需要大約100微秒(0.0001)來讀取模擬輸入,所以最大的閱讀速度是每秒10000次。

analogRead(PIN)

引腳:從輸入引腳(大部分板子從0到5,Mini和Nano從0到7,Mega從0到15)讀取數值,返回從0到1023的整數值

例子:

int analogPin = 3;    //電位器(中間的引腳)連接到模擬輸入引腳3

//另外兩個引腳分別接地和+5 V

int val = 0;  //定義變量來存儲讀取的數值

void setup()

{

serial.begin(9600); //設置波特率(9600)

}

void loop()

{

val = analogRead(analogPin); //從輸入引腳讀取數值

serial.println(val); //顯示讀取的數值

}

analogWrite() – PWM

analogWrite(pin,value)

從一個引腳輸出模擬值(PWM)。可用於讓LED以不同的亮度點亮或驅動電機以不同的速度旋轉。analogWrite()輸出結束後,該引腳將產生一個穩定的特殊佔空比方波,直到下次調用analogWrite()(或在同一引腳調用digitalRead()或digitalWrite())。PWM 信號的頻率大約是490赫茲。

在大多數arduino板(ATmega168或ATmega328),只有引腳3,5,6,9,10和11可以實現該功能。在aduino Mega上,引腳2到13可以實現該功能。老的Arduino板(ATmega8)的只有引腳9、10、11可以使用analogWrite()。在使用 analogWrite()前,你不需要調用pinMode()來設置引腳為輸出引腳。

analogWrite函數與模擬引腳、analogRead函數沒有直接關係。

pin:用於輸入數值的引腳。

value:佔空比:0(完全關閉)到255(完全打開)之間。

例子:

int ledPin = 9;  // LED連接到數字引腳9

int analogPin = 3;  //電位器連接到模擬引腳3

int val = 0;  //定義變量存以儲讀值

void setup()

{

pinMode(ledPin,OUTPUT);  //設置引腳為輸出引腳

}

void loop()

{

val = analogRead(analogPin);  //從輸入引腳讀取數值

analogWrite(ledPin,val / 4);  // 以val / 4的數值點亮LED(因為analogRead讀取的數值從0到1023,而analogWrite輸出的數值從0到255)

}

高級 I/O

tone()

在一個引腳上產生一個特定頻率的方波(50%佔空比)。持續時間可以設定,否則波形會一直產生直到調用noTone()函數。該引腳可以連接壓電蜂鳴器或其他喇叭播放聲音。

在同一時刻只能產生一個聲音。如果一個引腳已經在播放音樂,那調用tone()將不會有任何效果。如果音樂在同一個引腳上播放,它會自動調整頻率。

使用tone()函數會與3腳和11腳的PWM產生幹擾(Mega板除外)。

注意:如果你要在多個引腳上產生不同的音調,你要在對下一個引腳使用tone()函數前對此引腳調用noTone()函數。

tone(pin, frequency)

tone(pin, frequency, duration)

pin:要產生聲音的引腳

frequency: 產生聲音的頻率,單位Hz,類型unsigned int

duration:聲音持續的時間,單位毫秒(可選),類型unsigned long

noTone()

停止由tone()產生的方波。如果沒有使用tone()將不會有效果。

noTone(pin)

pin: 所要停止產生聲音的引腳

shiftOut()

將一個數據的一個字節一位一位的移出。從最高有效位(最左邊)或最低有效位(最右邊)開始。依次向數據腳寫入每一位,之後時鐘腳被拉高或拉低,指示剛才的數據有效。

注意:如果你所連接的設備時鐘類型為上升沿,你要確定在調用shiftOut()前時鐘腳為低電平,如調用digitalWrite(clockPin, LOW)。

注意:這是一個軟體實現;Arduino提供了一個硬體實現的SPI庫,它速度更快但只在特定腳有效。

shiftOut(dataPin, clockPin, bitOrder, value)

dataPin:輸出每一位數據的引腳(int)

clockPin:時鐘腳,當dataPin有值時此引腳電平變化(int)

bitOrder:輸出位的順序,最高位優先或最低位優先

value: 要移位輸出的數據(byte)

dataPin和clockPin要用pinMode()配置為輸出。 shiftOut目前只能輸出1個字節(8位),所以如果輸出值大於255需要分兩步。

//最高有效位優先串行輸出

int data= 500;

//移位輸出高字節

shiftOut(dataPin, clock, MSBFIRST, (data >> 8));

//移位輸出低字節

shiftOut(data, clock, MSBFIRST, data);

//最低有效位優先串行輸出

data = 500;

//移位輸出低字節

shiftOut(dataPin, clock, LSBFIRST, data);

//移位輸出高字節

shiftOut(dataPin, clock, LSBFIRST, (data >> 8));

例子:

相應電路,查看tutorial on controlling a 74HC595 shift register

//引腳連接到74HC595的ST_CP

int latchPin = 8;

//引腳連接到74HC595的SH_CP

int clockPin = 12;

// //引腳連接到74HC595的DS

int dataPin = 11;

void setup() {

//設置引腳為輸出

pinMode(latchPin, OUTPUT);

pinMode(clockPin, OUTPUT);

pinMode(dataPin, OUTPUT);

}

void loop() {

//向上計數程序

for(J = 0; J<256; J + +){

//傳輸數據的時候將latchPin拉低

digitalWrite(latchpin, LOW);

shiftOut(dataPin,clockPin,LSBFIRST,J);

//之後將latchPin拉高以告訴晶片

//它不需要再接受信息了

digitalWrite(latchpin, HIGH);

delay(1000);

}

}

shiftIn()

將一個數據的一個字節一位一位的移入。從最高有效位(最左邊)或最低有效位(最右邊)開始。對於每個位,先拉高時鐘電平,再從數據傳輸線中讀取一位,再將時鐘線拉低。

注意:這是一個軟體實現;Arduino提供了一個硬體實現的SPI庫,它速度更快但只在特定腳有效。

shiftIn(dataPin,clockPin,bitOrder)

dataPin:輸出每一位數據的引腳(int)

clockPin:時鐘腳,當dataPin有值時此引腳電平變化(int)

bitOrder:輸出位的順序,最高位優先或最低位優先

pulseIn()

讀取一個引腳的脈衝(HIGH或LOW)。例如,如果value是HIGH,pulseIn()會等待引腳變為HIGH,開始計時,再等待引腳變為LOW並停止計時。返回脈衝的長度,單位微秒。如果在指定的時間內無脈衝函數返回。

此函數的計時功能由經驗決定,長時間的脈衝計時可能會出錯。計時範圍從10微秒至3分鐘。(1秒=1000毫秒=1000000微秒)

pulseIn(pin, value)

pulseIn(pin, value, timeout)

pin:你要進行脈衝計時的引腳號(int)。

value:要讀取的脈衝類型,HIGH或LOW(int)。

timeout (可選):指定脈衝計數的等待時間,單位為微秒,默認值是1秒(unsigned long)

返回:脈衝長度(微秒),如果等待超時返回0(unsigned long)

例子:

int pin = 7;

unsigned long duration;

void setup()

{

pinMode(pin, INPUT);

}

void loop()

{

duration = pulseIn(pin, HIGH);;

}

時間

millis()

返回Arduino開發板從運行當前程序開始的毫秒數。這個數字將在約50天後溢出(歸零)

例子:

unsigned long time;

void setup(){

Serial.begin(9600);

}

void loop(){

serial.print(「Time:」);

time = millis();

//列印從程序開始到現在的時間

serial.println(time);

//等待一秒鐘,以免發送大量的數據

delay(1000);

}

參數 millis 是一個無符號長整數,試圖和其他數據類型(如整型數)做數學運算可能會產生錯誤

micros()

返回 Arduino 開發板從運行當前程序開始的微秒數。這個數字將在約70分鐘後溢出(歸零)。在 16MHz 的 Arduino 開發板上(比如 Duemilanove 和 Nano),這個函數的解析度為四微秒(即返回值總是四的倍數)。在 8MHz 的 Arduino 開發板上(比如 LilyPad),這個函數的解析度為八微秒。

注意 :每毫秒是1,000微秒,每秒是1,000,000微秒。

例子:

unsigned long time;

void setup(){

Serial.begin(9600);

}

void loop(){

Serial.print(「Time:」);

time = micros();

//列印從程序開始的時間

Serial.println(time);

//等待一秒鐘,以免發送大量的數據

delay(1000);

}

delay()

使程序暫停設定的時間(單位毫秒)。(一秒等於1000毫秒)

參數:ms:暫停的毫秒數(unsigned long)

例子:

ledPin = 13 / / LED連接到數字13腳

void setup()

{

pinMode(ledPin, OUTPUT);      // 設置引腳為輸出

}

void loop()

{

digitalWrite(ledPin, HIGH);   // 點亮LED

delay(1000);                  // 等待1秒

digitalWrite(ledPin, LOW);    // 滅掉LED

delay(1000);                  // 等待一秒

}

雖然創建一個使用delay()的閃爍LED很簡單,並且許多例子將很短的delay用於消除開關抖動,delay()確實擁有很多顯著的缺點。在 delay函數使用的過程中,讀取傳感器值、計算、引腳操作均無法執行,因此,它所帶來的後果就是使其他大多數活動暫停。其他操作定時的方法請參加 millis()函數和它下面的例子。大多數熟練的程式設計師通常避免超過10毫秒的delay(),除非arduino程序非常簡單。

但某些操作在delay()執行時任然能夠運行,因為delay函數不會使中斷失效。通信埠RX接收到得數據會被記錄,PWM(analogWrite)值和引腳狀態會保持,中斷也會按設定的執行。

delayMicroseconds()

使程序暫停指定的一段時間(單位微秒)。一毫秒等於一千微秒,一秒等於1000000微秒。 目前,能夠產生的最大的延時準確值是16383。這可能會在未來的Arduino版本中改變。對於超過幾千微秒的延遲,你應該使用delay()代替。

例子:

int outPin = 8;                 // digital pin 8

void setup()

{

pinMode(outPin,OUTPUT); //設置為輸出的數字管腳

}

void loop()

{

digitalWrite(outPin,HIGH); //設置引腳高電平

delayMicroseconds(50);        // 暫停50微秒

digitalWrite(outPin, LOW);    // 設置引腳低電平

delayMicroseconds(50);        // 暫停50微秒

}

數學運算

min()、max()、abs()

constrain(x,a,b)【將一個數約束在一個範圍內】

map(value, fromLow, fromHigh, toLow, toHigh)

value:需要映射的值

fromLow:當前範圍值的下限

fromHigh:當前範圍值的上限

toLow:目標範圍值的下限

toHigh:目標範圍值的上限

例子:

void setup(){}

void loop()

{

int val = analogRead(0);

val = map(val, 0, 1023, 0, 255);

analogWrite(9, val);

}

數學實現

long map(long x, long in_min, long in_max, long out_min, long out_max)

{

return (x – in_min) * (out_max – out_min) / (in_max – in_min) + out_min;

}

pow(base, exponent)     sqrt(x)

三角函數

sin()、cos()、tan()

隨機數

randomSeed()【隨機數種子】、random()【random(max),random(min, max)】

位操作

lowByte()  

取一個變量(例如一個字)的低位(最右邊)字節。

highByte()

提取一個字節的高位(最左邊的),或一個更長的字節的第二低位。

bitRead()

讀取一個數的位。bitRead(x, n) X:想要被讀取的數 N:被讀取的位,0是最重要(最右邊)的位,該位的值(0或1)

bitWrite()

在位上寫入數字變量bitWrite(x, n, b) 

X:要寫入的數值變量

N:要寫入的數值變量的位,從0開始是最低(最右邊)的位

B:寫入位的數值(0或1)

bitSet()

為一個數字變量設置一個位bitSet(x, n)   

X:想要設置的數字變量

N:想要設置的位,0是最重要(最右邊)的位

bitClear()

清除一個數值型數值的指定位(將此位設置成 0) bitClear(x, n) 

X:指定要清除位的數值

N:指定要清除位的位置,從0開始,0 表示最右端位

bit()

計算指定位的值(0位是1,1位是2,2位4,以此類推)

bit(n)需要計算的位

設置中斷函數

attachInterrupt()

attachInterrupt(interrupt, function, mode)

當發生外部中斷時,調用一個指定函數。當中斷發生時,該函數會取代正在執行的程序。大多數的Arduino板有兩個外部中斷:0(數字引腳2)和1(數字引腳3)。

arduino Mege有四個外部中斷:數字2(引腳21),3(20針),4(引腳19),5(引腳18)

interrupt:中斷引腳數

function:中斷發生時調用的函數,此函數必須不帶參數和不返回任何值。該函數有時被稱為中斷服務程序。

mode:定義何時發生中斷以下四個contstants預定有效值:

LOW 當引腳為低電平時,觸發中斷

CHANGE 當引腳電平發生改變時,觸發中斷

RISING 當引腳由低電平變為高電平時,觸發中斷

FALLING 當引腳由高電平變為低電平時,觸發中斷.

當中斷函數發生時,delya()和millis()的數值將不會繼續變化。當中斷發生時,串口收到的數據可能會丟失。你應該聲明一個變量來在未發生中斷時儲存變量。

在單片機自動化程序中當突發事件發生時,中斷是非常有用的,它可以幫助解決時序問題。一個使用中斷的任務可能會讀一個旋轉編碼器,監視用戶的輸入。

如果你想以確保程序始終抓住一個旋轉編碼器的脈衝,從來不缺少一個脈衝,它將使寫一個程序做任何事情都要非常棘手,因為該計劃將需要不斷輪詢的傳感器線編碼器,為了趕上脈衝發生時。其他傳感器也是如此,如試圖讀取一個聲音傳感器正試圖趕上一按,或紅外線槽傳感器(照片滅弧室),試圖抓住一個硬幣下降。在所有這些情況下,使用一個中斷可以釋放的微控制器來完成其他一些工作。

例子:

int pin = 13;

volatile int state = LOW;

void setup()

{

pinMode(pin, OUTPUT);

attachInterrupt(0, blink, CHANGE);

}

void loop()

{

digitalWrite(pin, state);

}

void blink()

{

state = !state;

}

detachInterrupt()

關閉給定的中斷

detachInterrupt(interrupt)

interrupt: 中斷禁用的數(0或者1)

開關中斷

interrupts()

重新啟用中斷(使用noInterrupts()命令後將被禁用)。中斷允許一些重要任務在後臺運行,默認狀態是啟用的。禁用中斷後一些函數可能無法工作,並傳入信息可能會被忽略。中斷會稍微打亂代碼的時間,但是在關鍵部分可以禁用中斷

noInterrupts()

禁止中斷(重新使能中斷interrupts())。中斷允許在後臺運行一些重要任務,默認使能中斷。禁止中斷時部分函數會無法工作,通信中接收到的信息也可能會丟失。

中斷會稍影響計時代碼,在某些特定的代碼中也會失效

例子:

void setup()

void loop()

{

noInterrupts();

//關鍵的、時間敏感的代碼放在這

interrupts();

//其他代碼放在這

}

通訊

Serial

用於Arduino控制板和一臺計算機或其他設備之間的通信。所有的Arduino控制板有至少一個串口(又稱作為UART或USART)。它通過 0(RX)和1(TX)數字引腳經過串口轉換晶片連接計算機USB埠與計算機進行通信。因此,如果你使用這些功能的同時你不能使用引腳0和1作為輸入或輸出。

您可以使用Arduino IDE內置的串口監視器與Arduino板通信。點擊工具欄上的串口監視器按鈕,調用begin()函數(選擇相同的波特率)。

Arduino Mega 有三個額外的串口:Serial 1使用19(RX)和18(TX),Serial 2使用17(RX)和16(TX),Serial3使用15(RX)和14(TX)。 若要使用這三個引腳與您的個人電腦通信,你需要一個額外的USB轉串口適配器,因為這三個引腳沒有連接到Mega上的USB轉串口適配器。若要用它們來與外部的TTL串口設備進行通信,將TX引腳連接到您的設備的RX引腳,將RX引腳連接到您的設備的TX引腳,將GND連接到您的設備的GND。(不要直接將這些引腳直接連接到RS232串口;他們的工作電壓在+/- 12V,可能會損壞您的Arduino控制板。)Arduino Leonardo板使用Serial 1通過0(RX)和1(TX)與viaRS-232通信,。Serial預留給使用Mouse and Keyboard libarariies的USB CDC通信 。更多信息,請參考Leonardo 開始使用頁和硬體頁。

函數:

if (Serial)

表示指定的串口是否準備好

在Leonardo上,if(Serial)表示不論有無USB CDC,串行連接都是開放的。對於所有其他的情況,包括Leonardo上的if(Serial1),將一直返回true。 這來自於 Arduino 1.0.1 版本的介紹

對於所有的arduino板:  if (Serial)

Arduino Leonardo 特有:    if (Serial1)

Arduino Mega 特有:

if (Serial1)

if (Serial2)

if (Serial3)

available()

獲取從串口讀取有效的字節數(字符)。這是已經傳輸到,並存儲在串行接收緩衝區(能夠存儲64個字節)的數據。 available()繼承了 Stream類

Serial.available()

僅適用於Arduino Mega :

Serial1.available()

Serial2.available()

Serial3.available()

例子:

incomingByte = 0; //傳入的串行數據

void setup() {

Serial.begin(9600);     // 打開串行埠,設置傳輸波特率為9600 bps

}

void loop() {

//只有當你接收到數據時才會發送數據,:

if (Serial.available() > 0) {

//讀取傳入的字節:

incomingByte = Serial.read();

//顯示你得到的數據:

Serial.print(「I received: 「);

Serial.println(incomingByte, DEC);

}

}

begin()

將串行數據傳輸速率設置為位/秒(波特)。與計算機進行通信時,可以使用這些波特率:300,1200,2400,4800,9600,14400,19200,28800,38400,57600或115200。當然,您也可以指定其他波特率 – 例如,引腳0和1和一個元件進行通信,它需要一個特定的波特率

Serial.begin(speed) 僅適用於Arduino Mega : Serial1.begin(speed) Serial2.begin(speed) Serial3.begin(speed)

speed: 位/秒 (波特) – long

end()

停用串行通信,使RX和TX引腳用於一般輸入和輸出。要重新使用串行通信, 需要 Serial.begin()語句

Serial.end()

僅適用於Arduino Mega: Serial1.end() Serial2.end() Serial3.end()find()

Serial.find()

從串行緩衝器中讀取數據,直到發現給定長度的目標字符串。如果找到目標字符串,該函數返回true,如果超時則返回false

Serial.flush() 繼承了 Stream 類

Serial.find(target)

target : 要搜索的字符串(字符)

findUntil()

Serial.findUntil()

從串行緩衝區讀取數據,直到找到一個給定的長度或字符串終止位。

如果目標字符串被發現,該函數返回true,如果超時則返回false。

Serial.findUntil()繼承了Stream類。

Serial.findUntil(target, terminal)

target : 要搜索的字符串(char) terminal : 在搜索中的字符串終止位 (char)

flush()

等待超出的串行數據完成傳輸。(在1.0及以上的版本中,flush()語句的功能不再是丟棄所有進入緩存器的串行數據。)

flush()繼承了Stream類

Serial.flush()

僅 Arduino Mega 可以使用的語法:

Serial1.flush()

Serial2.flush()

Serial3.flush()

parseFloat()

查找傳入的串行數據流中的下一個有效的浮點數。 parseFloat()繼承了Stream類

Serial.parseFloat()

僅適用於Arduino Mega:

Serial1.parseFloat()

Serial2.parseFloat()

Serial3.parseFloat()

parseInt()

查找傳入的串行數據流中的下一個有效的整數。 parseInt()繼承了Stream類

Serial.parseInt()

僅適用於Arduino Mega:

Serial1.parseInt()

Serial2.parseInt()

Serial3.parseInt()

peek()

返回傳入的串行數據的下一個字節(字符),而不是進入內部串行緩衝器調取。也就是說,連續調用 peek()將返回相同的字符,與調用read()方法相同。peek()繼承自 Stream類

Serial.peek()

僅適用於Arduino Mega :

Serial1.peek()

Serial2.peek()

Serial3.peek()

print()

以人們可讀的ASCII文本形式列印數據到串口輸出。此命令可以採取多種形式。每個數字的列印輸出使用的是ASCII字符。浮點型同樣列印輸出的是 ASCII字符,保留到小數點後兩位。Bytes型則列印輸出單個字符。字符和字符串原樣列印輸出。Serial.print()列印輸出數據不換行,Serial.println()列印輸出數據自動換行處理。例如

Serial.print(78)輸出為「78」

Serial.print(1.23456)輸出為「1.23」

Serial.print(「N」)輸出為「N」

Serial.print(「Hello world.」)輸出為「Hello world.」

也可以自己定義輸出為幾進位(格式);可以是BIN(二進位,或以2為基數),OCT(八進位,或以8為基數),DEC(十進位,或以10為基數),HEX(十六進位,或以16為基數)。對於浮點型數字,可以指定輸出的小數數位。例如

Serial.print(78,BIN)輸出為「1001110」

Serial.print(78,OCT)輸出為「116」

Serial.print(78,DEC)輸出為「78」

Serial.print(78,HEX)輸出為「4E」

Serial.println(1.23456,0)輸出為「1」

Serial.println(1.23456,2)輸出為「1.23」

Serial.println(1.23456,4)輸出為「1.2346」

你可以通過基於快閃記憶體的字符串來進行列印輸出,將數據放入F()中,再放入Serial.print()。例如 Serial.print(F(「Hello world」)) 若要發送一個字節,則使用 Serial.write()

Serial.print(val)

Serial.print(val,格式)

val:列印輸出的值 – 任何數據類型

格式:指定進位(整數數據類型)或小數位數(浮點類型)

例子:

int x = 0;    // 定義一個變量並賦值

void setup() {

Serial.begin(9600);      // 打開串口傳輸,並設置波特率為9600

}

void loop() {

//列印標籤

Serial.print(「NO FORMAT」);       // 列印一個標籤

Serial.print(「\t」);              // 列印一個轉義字符

Serial.print(「DEC」);

Serial.print(「\t」);

Serial.print(「HEX」);

Serial.print(「\t」);

Serial.print(「OCT」);

Serial.print(「\t」);

Serial.print(「BIN」);

Serial.print(「\t」);

for(x=0; x< 64; x++){    // 列印ASCII碼錶的一部分, 修改它的格式得到需要的內容

//列印多種格式:

Serial.print(x);       // 以十進位格式將x列印輸出 – 與 「DEC」相同

Serial.print(「\t」);    // 橫向跳格

Serial.print(x, DEC);  // 以十進位格式將x列印輸出

Serial.print(「\t」);    // 橫向跳格

Serial.print(x, HEX);  // 以十六進位格式列印輸出

Serial.print(「\t」);    // 橫向跳格

Serial.print(x, OCT);  // 以八進位格式列印輸出

Serial.print(「\t」);    // 橫向跳格

Serial.println(x, BIN);  // 以二進位格式列印輸出

//                             然後用 「println」列印一個回車

delay(200);            // 延時200ms

}

Serial.println(「」);      // 列印一個空字符,並自動換行

}

println()

列印數據到串行埠,輸出人們可識別的ASCII碼文本並回車 (ASCII 13, 或 『\r』) 及換行(ASCII 10, 或 『\n』)。此命令採用的形式與Serial.print ()相同

Serial.println(val)

Serial.println(val, format)

val: 列印的內容 – 任何數據類型都可以

format: 指定基數(整數數據類型)或小數位數(浮點類型)

例子:

int analogValue = 0;    // 定義一個變量來保存模擬值

void setup() {

//設置串口波特率為9600 bps:

Serial.begin(9600);

}

void loop() {

//讀取引腳0的模擬輸入:

analogValue = analogRead(0);

//列印g各種格式:

Serial.println(analogValue);       //列印ASCII編碼的十進位

Serial.println(analogValue, DEC);  //列印ASCII編碼的十進位

Serial.println(analogValue, HEX);  //列印ASCII編碼的十六進位

Serial.println(analogValue, OCT);  //列印ASCII編碼的八進位

Serial.println(analogValue, BIN);  //列印一個ASCII編碼的二進位

// 延時10毫秒:

delay(10);

}

read()

讀取傳入的串口的數據。read() 繼承自 Stream 類

serial.read()

Arduino Mega獨有:

erial1.read()

serial2.read()

serial3.read()

例子:

int incomingByte = 0;   // 傳入的串行數據

void setup() {

Serial.begin(9600);     // 打開串口,設置數據傳輸速率9600

}

void loop() {

// 當你接收數據時發送數據

if (Serial.available() > 0) {

// 讀取傳入的數據:

incomingByte = Serial.read();

//列印你得到的:

Serial.print(「I received: 「);

Serial.println(incomingByte, DEC);

}

}

readBytes()

Serial.readBytes()從串口讀字符到一個緩衝區。如果預設的長度讀取完畢或者時間到了 (參見 Serial.setTimeout()),函數將終止.

Serial.readBytes()返回放置在緩衝區的字符數。返回0意味著沒有發現有效的數據。

Serial.readBytes()繼承自 Stream 類

Serial.readBytes(buffer, length)

buffer:用來存儲字節(char[]或byte[])的緩衝區

length:讀取的字節數(int)

readBytesUntil()

Serial.readBytesUntil()將字符從串行緩衝區讀取到一個數組。如果檢測到終止字符,或預設的讀取長度讀取完畢,或者時間到了 (參見 Serial.setTimeout())函數將終止。

Serial.readBytesUntil()返回讀入數組的字符數。返回0意味著沒有發現有效的數據。

Serial.readBytesUntil()繼承自 Stream類

Serial.readBytesUntil(character, buffer, length)

character :要搜索的字符(char)

buffer :緩衝區來存儲字節(char[]或byte[])

length:讀的字節數(int)

setTimeout()

Serial.setTimeout()設置使用Serial.readBytesUntil() 或Serial.readBytes()時等待串口數據的最大毫秒值. 默認為1000毫秒。

Serial.setTimeout()繼承自Stream 類

Serial.setTimeout(time)

time :以毫秒為單位的超時時間(long)

write()

寫入二級制數據到串口。發送的數據以一個字節或者一系列的字節為單位。如果寫入的數字為字符,需使用print()命令進行代替

Serial.write(val)

Serial.write(str)

Serial.write(buf, len)

Arduino Mega還支持:Serial1,Serial2,Serial3 (替代Serial)

val: 以單個字節形式發的值

str: 以一串字節的形式發送的字符串

buf: 以一串字節的形式發送的數組

len: 數組的長度

返回結果:

byte

write() 將返回寫入的字節數,但是否使用這個數字是可選的

SerialEvent()

Stream

 文章來自UltiRobot《Arduino 語法舉例說明》



相關焦點

  • Arduino--語法07
    例子:long speed Of Light=186000L;//參見整數常量『L』的說明語法:long var=val;var-長整型變量名var-賦給變量的值11.10 unsigned long(無符號長整數型)描述:無符號長整型變量擴充了變量容量以存儲更大的數據,它能存儲
  • Arduino--語法08
    語法:char(x)參數:x:任何類型的值返回char12.2  byte()描述:將一個值轉換為字節型數值語法:byte(x)參數:X:任何類型的值返回字節語法:long(x)參數:x:任意類型的數值返回值長整型數12.6  float()描述:將一個值轉換為float型數值。
  • Arduino串口通信簡介
    語法:Serial.begin(speed);  參數speed: 波特率,一般取值300, 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600,115200這裡設置好波特率之後,需要在串口監視器中也設置同樣的波特率,只有這樣,arduino
  • Arduino 課時一:初識Arduino
    Arduino IDE 的程式語言與C語言語法類似,同時集成了一些類庫,很多時候需要調用庫,這使得編程時不用過多關心底層的原理,會用即可。這讓我這個非專業人士也能玩上一玩,感到很開心。二.怎麼拼讀Arduino?
  • Arduino--語法03
    三、擴展語法由於其不同的用法,括號也是一個程序中非常重要的語法,如果括號發生錯誤,往往會極大地影響了程序的意義。來波廣告3.5#define#define是一個很有用的C語法, 它允許程式設計師在程序編譯之前給常量命名。在Arduino中,定義的常量不會佔用晶片上的任何程序內存空間。在編譯時編譯器會用事先定義的值來取代這些常量。
  • Arduino入門1: Arduino的前世今生
    圖片為Arduino一代原型機Wiring Lite, 轉載自http://arduinohistory.github.io相比當時價格較高的BASIC Stamp和其他平臺,Arduino在硬體上極大地集成和簡化了電路模塊一些繁瑣的技術細節
  • arduino 從零開始(2)探索arduino開發板和arduino IDE
    1、你將會探索arduino開發板2、你將會打開並上傳程序到arduino 板3、你將會學到arduino程序的基本框架和基本函數4、你將會自己編寫並上傳arduino程序一、arduino 板簡單來說,arduino(硬體)就是一個可以用來根據你的要求進行編程從而可以和很多輸入輸出設備進行交互的一個微型電腦系統。
  • 用Arduino開發物聯網設備之初識Arduino
    硬體部分:最初Arduino硬體只有那麼幾種,uno、mini等,但是現在經過這麼多年的發展,越來越多的硬體支持了arduino開發環境,所以現在也很難去界定什麼是血統純正的arduino硬體了。軟體部分:這部分也就是我們平時說的Arduino,我們其實使用的就是arduino框架來對很多的mcu來進行編程。這裡很多小夥伴其實有很多疑問,比如為什麼要用arduino來進行?
  • Arduino_集合Arduino教程、Arduino IDE及設計應用的技術專題
    在線等挺急的 詳細點 回答28# eepwlover:Arduino開發工具(arduino IDE) 1.0.5 綠色免費版
  • 文章寫作:對比說明與舉例說明
    舉例說明舉例說明是用具體的感性材料來說明理性認識的重要方法。舉例說明可以使一些抽象的概念或者較難理解的原理、規律、事物特徵等變得形象化、具體化、通俗易懂、易於了解。舉例可多可少,以把道理說清楚、說明白為原則。
  • 【arduino】流水燈
    最近球球小朋友對arduino產生了濃厚的興趣,沒事就找書或者找視頻進行學習。
  • Arduino入門參考教程(1)基礎知識與開發環境篇
    食用前請自帶飯碗——Arduino UNO R3(某寶有售,便宜的大概23RMB左右一塊)1.關於Arduino2.關於Arduino IDE(開發環境)3.關於Arduino UNO R3開發板    Arduino 是一款便捷靈活、方便上手的開源電子原型平臺,包含硬體(各種型號的arduino板)和軟體(arduino
  • 如何使用Arduino UNO製作一臺PM2.5顯示器
    1 ---- NC 2 ---- NC 3 ---- 5V 4 ---- NC 5 ---- GND 6 ---- arduino-tx 7 ---- arduino-rx 4-數字管連接: 1— ser--連接到arduino8 2— clk—連接至arduino9
  • Arduino為什麼這麼火
    正文:這一兩年間,arduino作為一個能夠快速表現設計想法的工具,日漸火了起來,愛好者們自發性、非官方組織起來的論壇社區日漸豐富和活躍,近一兩年小夥伴們的作品集中也越來越多地涉及arduino相關的項目案例,那麼我們就簡單地來看一下
  • LABVIEW+Arduino
    而arduino可以模擬這些操作,再與LABVIEW相結合,可以在同一程序能實現切換頻點、通道等的操作,並根據測試需要將所需要的測試數據記錄在相應的表格內。一、什麼是arduinoArduino是一款便捷靈活、方便上手的開源電子原型平臺。包含硬體(各種型號的Arduino板)和軟體(Arduino IDE)。由一個歐洲開發團隊於2005年冬季開發。
  • 初二英語語法大全:help用法舉例
    新東方網>英語>英語學習>語法詞彙>語法指導>正文初二英語語法大全:help用法舉例 2015-04-03 09:19 來源:英語網 作者:
  • arduino mega全解
    關於arduino mega相信大家對於這一開發板有了一定的了解,現在對這款開發板做一下系統的解說:本文引用地址:http,其中低位值,高位值和擴展位值分別為:FF,DA,FF,調入FLASH為arduino mega1280的hex文件,其操作在官網上可以查到。
  • 大牛輕鬆帶你玩轉Arduino智能硬體:(一)arduino入門:硬體介紹
    (一)arduino入門:硬體介紹認識arduino你都不需要去關心單片機編程繁瑣的細節,提供給你的是一套容易使用的工具包。4 以下是基於arduino單片機的作品尋跡小車平衡小車我相信大家看了這些作品後,都會感覺arduino的強大,心中也是很激動的,也很想嘗試去自己動手製作,那好就讓我們進入arduino的世界吧,讓自己成為一名創客。
  • 2020考研英語語法全面舉例講解:被動語態
    以下是宏博太奇考研小編為大家準備整理的「2020考研英語語法全面舉例講解:被動語態」,希望對考生有幫助!英語主動語態有16個時態;被動語態常用的有8個,以give為例說明如下:考研英語完型、閱讀、翻譯及寫作都不開語法知識,語法是基礎,考生一定要熟悉,且靈活的掌握。2017考研複習之初,今天給大家講解語法知識點,希望考生能夠從現在日積月累,最終質變提升。
  • 脫離Arduino IDE的外部編譯及上傳模式
    = %1set arduino_lib_path= %2%1\arduino-builder.exe -fqbn espressif:esp32:esp32 -build-path build -build-cache core_cache -hardware %arduino_lib_path%\hardware -libraries %arduino_lib_path%\libraries