Arduino 語法(轉)

根據http://wiki.geek-workshop.com/doku.php?id=arduino:arduino_language_reference修改 php

#Arduino 語法

setup()		初始化函數

loop()		循環體函數

控制語句相似於C
//if		if...else		for		switch case		while		do... while		break		continue		return		goto

擴展語法相似於C
//;(分號)		{}(花括號)		//(單行註釋)		/* */(多行註釋)		#define		#include

算數運算符相似於C
//=(賦值運算符)		+(加)		-(減)		*(乘)		/(除)		%(模)

比較運算符相似於C
//==(等於)		!=(不等於)		<(小於)		>(大於)		<=(小於等於)		>=(大於等於)

布爾運算符相似於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)的只有引腳九、十、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

USB(僅適用於 Leonardo 和 Due)
鍵盤
鼠標
相關文章
相關標籤/搜索