arduino詳細介紹

一、Ardinuo基礎1. 褐色爲系統命令(int,void,setup),藍色爲命令功能的開關(OUTPUT),黑色爲變量。三、經典歷程:打印出hello worldvoid setup() {Serial.begin(9600);}void loop(){Serial.println(“Hello world”);delay(1000);}四、Arduino 的數字輸出Arduino的數字1/O被分成兩個部分,其中每個部分都包含有6個可用的IO管構,即管腳2到管腳7和管腳8到管腳13.除了管腳13上接了一個1K的電阻之外,其他各個管腳都直接連接到ATmega上。我們可以利用個6位的數字跑馬燈,來對Arduino數字yO的輸出功能進行驗證,以下是相應的原理圖: 電路中在每個I/O管腳.上加的那個1K電阻被稱爲限流電阻,由於發光極管在電路中沒有等效電阻值,使用限流電阻可以使元件上通過的電流不至於過大,能夠起到保護的作用。       該工程對應的代碼爲:       int startPin= 2;int endPin = 7;int index= 0;void setupO{       for (inti= startPin;i<= endPin;i++){       pinMode(i, OUTPUT);       void loop(X{       for (inti= startPin;i<= endPin;i++){       digitalWrite(i, LOW);}       digitalWrite(startPin + index, HIGH);       index = (index + 1) %(endPin-startPin+1);delay(100);}       下載並運行該工程,連接在Arduino數字I/O管腳2到管腳7上的發光極管會依次點亮0.1秒,然後再熄滅。五、Arduino 的串口輸入       串行通信是在實現在PC機與微控制器進行交互的最簡單的辦法。之前的PC機上一般都配有標準的RS-232或者RS-422接口來實現串行通信,但現在這種情況已經發生了一些改變 ,大家更傾向於使用USB這樣一種更快速但同時也更加複雜的方式來實現串行通信。儘管在有些計算機上現在已經找不到RS-232或者RS-422接口了,但我們仍可以通過USB/串口或者PCMCIA/串口這樣的轉換器,在這些設備上得到傳統的串口。       通過串口連接的Arduino在交互式設計中能夠爲PC機提供一種全新的交互方式,比如用PC機控制一些之前看來非常複雜的事情,像聲音和視頻等。很多場合中都要求Arduino能夠通過串口接收來自於PC機的命令,並完成相應的功能,這可以通過Arduino語言中提供的Serial.read()函數來實現。       在這一實驗中我們同樣不需要任何額外的電路,而只需要用串口線將Arduino和PC機連起來就可以了,相應的Arduino工程代碼爲:       int ledPin = 13;int val;       void setup() {       pinMode(ledPin, OUTPUT);Serial.begin(9600);        void loop() {       val = Serial.read();if(-1 != val) {       if('H == val) {       digitalWrite(ledPin, HIGH);delay(500);       digitalWrite(ledPin, LOW);       把工程下載到Arduino模塊中之後,在Arduino集成開發環境中打開串口監視器並將波特率設置爲9600,然後向Arduino 模塊發送字符H ,如下圖所示:       該工程運行起來之後會不斷調用Serial.read()函數從串口獲得數據。Arduino 語言提供的這個函數是不阻塞的,也就是說不論串口,上是否真的有數據到達,該函數都會立 即返回,Serilread)函數每次只讀取一個字節的數據 ,當串口上有數據到達的時候,該函數的返回值爲到達的數據中第一個字符的 ASCIT碼;當串口上沒有數據到達的時候,該函數的返回值則爲-1.Arduino語言的參考手冊中沒有對SerialLread()函數做過多的說明,我的個疑問是如果PC機一次發送的數據太多,Arduino是否提供相應的串口緩存功能來保證數據不會丟失? Arduino語言中提供的另外一個函數Srialallable(或許能夠幫助我們用實驗來進行驗證: int ledPin = 13;//設定控制LED的數字IO管腳int val;void setup() {pinMode(ledPin,OUTPUT);//設定數字IO口的模式,output爲輸出Serial.begin(9600);}//設定波特率爲9600void loop(){val=Serial.read();if(-1!=val){if(‘H’==val) {digitalWrite(ledPin,HIGH);//設定PIN5腳爲HIGH=5v左右delay(500);digitalWrite(ledPin,LOW);//設定PIN5腳爲LOW=0vSerial.print(“Available:”);Serial.println(Serial.available(),DEC);//返回串口緩衝區中當前剩下的字符個數。最多能夠緩衝128個字節。 }}}函數Serialavailable()的功能是返回串口緩衝區中當前剩餘的字符個數,按照Arduino提供的該函數的說明,串口緩衝區中最多能緩衝128個字節。我們可以一次給Arduino模塊發送多個字符,來驗證這一功能:在這一實驗中,每當Arduino成功收到一 個字符H,連接在數字I/O端口管腳13上的發光二極管就會閃爍一次:六、Arduino的串口輸出在許多實際應用場合中我們會要求在Arduino和其它設備之間實現相互通信,而最常見通常也是最簡單的辦法就是使用串行通信。在串行通信中,兩個設備之間一個接一個地來回發送數字脈衝,它們之間必須嚴格遵循相應的協議以保證通信的正確性。在PC機上上最常見的串行通信協議是RS-232串行協議,而在各種微控制器(單片機).上採用的則是TTl串行協議。由於這兩者的電平有很大的不同,因此在實現PC機和微控制器的通信時,必須進行相應的轉換。完成RS-232電平和TTL電平之間的轉換- -般採用專用芯片,如MAX232等,但                        在Arduino上是用相應的電平轉換電路來完成的。       根據Arduino的原理圖我們不難看出,ATmega的RX和TX引腳-方面直接接到了數字I/0端口的0號和1號管腳,另-方面又通過電平轉換電路接到了串口的母頭上。因此,當我們需要用Arduino與PC機通信時,可以用串口線將兩者連接起來;當我們需要用Arduino與微控制器(如另一塊Arduino )通信時,則可以用數字I/O端口的0號和1號管腳。       串行通信的難點在於參數的設置,如波特率、數據位、停止位等,在Arduino語言可以使用Serial.begin()函數來簡化這一任務。 爲了實現數據的發送,Arduino則提供了Srial,print()和Serial.printin()兩個函數,它們的區別在於後者會在請求發送的數據後面加上換行符,以提高輸出結果的可讀性。       在這一實驗中沒有用到額外的電路,我們只需要用串口線將Arduino和PC機連起來就可以了,相應的代碼爲:void setup() {Serial.begin(9600);}void loop(){Serial.println(“Hello world”);delay(1000);}      在將工程下載到Arduino模塊中之後,在Arduino集成開發環境的工具欄中單擊"Serial Monitor"控制,打開串口監視器: 接着將波特率設置爲9600,即保持與工程中的設置相-致:如果一-切正常,此時我們就可以在Arduino集成開發環境的Console窗口中看到串口上輸出的數據了:爲了檢查串口上是否有數據發送,一個比較簡單的辦法是在數字 I/O端口的1號管腳(TX)和5V電源之間接一個發光極管這樣一-旦 Arduino在通過串口向PC機發送數據時,相應的發光二極管就會閃爍,實際應用中這是一個非常方便的調試手段。七、Arduino 的模擬輸入       從指定的模擬引腳讀取值。Arduino 主板有6個通道( Mini和Nano有8個,Mega有16個),10位AD (模數)轉換器。這意味着輸入電壓0-5伏對應0-1023的整數值。這就是說讀取精度爲: 5伏/1024個單位,約等於每個單位0.049伏(4.9毫伏).輸入範圍和進度可以通過analogReference(進行修改。       模擬輸入的讀取週期爲100微秒( 0.0001秒), 所以最大讀取速度爲每秒10,000次。pin :讀取的模擬輸入引腳號(大多數主板是A0-A5,Mini和Nano是A0-A7,Mega是A0-A15 )Returns返回值int (0 to 1023)       整數型int(0到1023)       如果模擬輸入引腳沒有連接到任何地方,analogRead()的返回值也會因爲某些因素而波動(如其他模擬輸入,手與主板靠的太近)       int analogPin = A5;int val = 0;void setup(){       Serial.begin(9600);}       void loop(){       val = analogRead(analogPin);      Serial.println(val);      delay(1000);}八、Arduino的模擬輸出脈衝寬度調製或PWM,是通過數字均值獲得模擬結果的技術,數字控制被用來創建一個方波 ,信號在開和關之間切換。這種開關模式通過改變“開"”時間段和關”時間段的比值完全橫擬從開(5伏特)和關(0伏特)之間的電壓。“開時間”的週期稱爲脈衝寬度。爲了得到不同的模擬值,你可以更改,成調節脈衝寬度。如果你重複這種開關懂式速度足夠快,其結果是一個介於0和5V之間的穩定電壓用以控制LED的亮度,綠色線表示一個固定的時間期限。此持續時間或週期是PWM的頻率的倒數。換言之,Arduino的PWM頻率約爲500Hz,每個綠線之間表示2毫秒,一個analogWrite ( )的調用區間爲0- 255,例如analogWrite ( 255 )需要100%佔空比(常開),和analogWrite ( 127 )是50%佔空比(上一半運行中 ,抓住Arduino來回搖晃。這麼做的實質上是時間跨越時空的映射。對於眼睛,每個運動模糊成一條線的LED閃爍。由於LED消失和縮小,那些小行的長度會增長和收縮。現在就可以看到脈衝寬度。將橫投值(PWM波)輸出到營腳。可用於在不同的光線亮度調節發光二極管亮度或以不同的速度驅動馬達。調用alglirt)0,該引腳將產生一個指定佔空比的穩定方波,直到下一次調用anagwrite) (或在同一腳調用digitalWrite()).  PWM的信號頻率約爲490赫茲。在大多數Arduino板(帶有ATmega168或ATmega328), 這個函數工作在引腳3,5,6,9,10和11.在ArduinoMega,它適用於2-13號引腳。老的帶有ATmega8的Arduino板只支持9,10,11引腳上使用。你並不需要在調用analogWrite()之前爲設置輸入引腳而調用pinMode()。 這個analogWrite方法與模擬引腳或者analogRead方法毫不相干analogWrite(pin, value)Parameters參數pin :輸出的引腳號value:佔用空:從0(常關)到255 (常開)引腳5和6的PWM輸出將產生高於預期的佔空比。這是因爲milli()和delay()函數,它們共享同一個內部定時器用於產生PWM輸出所產生的相互作用。這提醒我們引腳5和6在多數低佔空比的設置(如0- 10 )的情況下0數值的結果並沒有完全關閉。int ledPin =3;int analogPin =A5;int val= 0;void setup(){ pinMode(ledPin, OUTPUT);}void loop(){val = analogRead(analogPin); analogWrite(ledPin, val/ 4);}2. setup() 函數在程序開始時使用,可以初始化變量、接口模式、啓用庫等(例如:pinMode(ledPin,OUTPUT);)。3. loop()在setup函數之後,即初始化後,loop()讓你的程序循環地被執行。使用它來運轉Ardinuo。二、Ardinuo簡單函數1. pinMode(接口名稱,OUTPUT或INPUT)將接口定義爲輸入或輸出接口,用在setup函數裏。2. digtalRead(讀出接口數值) 3. digtalWrite(接口名稱,HIGH或LOW)將數字接口值至高或低。4. ananlogwrite(接口名稱,數值)給一個接口寫入模擬值(pwm波)。5. ananlogRead(接口名稱)從指定的模擬接口讀取值,ardiuno對該模擬值進行10-bit的數字轉換,這個方法將輸入的0-5電壓值轉換爲0到1023間的整數值、6. delay()延時,按毫秒爲單位7. Serial.begin(波特率)設置串行每秒傳輸數據的速率(波特率)。在同計算機通訊時,使用下面這些值:300,1200,2400,4800,9600,14400,19200,28800,38400,57600或115200.也可以在任何時候使用其他的值,比如,與0號或1號插口通信就要求特殊的波特率。用在setup函數中。8. Serial.read()讀取持續輸入的數據。9. Serial.print(數據,數據的進制)從串行端口輸出數值。Serial.print(數據)默認爲十進制等於serial.print(數據,DEC)。//DEC 十進制10. Serial.println(數據,數據的進制)從串口端口輸出數據,跟隨一個回車和一個換行符。這個函數所取得的值與serial.print()一樣,但可以換行。

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