《Arduino開發(fā)技術(shù)及應(yīng)用》高職全套教學(xué)課件_第1頁
《Arduino開發(fā)技術(shù)及應(yīng)用》高職全套教學(xué)課件_第2頁
《Arduino開發(fā)技術(shù)及應(yīng)用》高職全套教學(xué)課件_第3頁
《Arduino開發(fā)技術(shù)及應(yīng)用》高職全套教學(xué)課件_第4頁
《Arduino開發(fā)技術(shù)及應(yīng)用》高職全套教學(xué)課件_第5頁
已閱讀5頁,還剩394頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

Arduino軟硬件開發(fā)環(huán)境ArduinoIDEArduino相關(guān)電子元器件第1單元Arduino介紹Arduino仿真軟件全套可編輯PPT課件Arduino是一種靈活便捷、易于學(xué)習(xí)的開源電子原型平臺,其主要包含兩部分重要內(nèi)容:硬件及軟件。硬件指的是Arduino開發(fā)板,其從2005年至今,已經(jīng)推出了多種型號以及眾多衍生控制器。軟件指的是ArduinoIDE,即集成開發(fā)環(huán)境,其可以在Windows、MacOS、Linux三大主流操作系統(tǒng)上運(yùn)行。本單元將主要介紹與Arduino相關(guān)的軟硬件環(huán)境,包括開發(fā)板、相關(guān)電子元器件、ArduinoIDE以及仿真軟件。了解Arduino開源平臺認(rèn)識Arduino開發(fā)板及拓展板掌握Arduino相關(guān)電子元件基礎(chǔ)掌握Arduino仿真軟件熟悉ArduinoUNO與Mega2560開發(fā)板掌握Arduino軟硬件開發(fā)環(huán)境搭建任務(wù)1.1Arduino介紹預(yù)備知識——?dú)v史背景及特點(diǎn)深入學(xué)習(xí)——Arduino開發(fā)板與拓展板引導(dǎo)實踐——ArduinoUNO與ArduinoMega2560任務(wù)1.1Arduino介紹1.1.1

預(yù)備知識——?dú)v史背景及特點(diǎn)Arduino創(chuàng)始人團(tuán)隊Arduino的誕生主要用來解決大學(xué)生面臨的具體的問題,其創(chuàng)始人MassimoBanzi(馬西莫·班茲)是意大利米蘭互動設(shè)計學(xué)院的教師,他的學(xué)生經(jīng)常抱怨,市面上沒有一塊價格便宜、功能強(qiáng)大、使用簡單的控制主板,用來完成電子創(chuàng)意設(shè)計。2005年,Banzi與另一位在這所大學(xué)做訪問研究的西班牙CPU硬件工程師DavidCuartielles(大衛(wèi)·卡提爾斯)共同研究這一問題,隨后團(tuán)隊又引入Banzi的學(xué)生DavidMellis(大衛(wèi)·梅利斯)負(fù)責(zé)編寫系統(tǒng)代碼。DavidMellis編寫完成代碼后,電路板制作完成,這塊電路板被命名為Arduino(以酒吧[diReArduino]的名字命名),中文譯為“強(qiáng)壯的朋友”。任務(wù)1.1Arduino介紹1.1.1

預(yù)備知識——?dú)v史背景及特點(diǎn)Arduino的創(chuàng)始人一致同意,采用硬件開源的方式推廣Arduino。Banzi、Cuartielles與Mellis將設(shè)計圖上傳到網(wǎng)絡(luò),由于開源硬件不容易監(jiān)管,創(chuàng)作團(tuán)隊決定采用CreativeCommons許可(保護(hù)開發(fā)版權(quán)行為的一種許可,類似于GPL)。在該許可下,任何人都可以生產(chǎn)電路板的復(fù)制品,甚至可以重新設(shè)計,并且不需要付版權(quán)費(fèi)。如果開發(fā)者重新發(fā)布了引用設(shè)計或修改了電路板,則最新的設(shè)計必須使用相同或類似的CreativeCommons許可,以保證全新設(shè)計的Arduino電路板同樣自由和開發(fā)。Arduino創(chuàng)始人團(tuán)隊唯一所有的是“Arduino”商標(biāo),如果其他人使用該名字出售電路板,則需要支付費(fèi)用給Arduino核心開發(fā)團(tuán)隊成員。Arduino標(biāo)志支持跨平臺:Arduino軟件的集成開發(fā)環(huán)境可運(yùn)行在Windows、MacOS、Linux操作系統(tǒng)上,用戶可以自由選擇系統(tǒng)進(jìn)行環(huán)境搭建。支持多種互動程序:Arduino可以獨(dú)立運(yùn)行,并與AdobeFlash、Processing、Max/MSP、PureData、SuperCollider等軟件進(jìn)行交互。簡單易掌握:ArduinoIDE基于processingIDE開發(fā)。對于初學(xué)者而言,極易掌握,同時具有足夠的靈活性。Arduino語言基于wiring語言開發(fā),是對avr-gcc庫的二次封裝,不需要初學(xué)者掌握太多的硬件及編程技術(shù)。軟件開源與可與擴(kuò)展性:對Arduino的編程是通過類似于JAVA、C語言的Processing/Wiring開發(fā)環(huán)境。硬件開源與可擴(kuò)展性:Arduino不僅僅是全球最流行的開源硬件,也是一個優(yōu)秀的硬件開發(fā)平臺,更是硬件開發(fā)的趨勢。Arduino遵循知識共享許可協(xié)議,開放電路圖設(shè)計,因此開發(fā)者可以拓展它,甚至開發(fā)屬于自己的模塊,這樣不僅提高了開發(fā)的靈活性,而且降低了生產(chǎn)成本。任務(wù)1.1Arduino介紹1.1.1

預(yù)備知識——?dú)v史背景及特點(diǎn)任務(wù)1.1Arduino介紹1.1.2

深入學(xué)習(xí)——Arduino開發(fā)板與拓展板開發(fā)板類型產(chǎn)品型號入門級Uno、Leonardo、101、Esplora、Micro、Nano等高級級Mega2560、Zero、DUE、MKRVIDOR4000、MegaADK等物聯(lián)網(wǎng)類Yun、Ethernet、MKR1000等教育類CTC101、EngineeringKIT等可穿戴類LilyPad、Gemma等Arduino開發(fā)板可以分為入門級、高級類、物聯(lián)網(wǎng)類、教育類以及可穿戴類5大類任務(wù)1.1Arduino介紹1.1.2

深入學(xué)習(xí)——Arduino開發(fā)板與拓展板開發(fā)板處理器工作/輸入電壓(V)時鐘頻率(MHz)模擬I/O引腳數(shù)數(shù)字I/O/PWM引腳數(shù)EEPROM(KB)SRAM(KB)Flash(KB)USB類型串口個數(shù)UNOATmega328p5/7~12166/014/61232Regular1Mega2560Atmega25605/7~121616/054/1548256Regular4LeonardoATmega32u45/7~121612/020/712.532Micro1NanoATmega168ATmega328p5/7~9168/014/60.512/11/216/32Mini1EthernetATmega328p5/7~12166/014/41232Regular-任務(wù)1.1Arduino介紹1.1.2

深入學(xué)習(xí)——Arduino開發(fā)板與拓展板開發(fā)板處理器工作/輸入電壓(V)時鐘頻率(MHz)模擬I/O引腳數(shù)數(shù)字I/O/PWM引腳數(shù)EEPROM(KB)SRAM(KB)Flash(KB)USB類型串口個數(shù)YunATmega32u4AR9331Linux516/40012/020/712.516MB3264MBMicro1DUEATSAM3X8E3.3/7~128412/254/6-965122Micro4101Intel?Curie3.3/7~12326/014/424196RegularMicroATmega32u45/7~121612/020/712.532Micro1LilyPadATmega168VATmega328p2.7~5.586/014/60.512116任務(wù)1.1Arduino介紹1.1.2

深入學(xué)習(xí)——Arduino開發(fā)板與拓展板開發(fā)板處理器工作/輸入電壓(V)時鐘頻率(MHz)模擬I/O引腳數(shù)數(shù)字I/O/PWM引腳數(shù)EEPROM(KB)SRAM(KB)Flash(KB)USB類型串口個數(shù)MKR1000SAMD21Cortex-M0+3.3/5487/18/4-32256Micro1ZEROATSAMD21G183.3/7~12486/114/10-322562Micro2任務(wù)1.1Arduino介紹1.1.2

深入學(xué)習(xí)——Arduino開發(fā)板與拓展板Arduino不同類型開發(fā)板任務(wù)1.1Arduino介紹1.1.2

深入學(xué)習(xí)——Arduino開發(fā)板與拓展板Arduino不同類型拓展板任務(wù)1.1Arduino介紹1.1.3引導(dǎo)實踐——Arduino

UNO與ArduinoMega2560引腳分類說明串口引腳0(RX)與1(TX),用于接收與發(fā)送串口數(shù)據(jù),這兩個引腳與ATmega16U2(或CH340)等USB-TTL芯片連接外部中斷引腳2與3,可配置為中斷觸發(fā)引腳,觸發(fā)模式分為四種,分別為低電平觸發(fā)、電平改變觸發(fā)、上升沿觸發(fā)、下降沿觸發(fā)PWM引腳3、5、6、9、10、11,可用于輸出8位PWM波SPI引腳10(SS)、11(MOSI)、12(MISO)、13(SCK),可用于SPI通信L-LED引腳13,該引腳與LED燈連接,當(dāng)引腳電平為HIGH時,LED燈亮,電平為LOW時,LED燈滅ArduinoUNO引腳說明Arduino UNO開發(fā)板有14個數(shù)字輸入/輸出引腳,其中6個可用于PWM輸出,6個模擬輸入引腳,1個UART,1個USB接口,1個ICSP插座,1個電源接口任務(wù)1.1Arduino介紹1.1.3引導(dǎo)實踐——Arduino

UNO與ArduinoMega2560引腳分類說明模擬輸入UNO有6個模擬輸入,即引腳A0~A5,每個模擬輸入提供10位分辨率(10位二進(jìn)數(shù)表示),即有1024個不同的數(shù)值。默認(rèn)情況下,模擬電壓的測量范圍是0~5VVIN當(dāng)使用外部電源供電時,該引腳可以輸出電源電壓5V5V電源引腳,當(dāng)使用USB供電時,直接輸出USB提供的5V電壓,使用外部電源供電時,輸出穩(wěn)壓后的5V電壓3.3V3.3V電源引腳,最大輸出50mA電流GND接地引腳IOREF模擬輸入的參考電壓,其他設(shè)備可通過該引腳識別開發(fā)板輸入/輸出參考電壓ArduinoUNO引腳說明任務(wù)1.1Arduino介紹1.1.3引導(dǎo)實踐——Arduino

UNO與ArduinoMega2560引腳分類說明串口用于接收(RX)和發(fā)送(TX)TTL串行數(shù)據(jù),串口引腳包括0(RX)與1(TX)、19(RX)與18(TX)、17(RX)與16(TX)、15(RX)與14(TX)。引腳0與1通過連接到ATmega16u2與計算機(jī)進(jìn)行串口通信外部中斷引腳2(中斷0)、引腳3(中斷1)、引腳18(中斷5)、引腳19(中斷4)、引腳20(中斷3)、引腳21(中斷2),這些引腳可用于輸入外部中斷信號,中斷有4種觸發(fā)模式,分別為低電平觸發(fā)、電平改變觸發(fā)、上升沿觸發(fā)、下降沿觸發(fā)PWM引腳2~13與引腳44~46可用于輸出8位PWM信號SPI引腳50(MISO)、51(MOSI)、52(SCK)、53(SS)可用于SPI通信ArduinoMega2560引腳說明ArduinoMega2560開發(fā)板有54個數(shù)字輸入/輸出引腳,其中15個可作為PWM輸出,16個模擬輸入,4個UART,1個USB接口,1個電源插孔,1個ICSP插座,1個復(fù)位按鈕,任務(wù)1.1Arduino介紹1.1.3引導(dǎo)實踐——Arduino

UNO與ArduinoMega2560引腳分類說明L-LED引腳13連接LED燈,當(dāng)引腳輸出高電平時打開LED,當(dāng)引腳輸出低電平時關(guān)閉LED模擬輸入Mega2560有16個模擬輸入,即引腳A0~A15,每個模擬輸入提供10位分辨率(10位二進(jìn)制數(shù)表示),即輸入有1024個不同的數(shù)值。默認(rèn)情況下,模擬電壓的測量范圍是0~5VVIN當(dāng)使用外部電源供電時,該引腳可以輸出電源電壓5V5V電源引腳,當(dāng)使用USB供電時,直接輸出USB提供的5V電壓,使用外部電源供電時,輸出穩(wěn)壓后的5V電壓3.3V3.3V電源引腳,最大輸出50mA電流GND接地引腳RESET復(fù)位端口,復(fù)位按鍵按下時,會使該端口接到低電平,從而讓Arduino復(fù)位ArduinoMega2560引腳說明任務(wù)1.2Arduino相關(guān)電子元器件預(yù)備知識——電阻器、電容器、電感器深入學(xué)習(xí)——晶體二極管與三極管的介紹引導(dǎo)實踐——面包板、杜邦線、萬用表的使用任務(wù)1.2Arduino相關(guān)電子元器件1.2.1預(yù)備知識——電阻器、電容器、電感器電阻器(Resistor)通常稱為電阻,其是一個限流元件,通過它可以限制所連支路的電流大小。電阻值表示電阻對電流阻擋力的大小,電阻值不能改變的稱為固定電阻器,電阻值可變的稱為電位器或可變電阻器。電阻的主要物理特性是變電能為熱能,因此可認(rèn)為電阻是一個耗能元件,電流經(jīng)過它時產(chǎn)生內(nèi)能,電阻則在電路中起到分壓、分流的作用。電阻由電阻體、骨架和引出端三部分組成,其中只有電阻體可決定電阻的阻值,對于截面均勻的電阻體,電阻值的計算公式如下。ρ表示電阻材料的電阻率(歐·厘米);L表示電阻體的長度(厘米);A表示電阻體的橫截面積(平方厘米)。任務(wù)1.2Arduino相關(guān)電子元器件1.2.1預(yù)備知識——電阻器、電容器、電感器顏色第一環(huán)第二環(huán)第三環(huán)第四環(huán)黑0010?0–棕1110?1–紅2210?2–橙3310?3–黃4410?4–綠5510?5–藍(lán)6610?6–紫7710?7–灰8810?8–白9910?9–金––10?-1±5%銀––10?-2±10%色標(biāo)法——四環(huán)電阻四環(huán)電阻的第一個顏色環(huán)表示十位數(shù)字,第二個顏色環(huán)表示個位數(shù)字,第三個顏色環(huán)表示乘數(shù)倍,第四個顏色環(huán)表示誤差。如電阻的色環(huán)分別為紅、橙、黑、金,則該電阻的阻值大小為23*10?0=23Ω(±5%)。其他環(huán)數(shù)的電阻表示方式與上述方式類似。任務(wù)1.2Arduino相關(guān)電子元器件1.2.1預(yù)備知識——電阻器、電容器、電感器

一個導(dǎo)體被另一個導(dǎo)體包圍,或者由一個導(dǎo)體發(fā)出的電場線全部終止在另一個導(dǎo)體的導(dǎo)體系,稱為電容器(Capacitor)。電容器是存儲電量和電能的元件,其基本結(jié)構(gòu)為間隔對置的2個電極(金屬板)以及電介質(zhì),電介質(zhì)可以是空氣、紙張、塑料或其他不導(dǎo)電并能防止兩個金屬極相互接觸的物質(zhì)。當(dāng)兩個電極上被施加直流電壓后,電子瞬間聚集早其中一個電極上,該電極帶負(fù)電,另一電極則帶正電,這種狀態(tài)在斷掉直流電壓后依舊存在,此時兩個電極之間存積了電荷。表示電容器存積電荷數(shù)量的指標(biāo)稱為電容量。任務(wù)1.2Arduino相關(guān)電子元器件1.2.1預(yù)備知識——電阻器、電容器、電感器陶瓷電容器

電容量的單位為法拉(F,簡稱法),標(biāo)記為C。常用的電容單位有毫法(mF)、微法(μF)、納法(nF)以及皮法(pF)等,以千進(jìn)制進(jìn)行換算。電容計算公式

ε表示電介質(zhì)的電容率(F/m);S表示電極面積(m^2);d表示電極間距離(m)。任務(wù)1.2Arduino相關(guān)電子元器件1.2.1預(yù)備知識——電阻器、電容器、電感器

電感器(Inductor)是能夠?qū)㈦娔苻D(zhuǎn)換為磁能進(jìn)行存儲的元件。電感器是由導(dǎo)線繞制而成的線圈,當(dāng)直流信號通過線圈時,電阻就是導(dǎo)線本身的電阻,當(dāng)交流信號通過線圈時,線圈兩端將會產(chǎn)生自感電動勢(自感),自感電動勢的方向與外加電壓的方向相反,阻礙交流的通過。因此,電感器的特性與電容器的特性正好相反,它具有阻交流、通直流的特性。當(dāng)兩個電感線圈互相靠近時,一個電感線圈的磁場變化將影響另一個電感線圈,這種影響稱為互感。電感是自感與互感的總稱,其單位是亨利(H,簡稱亨),標(biāo)記為L。其他單位如毫亨(mH)或微亨(μH),以千進(jìn)制進(jìn)行換算。電感器

電感在電路中最常見的作用就是與電容一起,組成LC濾波電路。任務(wù)1.2Arduino相關(guān)電子元器件1.2.2深入學(xué)習(xí)——晶體二極管與三極管介紹

晶體二極管(Diode)簡稱二級管,是由半導(dǎo)體材料制作而成的一種電子元件。它由兩個電極組成,一個為陽極,一個為陰極。二極管具有單向?qū)ㄐ?,即?dāng)陽極接電源正極,陰極接電源負(fù)極時,施加在其上的電壓稱為正向電壓,二極管導(dǎo)通,反之二極管處于截止?fàn)顟B(tài)。

二極管本質(zhì)是一個由P型半導(dǎo)體和N型半導(dǎo)體形成的PN結(jié),在其界面處兩側(cè)形成了空間電荷層,并且建有自建電場,當(dāng)不存在外加電壓時,PN結(jié)兩邊截流子濃度差引起的擴(kuò)展電流和自建電場引起的偏移電流相等而處于電平衡狀態(tài)。當(dāng)產(chǎn)生正向電壓偏置時,外界電場與自建電場的互相抑消作用使截流子的擴(kuò)展電流增加引起了正向電流(導(dǎo)通)。當(dāng)產(chǎn)生反向電壓偏置時,外界電場與自建電場進(jìn)一步加強(qiáng),形成在一定反向電壓范圍內(nèi)與反向偏置電壓值無關(guān)的反向飽和電流。當(dāng)外加的反向電壓高到一定程度時,PN結(jié)空間電荷層中的電場強(qiáng)度達(dá)到臨界值產(chǎn)生載流子的倍增過程,產(chǎn)生大量電子空穴對,產(chǎn)生了數(shù)值很大的反向擊穿電流,稱為二極管的擊穿現(xiàn)象。發(fā)光二極管任務(wù)1.2Arduino相關(guān)電子元器件1.2.2深入學(xué)習(xí)——晶體二極管與三極管介紹

三極管全稱為半導(dǎo)體三極管或晶體三極管,是一種控制電流的半導(dǎo)體器件,具有放大電流的作用。三極管是在一塊半導(dǎo)體基片上制作兩個相距很近的PN結(jié),兩個PN結(jié)將整塊半導(dǎo)體分為三部分,中間部分是基極(B),兩側(cè)部分分別是發(fā)射極(E)和集電極(C),排列方式有PNP與NPN兩種。三極管具有放大作用,通過控制基極電流I_B可改變集電極到發(fā)射極的電流I_CE,且滿足I_CE=βI_B,β表示三極管的放大倍數(shù),發(fā)射極箭頭表示電流的的方向。NPN型三極管:集電極電流I_C與基極電流I_B流入三極管,發(fā)射極電流I_E流出三極管,滿足I_C+I_B=I_E。NPN型三極管導(dǎo)通條件為:集電極正電壓,發(fā)射極負(fù)電壓,基極電壓高于發(fā)射極電壓0.2~0.7V,三極管達(dá)到導(dǎo)通條件。PNP型三極管:集電極電流I_C與基極電流I_B流出三極管,發(fā)射極電流I_E流入三極管,同樣滿足I_C+I_B=I_E。PNP型三極管導(dǎo)通條件為:集電極負(fù)電壓,發(fā)射極正電壓,基極電壓低于發(fā)射極電壓0.2~0.7V,三極管達(dá)到導(dǎo)通條件。任務(wù)1.2Arduino相關(guān)電子元器件1.2.3引導(dǎo)實踐——面包板、杜邦線、萬用表的使用

面包板使用熱固性酚醛樹脂制造而成,板底有金屬條,在板上對應(yīng)位置打孔使得元件插入孔中時能夠與金屬條接觸,從而達(dá)到導(dǎo)電的目的。各種電子元器件可根據(jù)需要隨意插入或拔出,免去了焊接的時間,而且元件可以重復(fù)使用。因此,面包板非常適合電子電路的組裝、調(diào)試、以及學(xué)習(xí)。面包板以中間的長凹槽為界分為上下兩部分,每一個部分中,同一豎列的5個插孔被金屬片連接,但不同豎列之間的插孔之間是絕緣的;上下兩個橫行中,每5個插孔被金屬片連接,且相鄰的5組同樣是導(dǎo)通的。不同大小的面包板連通存在差異,但基本的連通原理是一致的任務(wù)1.2Arduino相關(guān)電子元器件1.2.3引導(dǎo)實踐——面包板、杜邦線、萬用表的使用

杜邦線是由美國杜邦公司生產(chǎn)的有特殊效用的縫紉線。杜邦線可用于實驗板的引腳擴(kuò)展,通過該線可以快速地連接各個模塊與Arduino開發(fā)板,無需焊接即可進(jìn)行電路實驗。杜邦線接頭有兩種形式:插孔與插針。根據(jù)不同的用途,接頭可以用3種組合形式:兩端都是插孔,兩端都是插針,一端插針一端插孔。任務(wù)1.2Arduino相關(guān)電子元器件1.2.3引導(dǎo)實踐——面包板、杜邦線、萬用表的使用

萬用表又可以稱為復(fù)用表、多用表等,是一種多功能、多量程的測量儀表。萬用表按顯示方式可分為指針萬用表和數(shù)字萬用表。一般萬用表可測量直流電流、直流電壓、交流電流、交流電壓、電阻和音頻電平等,有的萬用表還可以測量電容量、電感量以及半導(dǎo)體的一些參數(shù)等。

萬用表有一個多檔位的旋轉(zhuǎn)開關(guān),用來選擇測量的項目和量程。常用的數(shù)字萬用表有2個絕緣探針表筆和4個測量插孔,表筆分為紅、黑兩種,紅色表筆接正極,黑色表筆接負(fù)極。

萬用表使用時需要將黑色表筆插入標(biāo)有“COM”的插孔,測量電壓和電阻時將紅色表筆插入標(biāo)有“VΩ”的插孔,然后將兩個表筆并聯(lián)到被測元件兩邊;測量電流時將根據(jù)測量的大小將紅色表筆插入標(biāo)有類似“mA/μA”的插孔,然后將兩個表筆串聯(lián)到被測回路中。任務(wù)1.3Arduino

IDE1.3.1預(yù)備知識——ArduinoIDE安裝Arduino官網(wǎng)提供了EXE和ZIP兩種版本供開發(fā)者下載,EXE安裝版無需再進(jìn)行其他安裝,ZIP壓縮包解壓后可直接使用,但需要自行安裝驅(qū)動程序。ArduinoIDE官網(wǎng)下載任務(wù)1.3Arduino

IDE1.3.1預(yù)備知識——ArduinoIDE安裝例:下載可執(zhí)行文件arduino-1.8.16-windows.exe,雙擊該文件,啟動安裝。任務(wù)1.3Arduino

IDE1.3.1預(yù)備知識——ArduinoIDE安裝安裝路徑任務(wù)1.3Arduino

IDE1.3.1預(yù)備知識——ArduinoIDE安裝ArduinoIDE所需的各種驅(qū)動安裝任務(wù)1.3Arduino

IDE1.3.2深入學(xué)習(xí)——ArduinoIDE功能概述ArduinoIDE界面包括菜單工具欄、功能區(qū)、文本編輯器、消息區(qū)、文本控制臺以及串口監(jiān)視器6個核心功能區(qū)。其中,文本控制臺用來顯示IDE的輸出信息,如錯誤消息等;消息區(qū)用來顯示保存、上傳以及出錯時的反饋信息。任務(wù)1.3Arduino

IDE1.3.3引導(dǎo)實踐——ArduinoIDE的使用說明連接Arduino開發(fā)板編寫項目程序選擇開發(fā)板類型與端口上傳程序使用USB轉(zhuǎn)UART線連接開發(fā)板與PC機(jī),USB數(shù)據(jù)線可實現(xiàn)供電與通信的功能編寫項目程序單擊“工具”選項,在子菜單中的開發(fā)板選項中,選擇對應(yīng)的開發(fā)板;單擊“工具”選項,在子菜單中的端口選項中,選擇USB轉(zhuǎn)UART線連接后對應(yīng)的端口單擊“項目”選項,選擇上傳功能(同時編譯)任務(wù)1.4Arduino仿真軟件1.4.1預(yù)備知識——基礎(chǔ)仿真軟件介紹

VirtualBreadboard(VBB),中文直譯為“虛擬面包板”,是一款專門的Arduino仿真軟件。該軟件主要是通過單片機(jī)來實現(xiàn)嵌入式軟件的模擬和開發(fā)環(huán)境,不但包括所有Arduino的樣例電路,可以實現(xiàn)面包板電路的設(shè)計與布置,還包括所有樣例程序,可實現(xiàn)對程序的仿真調(diào)試。任務(wù)1.4Arduino仿真軟件1.4.1預(yù)備知識——基礎(chǔ)仿真軟件介紹VBB可以模擬Arduino連接各種電子模塊,如舵機(jī)、數(shù)碼管、各種傳感器等。這些部件都可以直接使用,也可以通過組合,設(shè)計出更加復(fù)雜的電路和模塊。VBB可以實時在軟件上看到LED、LCD等可視模塊的變化,具有模擬交互效果,同時可以確保安全(不會出現(xiàn)芯片燒毀、短路等問題)。任務(wù)1.4Arduino仿真軟件1.4.2深入學(xué)習(xí)——進(jìn)階仿真軟件介紹Fritzing是一款支持多國語言的電路設(shè)計軟件,其可以提供面包板、原理圖、PCB三種視圖設(shè)計。無論開發(fā)者采用哪種視圖進(jìn)行電路設(shè)計,軟件都會自動化同步其他兩種視圖,還可以生成制板廠生產(chǎn)所需要的Greber文件、PDF、圖以及CAD格式文件。任務(wù)1.4Arduino仿真軟件1.4.3引導(dǎo)實踐——Proteus仿真軟件的使用Proteus軟件是英國LabCenterElectronics公司出版的EDA工具軟件,是一款強(qiáng)大的嵌入式系統(tǒng)仿真軟件,該軟件可以實現(xiàn)從原理圖設(shè)計、編程調(diào)試、系統(tǒng)仿真到PCB設(shè)計,實現(xiàn)從概念到產(chǎn)品的完整設(shè)計。Arduino基礎(chǔ)編程函數(shù)運(yùn)算符第2單元數(shù)據(jù)類型控制語句Arduino編程語言基于C、C++語言實現(xiàn),并進(jìn)行了更加深入地封裝,這大大降低了開發(fā)者的開發(fā)難度。本章將以C語言編程為基礎(chǔ),介紹Arduino編程需要涉及的基礎(chǔ)應(yīng)用知識,如數(shù)據(jù)類型、函數(shù)、控制語句等。了解數(shù)據(jù)類型與常量、變量的概念熟悉運(yùn)算符的定義與功能掌握Arduino編程基礎(chǔ)函數(shù)熟練Arduino編程基礎(chǔ)控制語句任務(wù)2.1數(shù)據(jù)類型預(yù)備知識——數(shù)據(jù)類型概述深入學(xué)習(xí)——常量與數(shù)據(jù)類型深入學(xué)習(xí)——變量與數(shù)據(jù)類型引導(dǎo)實踐——常量與變量類型轉(zhuǎn)換2.1數(shù)據(jù)類型2.1.1預(yù)備知識——數(shù)據(jù)類型概述

在計算機(jī)運(yùn)算時,需要指定數(shù)據(jù)的類型。不同于數(shù)學(xué)中的數(shù)值(數(shù)值不分類型),計算機(jī)中的數(shù)據(jù)都是存放在存儲單元中的,是具體存在的。存儲單元由有限的字節(jié)構(gòu)成,每一個存儲單元中存放數(shù)據(jù)的范圍是有限的,不可能存放“無窮大”數(shù)或循環(huán)小數(shù)。2.1數(shù)據(jù)類型2.1.2深入學(xué)習(xí)——常量與數(shù)據(jù)類型

整型常量指的是直接使用的整型常數(shù),如1、2等。整型常量可以是長整型、短整型、有符號整型、無符號整型。

如果整型的大小為32bit(4個字節(jié)),則無符號整型的取值范圍為0~4294967295(232-1),而有符號形式的取值范圍為-2147483648~+2147483647。無符號短整型的取值范圍為0~65535(216-1),而有符號短整型的取值范圍是-32768~+32767。

在編寫整型常量時,可以在常量后添加符號進(jìn)行修飾,L表示該常量為長整型,U表示該常量為無符號整型,如下所示。100L500U整型常量可以使用不同進(jìn)制形式進(jìn)行表示,如二進(jìn)制、八進(jìn)制、十進(jìn)制、十六進(jìn)制。b101(二進(jìn)制)、012(八進(jìn)制數(shù))、12(十進(jìn)制數(shù))、0x12(十六進(jìn)制數(shù))2.1數(shù)據(jù)類型2.1.2深入學(xué)習(xí)——常量與數(shù)據(jù)類型

實型常量即浮點(diǎn)型常量,由整數(shù)部分和小數(shù)部分組成,實型常量表示數(shù)據(jù)的形式有兩種。123.45//科學(xué)計數(shù)法12e2//指數(shù)方式顯示12e2表示1200,如果為12e-2,則表示0.12

在編寫實型常量時,需要在常量后添加符號F或L進(jìn)行修飾,F(xiàn)表示該常量為float單精度類型,L表示該常量為longdouble長雙精度類型。如果不在常量后添加符號,則默認(rèn)實型常量為double雙精度類型。1.23e2F//單精度類型3.458e-1L//長雙精度類型1.23e2//雙精度類型2.1數(shù)據(jù)類型2.1.2深入學(xué)習(xí)——常量與數(shù)據(jù)類型

在Arduino編程中,常量通常被設(shè)定為預(yù)定義的表達(dá)式,用于提高程序的閱讀性。例如,表示邏輯的true以及false(Bool常量),表示電平變化的HIGH以及LOW。false通常被定義為0,表示不成立。true通常被定義1,表示成立,但true有比較廣的定義,其他非零值也可以被定義為true。對數(shù)字引腳進(jìn)行讀寫操作時,只有兩種值,即HIGH以及LOW。HIGH表示的含義對于輸入與輸出引腳是不同的,當(dāng)配置引腳為輸入時,如果引腳上的電壓大于3.0V(5.0V的開發(fā)板),則返回HIGH;當(dāng)配置引腳為輸出時,設(shè)置引腳為HIGH,則引腳輸出電壓為5.0V(5.0V的開發(fā)板)。LOW表示的含義同樣對于輸入與輸出引腳是不同的,當(dāng)配置引腳為輸入時,如果引腳上的電壓小于1.5V(5.0V的開發(fā)板),則返回LOW;當(dāng)配置引腳為輸出時,設(shè)置引腳為LOW,則引腳輸出電壓為0V。2.1數(shù)據(jù)類型2.1.3深入學(xué)習(xí)——變量與數(shù)據(jù)類型

bool/booleanchar實型變量整型變量arraytrue與false,每個bool類型的變量占用一個字節(jié),boolean是Arduino定義的bool的非標(biāo)準(zhǔn)的類型別名字符型變量是用來存儲字符常量的變量。將一個字符常量存儲到一個字符變量,其本質(zhì)是將一個字符的ASCII碼值(無符號整數(shù))存儲到內(nèi)存單元中。實型變量也稱為浮點(diǎn)型變量,用來存儲實型數(shù)值,實型變量根據(jù)實型的精度可以分為單精度類型、雙精度類型和長雙精度類型三類整型變量指的是用來存儲整型數(shù)值的變量array表示數(shù)組類型,數(shù)組即同類型變量的集合,是典型的構(gòu)造數(shù)據(jù)類型之一2.1數(shù)據(jù)類型2.1.4引導(dǎo)實踐——常量與變量類型轉(zhuǎn)換

在進(jìn)行運(yùn)算時,不同類型的數(shù)據(jù)需要先轉(zhuǎn)換為同一類型,然后再進(jìn)行運(yùn)算。在C語言編程中,遇到數(shù)據(jù)類型轉(zhuǎn)換時,可歸納為3種轉(zhuǎn)換方式:自動轉(zhuǎn)換、賦值轉(zhuǎn)換、強(qiáng)制轉(zhuǎn)換。不同類型數(shù)據(jù)轉(zhuǎn)換為同一數(shù)據(jù)類型,其自動轉(zhuǎn)換的規(guī)則。類型轉(zhuǎn)換總是從低級向高級轉(zhuǎn)換,如float型數(shù)據(jù)自動轉(zhuǎn)換成double型;char與short型數(shù)據(jù)自動轉(zhuǎn)換成int型;int型與double型數(shù)據(jù)運(yùn)算,直接將int型轉(zhuǎn)換成double型;int型與unsigned型數(shù)據(jù),直接將int型轉(zhuǎn)換成unsigned型;int型與long型數(shù)據(jù),直接將int型轉(zhuǎn)換成long型。2.1數(shù)據(jù)類型2.1.4引導(dǎo)實踐——常量與變量類型轉(zhuǎn)換

如果賦值運(yùn)算符兩側(cè)的類型不同,但都是數(shù)值型或字符型時,在賦值時需要進(jìn)行類型轉(zhuǎn)換。如將整型數(shù)據(jù)賦給單、雙精度變量時,數(shù)值不變,但以浮點(diǎn)數(shù)形式存儲到變量中;將實型數(shù)據(jù)(包括單、雙精度)賦給整型變量時,舍棄實數(shù)的小數(shù)部分;同類型的短數(shù)據(jù)賦值給長變量,自動轉(zhuǎn)換是正確的;同類型的長數(shù)據(jù)給短變量賦值可能出錯。charch='A';inta,b=3;floatx1,x2=2.5;a=ch;x1=a;b=x2;

變量a為整型,其值為字符'A'的ASCII碼值65;變量x1為單精度型,其值為65.00(保留兩位小數(shù));變量b為整型,其值由2.5轉(zhuǎn)換為2。2.1數(shù)據(jù)類型2.1.4引導(dǎo)實踐——常量與變量類型轉(zhuǎn)換

利用強(qiáng)制類型轉(zhuǎn)換運(yùn)算符可以將一個表達(dá)式轉(zhuǎn)換成所需類型(double)x(int)(a+b)(float)(10%3)

第1行表達(dá)式表示將變量x的數(shù)據(jù)類型轉(zhuǎn)換為double類型;第2行表達(dá)式表示將a+b的值轉(zhuǎn)換為整型;第3行表達(dá)式表示將10%3的值轉(zhuǎn)換為float類型。2.2運(yùn)算符2.2.1預(yù)備知識——基礎(chǔ)運(yùn)算符

運(yùn)算符含義舉例結(jié)果-負(fù)號運(yùn)算符-2-2+正號運(yùn)算符+2+2*乘法運(yùn)算符2*36/除法運(yùn)算符5/22%取模運(yùn)算符5%21+加法運(yùn)算符2+35-減法運(yùn)算符3-21符號功能符號功能>大于<=小于等于>=大于等于==等于<小于!=不等于

算術(shù)運(yùn)算符主要用來實現(xiàn)各種數(shù)學(xué)運(yùn)算,包括兩個單目運(yùn)算符(正、負(fù)),5個雙目運(yùn)算符,包括加法、減法、乘法、除法、取余

關(guān)系運(yùn)算符包括大于、大于等于、小于、小于等于、等于和不等于2.2運(yùn)算符2.2.1預(yù)備知識——基礎(chǔ)運(yùn)算符

符號功能&&邏輯與||邏輯或!單目邏輯非

邏輯運(yùn)算符用于表達(dá)式執(zhí)行判斷真或假并返回真或假運(yùn)算符含義&按位與|按位或^按位異或~取反<<左移>>右移

位運(yùn)算即對二進(jìn)制位進(jìn)行計算,對位進(jìn)行操作的運(yùn)算符2.2運(yùn)算符2.2.2深入學(xué)習(xí)——復(fù)合運(yùn)算符

運(yùn)算符含義舉例結(jié)果+=加法賦值運(yùn)算符a+=1a+1-=減法賦值運(yùn)算符a-=1a–1*=乘法賦值運(yùn)算符a*=1a*1/=除法賦值運(yùn)算符a/=1a/1%=取模賦值運(yùn)算符a%=1a%1>>=按位右移賦值運(yùn)算符a>>=1a>>1<<=按位左移賦值運(yùn)算符a<<=1a<<1&=按位與賦值運(yùn)算符a&=1a&1|=按位或賦值運(yùn)算符a|=1a|1^=按位異或賦值運(yùn)算符a^=1a^1賦值運(yùn)算符與其它運(yùn)算符組合,可以構(gòu)成復(fù)合賦值運(yùn)算符,C語言中一共有10種復(fù)合賦值運(yùn)算符2.2運(yùn)算符2.2.3引導(dǎo)實踐——運(yùn)算符的使用

在一個表達(dá)式中,可能包含有多個不同的運(yùn)算符以及不同數(shù)據(jù)類型的數(shù)據(jù)對象。由于表達(dá)式有多種運(yùn)算,不同的結(jié)合順序可能得到不同的結(jié)果甚至運(yùn)算錯誤。因此,在表達(dá)式中含多種運(yùn)算時,必須按一定順序進(jìn)行結(jié)合,才能保證運(yùn)算的合理性和結(jié)果的正確性。表達(dá)式的結(jié)合次序取決于表達(dá)式中各種運(yùn)算符的優(yōu)先級,優(yōu)先級高的運(yùn)算符先結(jié)合,優(yōu)先級低的運(yùn)算符后結(jié)合。每種同類型的運(yùn)算符都有內(nèi)部的運(yùn)算符優(yōu)先級,不同類型的運(yùn)算符之間也有相應(yīng)的優(yōu)先級順序。一個表達(dá)式中既可以包括相同類型的運(yùn)算符,也可以包括不同類型的運(yùn)算符。優(yōu)先級運(yùn)算符名稱或含義使用形式結(jié)合方向說明1[]數(shù)組下標(biāo)數(shù)組名[常量表達(dá)式]自左向右()圓括號(表達(dá)式)、函數(shù)名(形參表).成員選擇(對象)對象.成員名->成員選擇(指針)對象指針->成員名2.2運(yùn)算符2.2.3引導(dǎo)實踐——運(yùn)算符的使用

2-負(fù)號運(yùn)算符-表達(dá)式從右向左單目運(yùn)算符(類型)強(qiáng)制類型轉(zhuǎn)換(數(shù)據(jù)類型)表達(dá)式++自增運(yùn)算符++變量名、變量名++單目運(yùn)算符--自減運(yùn)算符--變量名、變量名--單目運(yùn)算符*取值運(yùn)算符*指針變量單目運(yùn)算符&取地址運(yùn)算符&變量名單目運(yùn)算符!邏輯非運(yùn)算符!表達(dá)式單目運(yùn)算符~按位取反運(yùn)算符~表達(dá)式單目運(yùn)算符sizeof長度運(yùn)算符sizeof(表達(dá)式)3/除表達(dá)式/表達(dá)式從左向右雙目運(yùn)算符*乘表達(dá)式*表達(dá)式雙目運(yùn)算符%取余整型表達(dá)式%整型表達(dá)式雙目運(yùn)算符4+加表達(dá)式+表達(dá)式從左向右雙目運(yùn)算符-減表達(dá)式-表達(dá)式雙目運(yùn)算符5<<左移變量<<表達(dá)式從左向右雙目運(yùn)算符>>右移變量>>表達(dá)式雙目運(yùn)算符2.2運(yùn)算符2.2.3引導(dǎo)實踐——運(yùn)算符的使用

6>大于表達(dá)式>表達(dá)式從左向右雙目運(yùn)算符>=大于等于表達(dá)式>=表達(dá)式雙目運(yùn)算符<小于表達(dá)式<表達(dá)式雙目運(yùn)算符<=小于等于表達(dá)式<=表達(dá)式雙目運(yùn)算符7==等于表達(dá)式==表達(dá)式從左向右雙目運(yùn)算符!=不等于表達(dá)式!=表達(dá)式雙目運(yùn)算符8&按位與表達(dá)式&表達(dá)式從左向右雙目運(yùn)算符9^按位異或表達(dá)式^表達(dá)式從左向右雙目運(yùn)算符10|按位或表達(dá)式|表達(dá)式從左向右雙目運(yùn)算符11&&邏輯與表達(dá)式&&表達(dá)式從左向右雙目運(yùn)算符12||邏輯或表達(dá)式||表達(dá)式從左向右雙目運(yùn)算符13?:條件運(yùn)算符表達(dá)式1?表達(dá)式2:表達(dá)式3從右向左三目運(yùn)算符2.2運(yùn)算符2.2.3引導(dǎo)實踐——運(yùn)算符的使用

14=賦值運(yùn)算符變量=表達(dá)式從右向左/=除后賦值變量/=表達(dá)式*=乘后賦值變量*=表達(dá)式%=取模后賦值變量%=表達(dá)式+=加后賦值變量+=表達(dá)式-=減后賦值變量-=表達(dá)式<<=左移后賦值變量<<=表達(dá)式>>=右移后賦值變量>>=表達(dá)式&=按位與后賦值變量&=表達(dá)式^=按位異或后賦值變量^=表達(dá)式|=按位或后賦值變量|=表達(dá)式15,逗號運(yùn)算符表達(dá)式,表達(dá)式,…從左向右2.3函數(shù)2.3.1預(yù)備知識——數(shù)學(xué)函數(shù)

函數(shù)說明max()計算兩個數(shù)值中的較大值min()計算兩個數(shù)中的最小值map()將一個范圍內(nèi)的整數(shù)映射為另一個范圍內(nèi)的整數(shù)abs()用來獲取一個數(shù)的絕對值constrain()用來將值歸化到某個范圍內(nèi)sqrt()計算一個數(shù)的平方根sq()計算一個數(shù)的平方2.3函數(shù)2.3.2預(yù)備知識——時間函數(shù)

函數(shù)說明delay()用來延遲一段時間,其單位為毫秒(ms)delayMicroseconds()用來延遲一段時間,其單位為微秒(μs)millis()用來獲取程序運(yùn)行的毫秒數(shù)micros()用來獲取程序運(yùn)行的微秒數(shù)2.3函數(shù)2.3.3預(yù)備知識——位操作函數(shù)

函數(shù)說明bit()計算指定位的二進(jìn)制權(quán)值bitClear()用來清零指定的二進(jìn)制位bitRead()用來讀取指定變量的指定位的值bitSet()用來將指定變量的指定位設(shè)置為1bitWrite()用來為指定變量的指定位賦值2.3函數(shù)2.3.4預(yù)備知識——字符判斷函數(shù)

函數(shù)說明isAlpha()用來判斷一個字符是否為字母isAlphaNumeric()用來判斷一個字符是否為字母或數(shù)字isAscii()用來判斷一個字符是否為ASCII碼isDigit()用來判斷一個字符是否為數(shù)字isLowerCase()用來判斷一個字符是否為小寫字母isUpperCase()用來判斷一個字符是否為大寫字母isPunct()用來判斷一個字符是否為標(biāo)點(diǎn)符號isSpace()用來判斷一個字符是否為空格符2.3函數(shù)2.3.5深入學(xué)習(xí)——基本結(jié)構(gòu)函數(shù)

Arduino程序的基本結(jié)構(gòu)包含兩個函數(shù),分別為setup()、loop()函數(shù)。

當(dāng)程序開始執(zhí)行時,setup()函數(shù)被調(diào)用。因此,setup()函數(shù)也被稱為初始化函數(shù),可用于變量初始化、設(shè)置引腳模式等操作。setup()函數(shù)在Arduino開發(fā)板上電后,只執(zhí)行一次。setup()函數(shù)執(zhí)行結(jié)束后,將會執(zhí)行l(wèi)oop()函數(shù),loop()函數(shù)為循環(huán)執(zhí)行函數(shù),函數(shù)中的代碼稱為循環(huán)體。2.3函數(shù)2.3.6引導(dǎo)實踐——使用函數(shù)實現(xiàn)程序設(shè)計

voidsetup(){Serial.begin(9600);while(!Serial){;}}voidloop(){while(Serial.available()){bytec=Serial.read();if(isDigit(c)){byteval=map(c,1,10,50,100);Serial.println(val);}}delay(500);}初始化硬件串口,并檢測串口是否準(zhǔn)備就緒。判斷串口是否有數(shù)據(jù)。讀取從串口輸入的數(shù)據(jù),一次讀取1個字節(jié)的數(shù)據(jù)。字符判斷函數(shù),判斷讀取的字符是否為數(shù)字。數(shù)學(xué)函數(shù),將讀取的數(shù)字從1~10范圍的值轉(zhuǎn)換為50~100范圍之間的值。輸出轉(zhuǎn)換之后的值。時間函數(shù),表示延遲0.5秒。2.4控制語句2.4.1預(yù)備知識——分支語句

if(condition){

語句1}else{

語句2}當(dāng)condition為真時,執(zhí)行語句1,否則執(zhí)行else部分中的語句2if(condition1){

語句1}elseif(condition2){

語句2}else{

語句3}當(dāng)condition1為真時,執(zhí)行語句1,否則判斷condition2,當(dāng)condition2為真時,執(zhí)行語句2,否則執(zhí)行else部分中的語句32.4控制語句2.4.1預(yù)備知識——分支語句

switch(表達(dá)式){case<表達(dá)式1>:

語句1;break;case<表達(dá)式2>:

語句2;break;......case<表達(dá)式n>:

語句n;break;default:

語句n+1;}當(dāng)switch后面圓括號中表達(dá)式的值與某個case后面的常量表達(dá)式的值相等時,則執(zhí)行該case后面的語句,直到遇到break語句為止。如果與所有case的常量表達(dá)式的值都不相等時,則執(zhí)行default后面的語句。2.4控制語句2.4.2預(yù)備知識——循環(huán)語句

while(condition){

循環(huán)體;}while語句首先會檢驗括號中的循環(huán)條件,當(dāng)condition為真時,執(zhí)行其后的循環(huán)體。每執(zhí)行一遍循環(huán),程序都將回到while語句處,重新檢驗條件是否滿足。如果一開始condition為假,則不執(zhí)行循環(huán)體,直接跳過該段代碼。do{

循環(huán)體;}while(condition);do…while語句與while語句類似,它們之間的區(qū)別在于:while語句是先判斷循環(huán)條件的真假,再決定是否執(zhí)行循環(huán)體,而do…while語句則先執(zhí)行循環(huán)體,然后再判斷循環(huán)條件的真假。因此,do…while語句中的循環(huán)體至少要被執(zhí)行一次。2.4控制語句2.4.2預(yù)備知識——循環(huán)語句

for(賦初始值;循環(huán)條件;迭代語句){

語句1;......

語句n;}當(dāng)執(zhí)行for循環(huán)語句時,程序首先指定賦初始值操作,接著執(zhí)行循環(huán)條件,如果循環(huán)條件的值為真時,程序執(zhí)行循環(huán)體內(nèi)的語句,如果循環(huán)條件的值為假,程序則直接跳出循環(huán)。執(zhí)行完循環(huán)體內(nèi)的語句后,程序會執(zhí)行迭代語句,然后再執(zhí)行循環(huán)條件并判斷,如果為真,則繼續(xù)執(zhí)行循環(huán)體內(nèi)的語句,如此反復(fù),直到循環(huán)條件判斷為假,退出循環(huán)。2.4控制語句2.4.3深入學(xué)習(xí)——轉(zhuǎn)移語句

break語句用來終止并跳出循環(huán),break語句不能用于循環(huán)語句和switch語句之外的任何其他語句中,當(dāng)用在switch語句時,同樣使程序跳出switch語句。

continue語句用來結(jié)束本次循環(huán),即跳出本次循環(huán)中尚未執(zhí)行的部分,繼續(xù)執(zhí)行下一次循環(huán)操作,而非直接跳出全部循環(huán)。

goto語句是一種無條件轉(zhuǎn)移語句,goto語句多用于跳出多重循環(huán)或程序調(diào)試判斷。2.4控制語句2.4.4引導(dǎo)實踐——使用控制語句實現(xiàn)程序設(shè)計

voidsetup(){inta=0;

while(a<=100){

if(a%3==0){

continue;

}Serial.println(a);a++;}}

voidloop(){

}執(zhí)行while循環(huán),判斷數(shù)值是否小于等于100。判斷輸入值是否能被3整除。執(zhí)行轉(zhuǎn)移語句,如果可以被3整除則跳出此次循環(huán)。輸出不能被3整除的數(shù)。增加1,繼續(xù)判斷下一個數(shù)。Arduino開發(fā)板接口及應(yīng)用IIC總線接口第3章串行通信接口外部中斷SPI總線接口數(shù)字I/O接口及應(yīng)用模擬I/O接口及應(yīng)用定時器中斷軟件模擬串口上機(jī)實踐Arduino開發(fā)板集成了各種接口,用來與其他模塊進(jìn)行信息交互,如數(shù)字I/O、模擬I/O、IIC、SPI接口等。ArduinoIDE為每一種接口提供了對應(yīng)的類庫函數(shù),通過這些函數(shù)可以實現(xiàn)對接口的控制。本單元將主要展示Arduino各種接口的編程及應(yīng)用。了解Arduino開發(fā)板接口工作原理熟練Arduino開發(fā)板接口類庫函數(shù)熟練Arduino接口基礎(chǔ)編程掌握Arduino接口編程應(yīng)用3.1數(shù)字I/O接口預(yù)備知識——數(shù)字I/O接口深入學(xué)習(xí)——數(shù)字I/O接口函數(shù)引導(dǎo)實踐——流水燈設(shè)計3.1數(shù)字I/O接口3.1.1預(yù)備知識——數(shù)字I/O接口數(shù)字I/O接口主要用來傳遞數(shù)字信號,數(shù)字信號是以0、1表示的電平不連續(xù)變化的信號,即以二進(jìn)制的形式表示的信號。在Arduino中,數(shù)字信號通過高低電平來表示,高電平為數(shù)字信號1,低電平為數(shù)字信號0。不同元件組成的數(shù)字電路,其電壓對應(yīng)的邏輯電平也不同。在TTL門電路中,通常將大于3.5V電壓視為邏輯高電平,用數(shù)字“1”表示;將小于0.3V的電壓規(guī)定為邏輯低電平,用數(shù)字“0”表示。數(shù)字電平從高電平變?yōu)榈碗娖降乃查g,稱為下降沿,從低電平變?yōu)楦唠娖降乃查g,稱為上升沿。3.1數(shù)字I/O接口3.1.1預(yù)備知識——數(shù)字I/O接口Arduino數(shù)字引腳可設(shè)置為三種模式,分別為輸入模式(INPUT)、輸出模式(OUTPUT)、輸入上拉模式(INPUT_PULLUP)。輸入模式特性輸出模式特性輸入上拉模式Arduino引腳默認(rèn)為輸入,用作輸入時不需要明確聲明。如果引腳設(shè)置為輸入模式時,并未指定引腳的狀態(tài),則引腳狀態(tài)是懸空的,即引腳狀態(tài)是隨機(jī)的(可高可低)。此時,可通過上拉電阻器使引腳保持高電平或者通過下拉電阻器使引腳保持低電平。

當(dāng)設(shè)置引腳為輸出模式時,其引腳為低阻狀態(tài),該引腳與其他電路或設(shè)備連接時,可以提供40mA的源電流,用來驅(qū)動某些傳感器。

當(dāng)設(shè)置為輸入上拉模式的引腳與傳感器的一端連接時,傳感器的另一端需要連接到GND,如連接一個開關(guān),當(dāng)開關(guān)斷開時,讀入高電平HIGH,當(dāng)開關(guān)連接時,讀入低電平LOW。3.1數(shù)字I/O接口3.1.2深入學(xué)習(xí)——數(shù)字I/O接口函數(shù)函數(shù)說明pinMode()設(shè)置數(shù)字引腳的模式digitalWrite()設(shè)置引腳為高電平或低電平digitalRead()讀取引腳的狀態(tài)shiftIn()通過串行的方式從引腳上讀入數(shù)據(jù)shiftOut()通過串行的方式從引腳上輸出數(shù)據(jù)tone()指定引腳輸出占空比為50%的方波noTone()用來停止引腳輸出的方波pulseIn()讀取一個引腳脈沖(高電平脈沖或低電平脈沖)的時間長度pulseInLong()處理持續(xù)時間較長的脈沖和受中斷影響的情況Arduino編程語言在C、C++語言的基礎(chǔ)上,提供了封裝類庫。封裝類庫中提供了很多函數(shù),對硬件操作細(xì)節(jié)進(jìn)行封裝(屏蔽了繁雜的寄存器配置)。開發(fā)者只需在程序中直接調(diào)用這些函數(shù)即可實現(xiàn)對硬件的控制。3.1數(shù)字I/O接口3.1.3引導(dǎo)實踐——流水燈設(shè)計流水燈設(shè)計:使用Arduino開發(fā)板中的數(shù)字引腳對LED燈進(jìn)行控制,實現(xiàn)流水燈的效果

實現(xiàn)流水燈設(shè)計需要使用多個LED燈,每一個LED燈與Arduino數(shù)字引腳連接需要有限流電阻,防止電流過大,LED燈燒壞。程序設(shè)計需要設(shè)置引腳的模式,然后依次控制電平高低,控制LED燈亮滅。仿真電路圖3.1數(shù)字I/O接口3.1.3引導(dǎo)實踐——流水燈設(shè)計設(shè)置數(shù)字引腳的工作模式為輸出模式設(shè)置數(shù)字引腳輸出高、低電平流水燈需要采用循環(huán)控制的方式適當(dāng)選擇延時,效果更明顯pinMode(led1,OUTPUT);digitalWrite(led1,HIGH);digitalWrite(led1,LOW);3.2模擬I/O接口預(yù)備知識——模擬I/O接口深入學(xué)習(xí)——模擬I/O接口函數(shù)引導(dǎo)實踐——變頻呼吸燈3.2模擬I/O接口3.2.1預(yù)備知識——模擬I/O接口生活中,人們接觸的信號大部分都是模擬信號,如溫濕度的變化、聲音大小等。模擬信號是用連續(xù)變化的物理量表示的信息。思考:模擬信號?

模擬輸入引腳是帶有ADC(Analog-to-DigitalConverter,模數(shù)轉(zhuǎn)換器)功能的引腳,它可以將外部輸入的模擬信號轉(zhuǎn)換為芯片運(yùn)算可以識別的數(shù)字信號,從而實現(xiàn)讀取模擬值的功能。

通過Arduino的模擬輸入引腳,可以實現(xiàn)從模擬量到數(shù)字量的轉(zhuǎn)換,即A/D轉(zhuǎn)換。Arduino板提供了10位A/D轉(zhuǎn)換器,將0V~5V的輸入電壓轉(zhuǎn)換為0~1023間的值(210-1),每一位對應(yīng)的電壓約為4.9mv(將5V電壓分為1024份)。3.2模擬I/O接口3.2.1預(yù)備知識——模擬I/O接口

與模擬輸入對應(yīng)的功能為模擬輸出功能,實現(xiàn)模擬值的輸出需要使用一種特殊的方式,即PWM(PulseWidthModulation,脈沖寬度調(diào)制)。PWM是一種通過數(shù)字方法得到模擬量結(jié)果的技術(shù),邏輯電平產(chǎn)生的方波(在高低電平之前切換的波形),通過改變信號的高電平持續(xù)時間,即可模擬0V~5V的之間的電壓值。在輸出的方波的周期中,高電平輸出時間的占比,稱為占空比。占空比越高,表示高電平持續(xù)的時間越長,其模擬的輸出電壓越高。通過設(shè)置占空比,即可調(diào)節(jié)輸出的模擬電壓值。3.2模擬I/O接口3.2.2深入學(xué)習(xí)——模擬I/O接口函數(shù)函數(shù)說明analogWrite()通過PWM的方式在指定引腳輸出模擬值analogRead()讀取并轉(zhuǎn)換指定模擬引腳上的電壓analogReference()配置模擬引腳的參考電壓3.2模擬I/O接口3.2.3引導(dǎo)實踐——變頻呼吸燈變頻呼吸燈:通過模擬輸出引腳實現(xiàn)呼吸燈的效果,并通過電位器控制呼吸燈的呼吸頻率。仿真電路圖

實現(xiàn)實現(xiàn)呼吸燈效果需要連續(xù)對模擬輸出引腳設(shè)置占空比,進(jìn)而產(chǎn)生連續(xù)的不同的輸出電壓值,控制LED燈的亮度。而LED燈的亮度變化頻率取決于設(shè)置輸出引腳占空比的間隔時間,如果間隔時間不變,則LED等亮度變化的頻率不變(呼吸頻率不變)。3.2模擬I/O接口3.2.3引導(dǎo)實踐——變頻呼吸燈設(shè)置輸出引腳占空比的間隔時間通過電位器實現(xiàn),電位器是一個可調(diào)電阻。

通過旋轉(zhuǎn)旋鈕改變2號腳位置,從而改變2號腳到兩端的阻值。假設(shè)將電位器的1、3號腳分別接到GND和3.3V,再通過模擬輸入引腳讀取電位器2號腳的輸出電壓,根據(jù)旋轉(zhuǎn)電位器的情況,2號腳的電壓會在0V~3.3V之間進(jìn)行變化。

通過程序設(shè)計判斷引腳2電壓的大小,并將其轉(zhuǎn)換為設(shè)置輸出引腳占空比的間隔時間。如果旋轉(zhuǎn)旋鈕,則2號腳的電壓值發(fā)生改變,設(shè)置輸出引腳占空比的間隔時間同樣發(fā)生改變。3.2模擬I/O接口3.2.3引導(dǎo)實踐——變頻呼吸燈

呼吸燈主要通過連續(xù)設(shè)置模擬輸出引腳的占空比實現(xiàn),連續(xù)設(shè)置的動作需要通過循環(huán)程序完成,而設(shè)置占空比的間隔時間由模擬輸入引腳的電壓值決定。intledPin=11;intpot=A0;inttime;voidsetup(){/*無需設(shè)置初始化,即無需設(shè)置引腳輸出狀態(tài)*/}

voidloop(){/*占空比逐漸變大,LED逐漸變亮*/for(intValue=0;Value<=255;Value+=5){analogWrite(ledPin,Value);/*設(shè)置占空比*//*讀取電位器的輸出電壓的轉(zhuǎn)換值,范圍為0~1023,除以5作為延時的時間*/分別定義變量,指定連接LED燈的模擬輸出引腳11,讀取電位器電壓的模擬輸入引腳A0。3.2模擬I/O接口3.2.3引導(dǎo)實踐——變頻呼吸燈time=analogRead(pot)/5;delay(time);/*定義設(shè)置占空比的間隔時間*/}/*占空比逐漸減小,LED逐漸變暗*/for(intValue=255;Value>=0;Value-=5){analogWrite(ledPin,Value);/*設(shè)置占空比*//*讀取電位器的輸出電壓的轉(zhuǎn)換值,范圍為0~1023,除以5作為延時的時間*/time=analogRead(pot)/5;delay(time);/*定義設(shè)置占空比的間隔時間*/}}通過for循環(huán)語句實現(xiàn)連續(xù)設(shè)置輸出引腳占空比(占空比變大),其中analogWrite()函數(shù)用來設(shè)置占空比,analogRead()函數(shù)用來讀取電位器的模擬電壓,決定設(shè)置占空比的間隔時間。通過for循環(huán)語句實現(xiàn)連續(xù)設(shè)置輸出引腳占空比,占空比逐漸減小。3.3串行通信接口預(yù)備知識——串行通信接口深入學(xué)習(xí)——串行通信接口函數(shù)引導(dǎo)實踐——數(shù)值顯示器3.3串行通信接口3.3.1預(yù)備知識——串行通信接口

串行通信指的是采用串行通信協(xié)議在一條信號線上將數(shù)據(jù)按位進(jìn)行傳輸?shù)耐ㄐ拍J?。并行通信可以實現(xiàn)多位數(shù)據(jù)同時傳輸,傳輸效率更高,但其占用的I/O口較多,而串行通信只能逐位依次進(jìn)行傳輸,傳輸效率較低,但其占用的I/O口較少,安全性更高,適合長距離通信。由于Arduino的I/O資源較少,其更多采用的是串行通信方式。

串行通信與串口通信是兩種概念,串行通信是一種概念,指的是通信雙方按位進(jìn)行,遵守時序的一種通信方式。串行通信中,將數(shù)據(jù)按位依次傳輸,每位數(shù)據(jù)占據(jù)固定的時間長度,串行通信如I2C、SPI等。而串口通信是一種通信手段,可以將接收來自CPU的并行數(shù)據(jù)字符轉(zhuǎn)換為連續(xù)的串行數(shù)據(jù)發(fā)送出去,同時可將接收的串行數(shù)據(jù)轉(zhuǎn)換為并行的數(shù)據(jù)提供給CPU。串口通信是串行通信方式中的較低級的通信手段。3.3串行通信接口3.3.1預(yù)備知識——串行通信接口

串口通信的數(shù)據(jù)是按位傳輸?shù)?,并且要求發(fā)送方與接收方在發(fā)送與接收數(shù)據(jù)的每一位時,都要保持相同的頻率(每發(fā)送一位都有固定的間隔時間),在串口通信中,將其稱之為波特率。波特率用來表示串行數(shù)據(jù)的傳輸速率,其單位為波特(位/秒),如115200波特表示的是每秒鐘傳輸115200位二進(jìn)制數(shù)據(jù)。Arduino串口通信的數(shù)據(jù)傳輸采用的是數(shù)字信號(高低電平變化)的形式,這些一連串的數(shù)字信號組成了數(shù)據(jù)幀。數(shù)據(jù)幀可以理解為串口通信的基本傳輸單元,一般的數(shù)據(jù)幀格式如下。3.3串行通信接口3.3.1預(yù)備知識——串行通信接口

串行通信接口指的是Arduino硬件集成的串口。在Arduino中,通過Arduino上的USB接口與PC機(jī)連接即可進(jìn)行串口通信,或者使用串口引腳連接其他串口設(shè)備進(jìn)行通信。在進(jìn)行串口通信時,兩個串口設(shè)備間需要發(fā)送端(TX)與接收端(RX)交叉相連,并共用電源地(GND)。

所有的Arduino開發(fā)板都至少有一個串口,稱為UART或USART。通過數(shù)字引腳0(RX)和1(TX)與計算機(jī)的USB接口進(jìn)行串行通信。通過ArduinoIDE內(nèi)嵌的串口監(jiān)視器可以與Arduino開發(fā)板進(jìn)行通信。3.3串行通信接口3.3.2深入學(xué)習(xí)——串行通信接口函數(shù)

在頭文件HardwareSerial.h中定義了HardwareSerial類的實例Serial,直接使用該類成員函數(shù)即可實現(xiàn)簡單的串口通信。函數(shù)說明begin()實現(xiàn)設(shè)置串行通信波特率if(Serial)測試串口是否準(zhǔn)備就緒available()獲取串口緩存區(qū)中的字節(jié)數(shù)availableForWrite()執(zhí)行不阻塞寫操作,并獲取寫入串口緩存區(qū)的字節(jié)數(shù)end()禁止串口通信print()實現(xiàn)串口輸出println()println()函數(shù)與print()函數(shù)類似read()讀取串口數(shù)據(jù)3.3串行通信接口3.3.2深入學(xué)習(xí)——串行通信接口函數(shù)函數(shù)說明readBytes()從串口讀取字符到緩存區(qū),如果確定長度的數(shù)據(jù)讀取完畢或超時則結(jié)束setTimeout()設(shè)置串口操作的超時時間,默認(rèn)為1000mswrite()實現(xiàn)寫二進(jìn)制數(shù)據(jù)到串口,寫入的數(shù)據(jù)可以是一個字符或多個字符find()從串口緩存區(qū)中讀取已知長度的目標(biāo)數(shù)據(jù)flush()等待發(fā)送的串行數(shù)據(jù)傳輸完畢peek()從串口中讀取一個字節(jié)的數(shù)據(jù)parseFloat()/parseInt()從串口數(shù)據(jù)中讀取第一個有效的浮點(diǎn)數(shù)以及整數(shù)serialEvent()串口數(shù)據(jù)準(zhǔn)備就緒時觸發(fā)的事件函數(shù)3.3串行通信接口3.3.3引導(dǎo)實踐——數(shù)值顯示器數(shù)值顯示器:通過Arduino硬件串口,實現(xiàn)指定信息的輸出。

仿真電路圖通過Arduino硬件串口與其他串口設(shè)備進(jìn)行連接,程序執(zhí)行輸出操作,將指定的信息輸出,這里選擇輸出Arduino模擬輸入引腳A0輸入電壓對應(yīng)的模擬值。3.3串行通信接口3.3.3引導(dǎo)實踐——數(shù)值顯示器intanalogValue=0;

voidsetup(){//打開串口,設(shè)置波特率為9600,并判斷串口是否準(zhǔn)備就緒,若就緒則執(zhí)行l(wèi)oop函數(shù)Serial.begin(9600);while(!Serial){;}}

voidloop(){//讀取A0引腳的模擬輸入值,并通過串口實現(xiàn)輸出analogValue=analogRead(A0);//通過串口實現(xiàn)輸出Serial.println("A0AnalogInputValue:");Serial.println(analogValue,DEC);//十進(jìn)制Serial.println(analogValue,HEX);//十六進(jìn)制Serial.println(analogValue,BIN);//二進(jìn)制

delay(8000);}

打開硬件串口,并設(shè)置串口傳輸?shù)牟ㄌ芈蕿?600。

判斷串口是否準(zhǔn)備就緒,如果準(zhǔn)備就緒則跳出循環(huán),執(zhí)行l(wèi)oop()函數(shù)。讀取模擬輸入引腳A0的電壓,將其轉(zhuǎn)換為模擬值進(jìn)行輸出。通過串口輸出提示以及模擬輸入引腳對應(yīng)的模擬值(不同進(jìn)制)。3.4軟件模擬串口預(yù)備知識——軟件模擬串口深入學(xué)習(xí)——軟件模擬串口函數(shù)引導(dǎo)實踐——數(shù)值顯示器3.4軟件模擬串口3.4.1預(yù)備知識——軟件模擬串口Arduino實現(xiàn)串行通信需要通過串行通信接口引腳0(RX)與引腳1(TX),同時使用Arduino提供的HardwareSerial類庫函數(shù)實現(xiàn)對串口的控制。如果Arduino需要連接更多的串口設(shè)備,則可以使用軟件模擬串口。

軟件模擬串口由程序模擬實現(xiàn),通過Arduino提供的SoftwareSerial類庫,可以將其他數(shù)字引腳通過程序模擬成串口通信引腳。因此,可以將Arduino開發(fā)板上自帶的串口稱為硬件串口,使用SoftwareSerial類庫模擬成的串口稱為軟件模擬串口。3.4軟件模擬串口3.4.2深入學(xué)習(xí)——軟件模擬串口函數(shù)

使用SoftwareSerial庫,可通過軟件模擬的方式利用兩個I/O引腳實現(xiàn)串行通信。該庫并非Arduino核心類庫,因此在使用時需要先聲明包含SoftwareSerial.h。函數(shù)說明SoftwareSerial構(gòu)造函數(shù),通過它可以指定數(shù)字引腳為RX、TX引腳begin()設(shè)置串行通信波特率available()獲取從串口接收到的字節(jié)數(shù)read()讀取串口數(shù)據(jù)write()實現(xiàn)寫二進(jìn)制數(shù)據(jù)到串口,寫入的數(shù)據(jù)可以是一個字符或多個字符listen()使指定的軟件串口處于監(jiān)測狀態(tài),同一時間只能有1個軟件串口處于監(jiān)測狀態(tài),調(diào)用該函數(shù)時,已經(jīng)接收的數(shù)據(jù)將被丟棄isListening()測試軟件串口是否為監(jiān)測狀態(tài)overflow()測試軟件串口緩存區(qū)是否溢出3.4串行通信接口3.4.3引導(dǎo)實踐——數(shù)值顯示器數(shù)值顯示器:將Arduino數(shù)字引腳軟件模擬為串口,實現(xiàn)指定信息的輸出。

仿真電路圖通過Arduino軟件模擬串口與其他串口設(shè)備進(jìn)行連接,程序執(zhí)行輸出操作,將指定的信息輸出,這里選擇輸出Arduino模擬輸入引腳A0輸入電壓對應(yīng)的模擬值。3.4串行通信接口3.4.3引導(dǎo)實踐——數(shù)值顯示器#include<SoftwareSerial.h>

//定義模擬串口:數(shù)字引腳8為R

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論