一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Arduino Uno開發(fā)板的使用教程

454398 ? 來(lái)源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-25 14:31 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

步驟1:Arduino Uno簡(jiǎn)介

Arduino Uno開發(fā)板的使用教程

開發(fā)板概述

1。微控制器

該板的大腦是28針微控制器ATMega328。它放置在28針DIP插座中,因此可以輕松更換。微控制器的大腦是中央處理器-CPU,它控制微控制器內(nèi)部的所有內(nèi)容。它獲取存儲(chǔ)在閃存中的程序指令并執(zhí)行它們。這可能涉及從工作存儲(chǔ)器(RAM)中獲取數(shù)據(jù),對(duì)其進(jìn)行處理,然后再放回去,例如,這可能意味著將數(shù)字輸出之一從0V更改為5V。

2。電源

板可以通過(guò)USB連接器或外部電源插座供電。電源調(diào)節(jié)器將電源插座提供的7V至12V之間的任何電壓調(diào)節(jié)為微控制器所需的5V恒定電壓。

3。電源插針

電源插針由8個(gè)母頭插針組成。首先是NC-未連接任何東西。第二個(gè)是IOREF,它用于屏蔽以確定Arduino板工作的電壓水平(3.3V或5V,對(duì)于Arduino Uno是5V)。第三個(gè)是RESET引腳,當(dāng)我們將其連接到0V時(shí),微控制器中的程序?qū)?fù)位,這意味著它將從頭開始重新啟動(dòng)。第四個(gè)引腳為3.3V電源引腳,第五個(gè)引腳為5V電源引腳。第六和第七引腳為GND-GrouND = 0V。第八個(gè)引腳是Vin,該引腳可用于穩(wěn)壓外部電源,對(duì)于Arduino Uno,您可以將此引腳連接到5V來(lái)為開發(fā)板供電。

4。模擬輸入引腳

模擬輸入引腳由標(biāo)記為A0-A5的6個(gè)母頭引腳組成。這些引腳可用于測(cè)量與其相連的電壓電平。例如,濕度傳感器輸出,距離傳感器輸出或溫度傳感器輸出等。

5。數(shù)字輸入/輸出引腳

數(shù)字輸入/輸出(I/O)引腳由18個(gè)母頭引腳組成,分為兩部分。其中的前14個(gè)標(biāo)記為0-13的是數(shù)字I/O引腳,名稱中帶有波浪號(hào)(?)的可以設(shè)置為PWM輸出(稍后將詳細(xì)介紹PWM)。第十五針為GND。第十六個(gè)引腳是Aref引腳,即模擬參考引腳,用作模數(shù)轉(zhuǎn)換(ADC,后面會(huì)詳細(xì)介紹)的參考電壓電平。該引腳連接到Arduino Uno的5V。第十七和第十八引腳是SDA和SCL引腳,這些引腳用于“兩線制”串行接口(在此Instructable中,我們將不介紹TWI)。數(shù)字I/O引腳0和1也被標(biāo)記為Rx和Tx(接收和發(fā)送),可用于串行通信(串行或UART接口,稍后會(huì)有更多介紹)。請(qǐng)勿將這些引腳用作數(shù)字I/O引腳,因?yàn)樵趯?duì)微控制器進(jìn)行編程時(shí)會(huì)使用它們。

6。板載發(fā)光二極管-LED

將一個(gè)橙色LED連接到數(shù)字I/O引腳13。當(dāng)將板連接到電源時(shí),一個(gè)綠色LED點(diǎn)亮,而在斷開電源時(shí),一個(gè)綠色LED熄滅。兩個(gè)橙色LED連接到串行通信線路(Rx和Tx),并在使用串行通信時(shí)閃爍(通常在對(duì)微控制器進(jìn)行編程時(shí))。

7。板載編程電路

Arduino Uno板載板上還有另一個(gè)微控制器,它是Atmega 16U2。該輔助微控制器是USB到串行電路的一部分,用于對(duì)主微控制器進(jìn)行編程。 Atmega16U2充當(dāng)橋接器,用于轉(zhuǎn)換來(lái)自微控制器的串行接口(UART接口)的信號(hào)和USB總線的信號(hào)。由于兩個(gè)微控制器都具有此程序和預(yù)編程的引導(dǎo)程序,因此我們能夠?qū)rduino Uno板與計(jì)算機(jī)連接并對(duì)其進(jìn)行編程。

8。將Arduino開發(fā)板與計(jì)算機(jī)連接

要將Arduino Uno連接到計(jì)算機(jī),您需要USB A至B電纜。當(dāng)您從AZ-Delivery購(gòu)買任何Arduino Uno開發(fā)板時(shí),我們會(huì)在開發(fā)板上附帶電纜。但請(qǐng)注意,某些主板出廠時(shí)沒(méi)有電纜。因此,在購(gòu)買電子產(chǎn)品時(shí)請(qǐng)格外注意。

步驟2:下載和安裝Arduino IDE

IDE表示集成開發(fā)環(huán)境,這是一個(gè)類似文字處理器的應(yīng)用程序,我們?cè)谄渲芯帉懳⒖刂破鞯闹噶罴ǔ绦颍?。此?yīng)用程序?qū)⑽覀兊拇a轉(zhuǎn)換為微控制器可以理解的機(jī)器語(yǔ)言,然后將其上傳到微控制器。

要下載Arduino IDE,請(qǐng)?jiān)L問(wèn)Arduino官方網(wǎng)站,并在軟件選項(xiàng)卡下,單擊下載。 Arduino Web編輯器有一個(gè)選項(xiàng)。您可以僅使用瀏覽器和Arduino Web編輯器對(duì)Arduino開發(fā)板進(jìn)行編程。在這里更多。還可以選擇下載應(yīng)用程序并將其安裝在本地計(jì)算機(jī)上,在下載頁(yè)面上找到您的操作系統(tǒng)并為您的操作系統(tǒng)下載文件。

對(duì)于Windows,我們建議您使用Windows 10,因?yàn)樗孕邪惭b驅(qū)動(dòng)程序,因此您不必為此煩惱。我們還建議您是否使用Windows下載非管理員安裝的zip文件-這樣安裝起來(lái)會(huì)容易得多。下載zip文件時(shí),將其解壓縮并轉(zhuǎn)到解壓縮的文件夾并打開arduino應(yīng)用程序。就這樣,您就可以繼續(xù)下一步了。

但是,如果您使用的是Windows的較早版本,請(qǐng)轉(zhuǎn)到此鏈接。了解如何安裝驅(qū)動(dòng)程序。

對(duì)于linux,請(qǐng)選擇您的計(jì)算機(jī)體系結(jié)構(gòu)并下載適當(dāng)?shù)奈募=鈮嚎s它,然后進(jìn)入解壓縮的目錄,然后打開終端并輸入。/arduino。這是打開Arduino IDE的方式,您準(zhǔn)備好進(jìn)行下一步。

對(duì)于Mac OS X,您必須按照此指南安裝Arduino軟件。

第3步:第一個(gè)程序-心跳

將您剛購(gòu)買的Arduino Uno連接到計(jì)算機(jī)。您會(huì)看到綠色的LED亮著,橙色的LED(連接到數(shù)字插針13)閃爍。如果您之前使用過(guò)Arduino Uno,橙色LED可能不會(huì)閃爍(取決于您所使用的應(yīng)用程序)?,F(xiàn)在我們準(zhǔn)備繼續(xù)。

當(dāng)您打開Arduino IDE時(shí),為了正確設(shè)置IDE,請(qǐng)轉(zhuǎn)到:工具》端口》……,然后選擇帶有Arduino Uno名稱的端口。

對(duì)于Windows,它應(yīng)該類似于“ COM4(Arduino/Genuino Uno)”。

對(duì)于Linux,它類似于“/dev/ttyACM0(Arduino/Genuino Uno)”。

,對(duì)于操作系統(tǒng)“/dev/cu.usbmodem1461(Arduino/Genuino Uno)”。

然后轉(zhuǎn)到工具》板》 Arduino/Genuino Uno,然后選擇您的板名稱。

在繼續(xù)之前,我們先解釋幾件事。首先,每個(gè)程序示例,甚至您編寫的程序都稱為草圖。在Arduino IDE中,我們將向您展示的幾乎所有內(nèi)容都有大量的草圖。因此,當(dāng)您想做某事而又不知道如何做時(shí),應(yīng)該遍歷整個(gè)草圖列表,您可能會(huì)找到帶有程序示例的草圖。并且每個(gè)草圖都被很好地注釋,以便對(duì)每個(gè)動(dòng)作進(jìn)行解釋。

現(xiàn)在,讓我們將第一個(gè)草圖和第一個(gè)程序示例上傳到Arduino Uno板上。轉(zhuǎn)到:文件》示例》 01.基本》閃爍。帶有閃爍草圖的新IDE將打開。在此草圖中,我們使用一個(gè)LED并將其打開和關(guān)閉。因?yàn)檫@是一種檢查一切是否正常的方法,所以此草圖通常稱為“ Hello world”示例。當(dāng)您將此草圖上傳到板上時(shí),您的Arduino會(huì)說(shuō):“我還活著,你好,世界!” :-)。草圖中有很多注釋,請(qǐng)閱讀它們,通常它們會(huì)解釋所有內(nèi)容;-)。

但是我們將對(duì)其進(jìn)行一些更改,因?yàn)閮H打開/關(guān)閉LED燈很無(wú)聊。讓我們模擬一個(gè)心跳。為了簡(jiǎn)單起見,我們刪除了所有評(píng)論。更改像這樣的循環(huán)函數(shù),其余部分保持不變:

void loop() {

digitalWrite(LED_BUILTIN, LOW);

delay(1100);

digitalWrite(LED_BUILTIN, HIGH);

delay(150);

digitalWrite(LED_BUILTIN, LOW);

delay(100);

digitalWrite(LED_BUILTIN, HIGH);

delay(150);

}

現(xiàn)在,轉(zhuǎn)到:“草圖”》“上傳”,或按“ Upload =》”圖標(biāo)上傳。

如果一切順利,您應(yīng)該會(huì)看到板載橙色LED以心跳的方式閃爍。

如果您使用的是Linux,并且遇到“打開串口錯(cuò)誤。..”之類的錯(cuò)誤,則應(yīng)閱讀此書。

現(xiàn)在,讓我們來(lái)解釋一下草圖。在幾乎每個(gè)草圖中,都有兩個(gè)函數(shù):setup()和loop()函數(shù):

setup()函數(shù)在程序執(zhí)行開始時(shí)僅運(yùn)行一次,當(dāng)您為電路板加電時(shí),或重置板時(shí)。在此函數(shù)中,我們?cè)O(shè)置所有初始化,例如,聲明我們使用的數(shù)字輸入/輸出引腳的狀態(tài)。在此草圖中,我們聲明數(shù)字I/O引腳13(LED_BUILTIN)為數(shù)字輸出引腳。在這里,我們還初始化了所需的所有內(nèi)容,例如設(shè)置模擬輸入引腳或用于串行通信的串行接口等(稍后對(duì)此進(jìn)行詳細(xì)介紹)。

loop()函數(shù)在setup()之后運(yùn)行,并且無(wú)限期地反復(fù)運(yùn)行,即所謂的“無(wú)限”循環(huán)函數(shù)。實(shí)際上,在電路板連接到電源時(shí),它始終運(yùn)行。這是因?yàn)殡娮釉O(shè)備中的程序永遠(yuǎn)都不會(huì)到達(dá)末尾,因?yàn)槿绻l(fā)生這種情況,則意味著您的設(shè)備與關(guān)閉設(shè)備一樣好。在此草圖中,我們將數(shù)字引腳13設(shè)置為ond,然后將數(shù)字引腳13設(shè)置為低值(0V或GND; LED熄滅),然后延遲該時(shí)間或等待1100毫秒(大于一秒),然后將數(shù)字引腳13設(shè)置為到高值(5V; LED亮),并等待150毫秒。關(guān)閉超過(guò)100毫秒,然后再次開啟150毫秒。

步驟4:LED褪色

在此草圖中,我們將使用帶有330歐姆電阻的外部綠色LED。加載草圖:“文件”》“示例”》“ 01.Basics”》“淡出”。

在繼續(xù)之前,如果尚未在Arduino IDE中打開行號(hào),則應(yīng)打開行號(hào)。轉(zhuǎn)到:文件》首選項(xiàng)。一個(gè)新的首選項(xiàng)窗口將打開。選中“顯示行號(hào)”框,然后單擊“確定”。

現(xiàn)在我們可以繼續(xù)。在第16、17和18行上,定義了三個(gè)變量。首先是“ led”,在其中存儲(chǔ)連接到LED的數(shù)字I/O引腳的數(shù)量。在此草圖中為9。其他兩個(gè)變量用于更改LED的亮度,第一個(gè)是亮度級(jí)別,第二個(gè)是代表兩個(gè)亮度級(jí)別之間增加/減少步長(zhǎng)的數(shù)字。

在setup()函數(shù)中,我們聲明要輸出的數(shù)字I/O引腳9的狀態(tài)。沒(méi)什么新鮮的,不是嗎。

但是在loop()函數(shù)中,我們鮮有新事物。首先是analogWrite()函數(shù),該函數(shù)定義數(shù)字I/O引腳的PWM“電壓電平”(有關(guān)PWM和analogWrite()的更多信息)。在這種情況下,這就是LED亮度(LOB)的級(jí)別。然后剩下的loop()函數(shù)就是改變亮度的算法。這應(yīng)該是不言自明的。如果沒(méi)有,讓我們快速進(jìn)行一下。在第32行上,我們向當(dāng)前LOB添加一個(gè)階躍值,然后詢問(wèn)LOB是否小于或等于0(LOB不能為負(fù)值,因?yàn)槟繮HYSICS),并且大于255。為什么是255?因?yàn)镻WM輸出的分辨率為256,所以從0到255的值。這在analogWrite()函數(shù)中使用,因此電壓電平以0到0的255到5V的255的形式表示(稍后將對(duì)此進(jìn)行詳細(xì)介紹)。如果不滿足此條件,則程序?qū)⒗^續(xù)執(zhí)行下一條指令,即delay(30)。因?yàn)樗炝?,所以delay()只是減慢了這個(gè)過(guò)程。如果沒(méi)有這行代碼,您將看不到LED衰落的效果。..但是,如果滿足條件,則我們將LOB步號(hào)更改為負(fù),以便LOB開始下降。下次滿足此條件時(shí),負(fù)LOB步長(zhǎng)將變?yōu)闊o(wú)窮大,依此類推,無(wú)限大。如果您希望進(jìn)一步減慢處理速度,只需將delay(30)中的30更改為其他更高的值。

在此示例中,我們使用LED和電阻,因此讓我們解釋一下電阻和LED是什么。

第一個(gè)電阻器,它有兩個(gè)支路,用于連接到電子電網(wǎng)中,并且用于限制電子電網(wǎng)中那部分的電流(電阻器的方向無(wú)關(guān)緊要,它將以兩種方式起作用)。我們使用四分之一瓦的電阻。這是電阻的功率,這意味著當(dāng)電流流過(guò)電阻時(shí),電阻會(huì)發(fā)熱。該電流越大,電阻將變得越熱。電阻通過(guò)其電阻值和以瓦特(W)為單位給出的功率來(lái)評(píng)級(jí),這些功率可以主要根據(jù)其大小來(lái)安全地耗散。它的表面積越大(電阻越大),它可以安全地散發(fā)到周圍空氣或散熱器中的功率就越大。

您可以考慮一下,就像使用水軟管澆灌植物,用手?jǐn)D壓軟管,限制軟管中的水流。在此示例中,您的手是電阻,水流是電流,水量是電壓。

現(xiàn)在,二極管,它有兩個(gè)腿,可以連接到電子電網(wǎng),陽(yáng)極和陰極。二極管是電子部件,它使電流僅從陽(yáng)極到陰極的一個(gè)方向流動(dòng)。如果將其反向,將不會(huì)有電流通過(guò),但如果超過(guò)電流和電壓限制,則可能會(huì)損壞二極管。

LED-發(fā)光二極管是一種特殊的二極管,當(dāng)電流流過(guò)該二極管時(shí)會(huì)發(fā)出彩色光(LED的較長(zhǎng)腳為陽(yáng)極,而另一腳為陰極)。當(dāng)我們超過(guò)電流和電壓限制時(shí),無(wú)論連接的方向如何,二極管也可能被破壞,因此請(qǐng)小心閱讀數(shù)據(jù)表。這就是為什么我們?cè)贚ED上使用電阻器,以便我們限制電流并防止LED損壞的原因。

現(xiàn)在,連接圖上的所有內(nèi)容并將草圖上傳到Arduino板上,看看LED褪色的魔力。/p》

第5步:按鈕和LED指示燈

現(xiàn)在,讓我們通過(guò)按下按鈕或開關(guān)打開/關(guān)閉LED。什么是按鈕,什么是開關(guān)?嗯,它們都是電子部件,具有兩種狀態(tài),分別處于打開和關(guān)閉狀態(tài),并且都用于打開/關(guān)閉電子網(wǎng)格的某些部分。但是不同之處在于,當(dāng)您更改開關(guān)的狀態(tài)時(shí),它將保持該狀態(tài),但是當(dāng)您更改按鈕的狀態(tài)時(shí),僅在將其保持在該狀態(tài)時(shí),它才會(huì)保持在該狀態(tài)。當(dāng)您停止按按鈕時(shí),它將返回其默認(rèn)狀態(tài),在大多數(shù)情況下為關(guān)閉狀態(tài)。有些開關(guān)具有兩個(gè)以上的狀態(tài),但是我們不會(huì)在Instructable中使用它們。

在此步驟中,我們將使用無(wú)焊面包板。面包板是用于制作電子原型的電子部件。有了它,我們無(wú)需硬連接即可輕松連接其他電子部件,而無(wú)需斷開它們,而無(wú)需焊接。面包板引腳。

與Arduino Uno,面包板,按鈕,10k歐姆電阻,LED和330歐姆電阻建立連接,如圖所示。

您可以看到,我們有兩個(gè)原理圖該圖,它們分別起作用。您可以使用任何這些原理圖來(lái)打開/關(guān)閉LED,因?yàn)樗鼈儓?zhí)行的功能相同,但方式不同。 Arduino Uno用作穩(wěn)定電源。左圖為上拉電阻,右圖為上拉電阻。通過(guò)查看10k ohm電阻器以及連接在哪個(gè)導(dǎo)軌上,您可以看到哪個(gè)是哪個(gè)電阻器(圖中兩個(gè)較低的電阻器)。上拉表示將電阻連接到地,上拉表示將電阻連接到5V電源。 LED附近的330歐姆電阻用作LED保護(hù)。當(dāng)我們按下一個(gè)按鈕時(shí),它將打開相應(yīng)的LED。當(dāng)我們停止按下按鈕時(shí),它將關(guān)閉相應(yīng)的LED。

您可能想知道,為什么所有這些?很簡(jiǎn)單,如果您使用數(shù)字I/O引腳作為輸入,則必須始終將數(shù)字I/O引腳連接到GND(下拉電阻)或電源(上拉電阻)。您永遠(yuǎn)不能,永遠(yuǎn)不要將其斷開,因?yàn)槟鷷?huì)得到亂碼。為什么?這是因?yàn)?,?shù)字輸入引腳將從周圍環(huán)境中讀取電壓,例如來(lái)自周圍引腳的電壓水平或來(lái)自引腳周圍灰塵的靜電電壓水平等。當(dāng)您讀取未連接的引腳時(shí),將會(huì)得到不穩(wěn)定的值。在下一步中介紹串行通信時(shí),我們將向您顯示這些讀數(shù)。

我們現(xiàn)在將讀取數(shù)字I/O引腳2上的按鈕的輸入。連接所有內(nèi)容,如圖所示。

轉(zhuǎn)到草圖:“文件”》“示例”》“ 02.Digital”》“按鈕” ,并將其上傳到Arduino Uno。按按鈕!板載橙色指示燈將點(diǎn)亮。涼!再次,閱讀評(píng)論。此草圖是不言自明的,我們不需要遍歷。

步驟6:串行通信

現(xiàn)在終于有了一些有趣的東西。通過(guò)串行通信,您可以與Arduino Uno開發(fā)板進(jìn)行通信。多么酷??? :)

什么是串行通信?這是微控制器可以相互通信的一種方式。簡(jiǎn)而言之,一個(gè)微控制器輸出(發(fā)送,傳輸)信號(hào),在連接兩個(gè)微控制器的電線上產(chǎn)生高低壓脈沖。另一個(gè)單片機(jī)處于輸入模式,監(jiān)聽電壓脈沖,并像接收器一樣工作。因此,這里有一個(gè)串行協(xié)議,即將數(shù)據(jù)編碼為電壓脈沖并將電壓脈沖解碼回?cái)?shù)據(jù)的規(guī)則。最常見的串行模式是通用異步接收和發(fā)送或UART串行。

要發(fā)送一個(gè)字節(jié)的數(shù)據(jù),我們有幾個(gè)規(guī)則。

首先,我們必須就電壓脈沖的速度,數(shù)據(jù)的發(fā)送和接收速度達(dá)成一致。該速度稱為波特率,以每秒比特?cái)?shù)表示。其值可以是:2400、4800、9600、14400、19200等。它可以高達(dá)250000。最常見的是9600。

第二個(gè)數(shù)據(jù)的每個(gè)字節(jié)必須具有起始和停止位,以便UART可以區(qū)分?jǐn)?shù)據(jù)字節(jié)的開始和結(jié)束位置。

第三,我們可以調(diào)整數(shù)據(jù)字節(jié)的長(zhǎng)度。 (我們不會(huì)對(duì)此進(jìn)行詳細(xì)介紹)默認(rèn)值為8位,但也可以為9位或10位。

第四,在數(shù)據(jù)字節(jié)的和的停止位之前有奇偶校驗(yàn)位。該位是可選的,您不必使用它。用于檢查數(shù)據(jù)字節(jié)中是否有錯(cuò)誤。 (我們不會(huì)對(duì)此進(jìn)行詳細(xì)介紹)。

與Arduino設(shè)置串行通信非常容易,只需幾行代碼。讓我們通過(guò)計(jì)算機(jī)通過(guò)串行通訊發(fā)送的命令打開板載LED。為此,您只需要將Arduino Uno板連接到計(jì)算機(jī)即可。

在Arduino IDE中,有一個(gè)用于監(jiān)視串行接口的簡(jiǎn)潔工具,您可以稱之為串行監(jiān)視器。要啟動(dòng)它,請(qǐng)轉(zhuǎn)到:工具》串行監(jiān)視器。

將此小圖寫或復(fù)制/粘貼到IDE中,然后將其上傳到您的Arduino Uno中。

void setup() {

// setting digital I/O pin 13 as output

pinMode(LED_BUILTIN, OUTPUT);

// setting up serial communication - 9600 is baud (communication) rate, 9600 bits per second

Serial.begin(9600);

}

void loop() {

// check if there is serial message on serial line

// Serial.available() returns the number of bytes that are in serial buffer

if (Serial.available() 》 0) {

// if it is, read it and store into letter variable

char letter = Serial.read();

if(letter == ‘1’) {

digitalWrite(LED_BUILTIN, HIGH);

// write back on serial line

Serial.println(“LED turned on”);

}

else if(letter = ‘0’) {

digitalWrite(LED_BUILTIN, LOW);

Serial.println(“LED turned off”);

}

}

}

現(xiàn)在,我們將解釋此小圖。首先,Serial.begin()函數(shù)。它用于設(shè)置Arduino Uno的串行接口。為此,我們?cè)诶ㄌ?hào)中輸入波特率,在本草圖中為9600。

現(xiàn)在,您必須設(shè)置偵聽器進(jìn)行通信。 Serial.available()函數(shù)偵聽串行通信線路上的消息,并且當(dāng)消息緩沖區(qū)中充滿數(shù)據(jù)(即使只有一個(gè)字符)時(shí),Serial.available()也會(huì)返回消息緩沖區(qū)中的字節(jié)數(shù)。我們等待該消息,然后將該消息放入消息緩沖區(qū)中,進(jìn)行讀取,然后檢查其特定值。當(dāng)消息為“ 1”時(shí),它將打開一個(gè)指示燈,并將消息寫回到串行線“ LED亮”。要寫入串行線,我們使用Serial.println()函數(shù)。您只需用引號(hào)將要打印的文本寫上并放在Serial.println()的括號(hào)中。

將此草圖上傳到Arduino Uno開發(fā)板時(shí),啟動(dòng)Serial Monitor工具。寫“ 1”并發(fā)送。而且,現(xiàn)在您正在與Arduino Uno通信:)

現(xiàn)在,讓我們使用上一個(gè)示例中的按鈕。讓我們讀取數(shù)字輸入引腳的狀態(tài),然后將其發(fā)送到串行通信,首先斷開連接,然后使用按鈕和Pull Down或Pull Up電阻。為此,我們將使用Arduino Uno,一個(gè)按鈕和一個(gè)10k歐姆的電阻。任何東西,然后啟動(dòng)“串行監(jiān)視器”,這就是我們所寫的那個(gè)亂碼。這就是為什么當(dāng)我們讀取輸入引腳狀態(tài)時(shí)使用上拉或下拉電阻器的原因。

現(xiàn)在,進(jìn)行連接,以便您可以使用上拉和下拉電阻器和按鈕來(lái)創(chuàng)建原理圖,如圖所示。

您可以執(zhí)行兩次此操作,一次是上拉,一次是上拉,以獲取我們得到的結(jié)果。如果您不希望這樣做,則不需要同時(shí)制作這兩者。

但是我們將使這項(xiàng)工作生效。我們需要稍微更改一下DigitalReadSerial草圖,以便我們可以同時(shí)使用兩個(gè)按鈕。將此代碼復(fù)制到IDE中:

int pullUp = 2; // button on digital I/O pin 2 - Pull Down

int pullDown = 3; // button on digital I/O pin 3 - Pull Up

void setup() {

Serial.begin(9600);

pinMode(pullUp, INPUT);

pinMode(pullDown, INPUT);

}

void loop() {

// read buttons states

int buttonUpState = digitalRead(pullUp);

int buttonDownState = digitalRead(pullDown);

// make a message that will be sent to the serial line

String message = “Pull Up: ” + String(buttonUpState);

message = message + “。 Pull Down: ” + String(buttonDownState);

// send the message

Serial.println(message);

delay(1); // delay in between reads for stability

}

在這里,沒(méi)有什么新內(nèi)容了,除了該行String message =“ Pull Up:” 。..在這里,我們正在創(chuàng)建將發(fā)送到串行的消息一口氣排隊(duì)。首先,我們創(chuàng)建一個(gè)名為message的字符串變量,然后向其中添加文本。 String()函數(shù)將整數(shù)值轉(zhuǎn)換為字符串,以便可以將其串聯(lián)為消息字符串。

將此草圖上傳到Arduino Uno,然后啟動(dòng)串行監(jiān)視器。輸出應(yīng)為:

上拉:1.拉下:0

您看到區(qū)別了嗎?當(dāng)您使用上拉電阻(PUR)讀取未按下的按鈕時(shí),它將讀取數(shù)字1,而對(duì)于下拉電阻(PDR),它將讀取數(shù)字0。當(dāng)您按下連接到PUR的按鈕時(shí),串行監(jiān)視器中的輸出將變?yōu)閿?shù)字零。當(dāng)您按下連接到PDR的按鈕時(shí),輸出將變?yōu)閿?shù)字1。當(dāng)兩個(gè)按鈕都按下時(shí),輸出應(yīng)如下所示:

上拉:0。下拉:1

步驟7:按鈕彈跳

從上一步中可以看到,當(dāng)您按下一個(gè)按鈕時(shí),它將被讀為一系列(對(duì)于帶有下拉電阻的按鈕)。無(wú)論您按多快然后釋放它,讀取的值仍將是一系列的值,但永遠(yuǎn)不會(huì)是單個(gè)值(0000000 1111111 00000000)。有時(shí),在按下按鈕時(shí)此零變?yōu)?之前會(huì)有一些值更改(00000 1 0 1 00 11 0 11111111111111 )。或者您可能是一個(gè)按鈕的上帝,并且您能夠做到,每個(gè)按鈕一個(gè)按鈕按xD。 (小笑話)

這稱為反彈效果,解決方案是反跳算法。按鈕彈跳是電子學(xué)中的嚴(yán)重問(wèn)題,并且有numeros硬件和軟件解決方案,但是對(duì)于Arduino IDE中的大多數(shù)草圖,最簡(jiǎn)單的解決方案是軟件彈跳算法。向下電阻連接到數(shù)字I/O引腳2。

將此代碼復(fù)制到IDE:

// digital pin 2 has a pushbutton attached to it.

int button = 2;

// variable for counting button presses

int count_presses = 0;

// two helper variables, for detecting one physical press

int ones_count = 0;

int real_press = 0;

void setup() {

// initialize serial communication at 9600 bits per second:

Serial.begin(9600);

// make the button‘s pin an input:

pinMode(button, INPUT);

// to print first value of count_presses which is 0

Serial.println(count_presses);

}

void loop() {

// read the button input pin:

int button_state = digitalRead(button);

// check state of a button, check for digital ones when button is pressed, and count them

if (button_state) {

ones_count++;

}

else {

ones_count = 0;

}

// if number of ones is 10, you pressed button long enough, mark this with real_press

if (ones_count == 10) {

real_press = 1;

}

else {

real_press = 0;

}

// if flag is marked, count that, because it is one actual physical press, and send that number to the serial interface

if (real_press) {

count_presses++;

Serial.println(count_presses);

}

delay(1); // delay in between reads for stability

}

將其上傳到Arduino Uno,然后啟動(dòng)串行監(jiān)視器。

此代碼所做的全部就是計(jì)數(shù)按鈕的按下次數(shù)并將其打印在串行通訊線上。代碼是不言自明的。

步驟8:ADC

ADC代表模數(shù)轉(zhuǎn)換器或轉(zhuǎn)化。為什么我們需要這個(gè)?好吧,我們?cè)贏rduino Uno中的微控制器是數(shù)字設(shè)備,這意味著它僅適用于數(shù)字信號(hào)。如果考慮電壓,電壓數(shù)字信號(hào)可以具有兩個(gè)電平:數(shù)字零或0V和數(shù)字一或5V。但是,幾乎所有其他功能都可以與模擬信號(hào)一起使用,模擬信號(hào)可以具有任何電平,電壓范圍在0V至5V之間。您可以在圖像上看到它。

因此,為了使我們的微控制器能夠理解模擬信號(hào),我們需要一個(gè)轉(zhuǎn)換器,這就是我們需要ADC的地方。

Aref引腳Arduino Uno用作模擬轉(zhuǎn)換的電壓參考引腳。該參考電壓電平必須盡可能穩(wěn)定,準(zhǔn)確且無(wú)噪聲,以便在ADC上獲得準(zhǔn)確的讀數(shù)。我們?yōu)槭裁葱枰@個(gè)?好的ADC可以在0V和Aref引腳上的電壓電平之間轉(zhuǎn)換電壓值,在大多數(shù)情況下為5V。但是我們可以根據(jù)應(yīng)用程序更改此值。 Aref = 5V是Arduino Uno的默認(rèn)設(shè)置,但是使用analogReference()函數(shù)可以更改此設(shè)置。 (我們不會(huì)在此Instructable中使用它)

那么ADC實(shí)際如何工作? ADC的核心實(shí)際上是DAC-數(shù)模轉(zhuǎn)換器比較器。比較器用于比較兩個(gè)值,在這種情況下為兩個(gè)模擬信號(hào)。最簡(jiǎn)單地說(shuō),如果一個(gè)信號(hào)大于另一個(gè)信號(hào),比較器將返回?cái)?shù)字一;如果一個(gè)信號(hào)小于另一個(gè)信號(hào),它將返回?cái)?shù)字零。這兩個(gè)信號(hào)分別是來(lái)自模擬輸入引腳的信號(hào)和來(lái)自DAC的信號(hào)。轉(zhuǎn)換開始時(shí),ADC將高數(shù)字值輸入DAC,并將其轉(zhuǎn)換為DAC可以產(chǎn)生的最高模擬電壓(Aref),然后比較器將DAC的該值與模擬輸入引腳的值進(jìn)行比較。該ADC從比較器讀取值后,確定DAC電壓大于還是小于模擬輸入引腳的電壓。比ADC將DAC值一分為二,并重復(fù)整個(gè)比較/讀取過(guò)程。重復(fù)此過(guò)程,直到ADC將輸入電壓電平定位在DAC可以產(chǎn)生的10位電壓電平中的兩個(gè)之間。 ADC的分辨率為10位(對(duì)于Arduino Uno主芯片= ATMega328P)。 ADC的分辨率是通過(guò)將Aref引腳上的電壓電平除以可能的轉(zhuǎn)換值的總數(shù)10位= 1024來(lái)定義的。這意味著ADC可以將0V和Aref之間的許多電壓電平讀取為1024個(gè)不同的值。如果參考電壓(Aref)為5V,則ADC可以區(qū)分的最小電壓電平為5/1024 = 0.00488 V = 4.9 mV。

ADC一次只能讀取一個(gè)模擬引腳。為了讀取Arduino Uno的6個(gè)模擬引腳,讀取過(guò)程必須是多路復(fù)用的。這意味著ADC將先讀取一個(gè)并存儲(chǔ)其值,然后再讀取另一個(gè),依此類推,直到最后一個(gè)第六個(gè)模擬輸入引腳。

但是創(chuàng)建Arduino是為了降低將所有ADC寄存器調(diào)整為僅一個(gè)函數(shù)AnalogRead()的復(fù)雜性。該函數(shù)返回的數(shù)字是特定模擬輸入引腳上模擬電壓電平的10位表示形式。如果要測(cè)量模擬電壓,則必須將該數(shù)字除以1024并從5中減去。然后,我們將在小誤差范圍內(nèi)為模擬輸入引腳提供實(shí)際電壓電平的值(對(duì)于Aref = 5V,?4.9mV)

所以,理論終于結(jié)束了,讓我們做一些實(shí)際的事情。讓我們使用10k歐姆電阻和光電電阻創(chuàng)建一個(gè)分壓器。

什么是分壓器?好吧,這個(gè)名字說(shuō)的一切都是由電路來(lái)分壓的。我們使用兩個(gè)電阻器,將它們串聯(lián)連接,在串聯(lián)連接的兩端,我們連接輸入電壓和GND,輸出在中間部分和GND之間。就像在圖像上一樣。

Т這是一個(gè)描述輸入和輸出電壓之間的依存關(guān)系的方程式:

Vout = Vin * R2/(R1 + R2)

如果Vin = 9V,R1 = 10k ohm,R2 = 1k ohm,則我們得到的Vout = 818mV。如果Vin = 9V,但我們用R2代替R1,則我們得到Vout = 8,18V,就像下部的圖像一樣。

您可以使用上面的公式來(lái)計(jì)算。您將得到相同的結(jié)果。

在下一個(gè)示例中,我們將使用Arduino Uno,10k歐姆電阻器,光電電阻器和幾根Jumber電線。像圖中一樣連接所有東西,然后將此草圖上傳到Arduino Uno:文件》示例》 01.Basics》 AnalogReadSerial。啟動(dòng)串行監(jiān)視器。用光遮蓋光電電阻??吹阶x數(shù)的差異。

現(xiàn)在上傳這個(gè)小草圖:

double voltageRef = 5.0; // Voltage reference level

double resolution = voltageRef / 1024.0; // smallest value that ADC can read = resolution

double voltageInput = 0; // Input voltage level

void setup() {

Serial.begin(9600);

}

void loop() {

int sensorValue = analogRead(A0);

// equation for converting digital value from ADC into actual voltage level

voltageInput = voltageRef - (resolution * sensorValue);

Serial.println(voltageInput);

delay(10);

}

責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6498

    瀏覽量

    192279
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    ESP32開發(fā)板元件資料

    ESP32開發(fā)板元件
    發(fā)表于 07-21 14:47 ?0次下載

    有ARM,NPU,F(xiàn)PGA三種核心的開發(fā)板 — 米爾安路飛龍派開發(fā)板

    最近我發(fā)現(xiàn)一個(gè)有趣的開發(fā)板。這個(gè)開發(fā)板集合了ARM核心,NPU核心甚至還有FPGA核心。它就是米爾新出的YM90X開發(fā)板。它基于安路科技所打造的芯片上海安路信息科技于2021年在上交所科創(chuàng)
    的頭像 發(fā)表于 06-13 08:03 ?634次閱讀
    有ARM,NPU,F(xiàn)PGA三種核心的<b class='flag-5'>開發(fā)板</b> — 米爾安路飛龍派<b class='flag-5'>開發(fā)板</b>

    【新品】遠(yuǎn)距離圖傳數(shù)傳模塊開發(fā)板、藍(lán)牙模塊開發(fā)板、無(wú)線模塊開發(fā)板

    新品上市圖傳數(shù)傳模塊開發(fā)板藍(lán)牙模塊開發(fā)板國(guó)產(chǎn)無(wú)線模塊開發(fā)板部分型號(hào)參與送樣文末了解詳情↓↓↓EWT611-900NW20S遠(yuǎn)距離圖傳數(shù)傳模塊開發(fā)板EWT611-900NW20S是一款入
    的頭像 發(fā)表于 06-12 19:33 ?361次閱讀
    【新品】遠(yuǎn)距離圖傳數(shù)傳模塊<b class='flag-5'>開發(fā)板</b>、藍(lán)牙模塊<b class='flag-5'>開發(fā)板</b>、無(wú)線模塊<b class='flag-5'>開發(fā)板</b>

    【免費(fèi)試用】開發(fā)板評(píng)測(cè)大賽開啟!OH 、RISC-V、Rockchip頂級(jí)開發(fā)板等你試用~

    技術(shù)人的狂歡,開發(fā)者的盛宴!2025年最值得期待的硬核賽事——電子發(fā)燒友開發(fā)板評(píng)測(cè)大賽正式啟動(dòng)!無(wú)論你是開源生態(tài)的探索者、芯片架構(gòu)的極客,還是物聯(lián)網(wǎng)領(lǐng)域的創(chuàng)新達(dá)人,本次大賽三大賽
    的頭像 發(fā)表于 06-05 08:05 ?302次閱讀
    【免費(fèi)試用】<b class='flag-5'>開發(fā)板</b>評(píng)測(cè)大賽開啟!OH 、RISC-V、Rockchip頂級(jí)<b class='flag-5'>開發(fā)板</b>等你試用~

    STM32開發(fā)板一般都會(huì)配置arduino接口,是不是基本上也都會(huì)支持arduino

    STM32開發(fā)板一般都會(huì)配置arduino接口,是不是基本上也都會(huì)支持arduino?這個(gè)在哪里可以查詢開發(fā)板是否支持
    發(fā)表于 03-07 06:33

    用AI人臉識(shí)別開發(fā)板BW21-CBV-Kit驅(qū)動(dòng)墨水屏

    試著用BW21-CBV-Kit點(diǎn)亮2.9寸墨水屏,開發(fā)板例程非常豐富,在arduino開發(fā)的話上手超級(jí)容易。
    的頭像 發(fā)表于 03-04 18:24 ?1112次閱讀
    用AI人臉識(shí)別<b class='flag-5'>開發(fā)板</b>BW21-CBV-Kit驅(qū)動(dòng)墨水屏

    通過(guò)Arduino Nano Matter開發(fā)板構(gòu)建智能卷簾系統(tǒng)

    在本指南中,您將學(xué)習(xí)如何通過(guò)Arduino NanoMatter開發(fā)板上的Silicon Labs(芯科科技)MGM240S多協(xié)議無(wú)線模塊來(lái)構(gòu)建一個(gè)智能卷簾系統(tǒng)。該系統(tǒng)可通過(guò) Amazon
    的頭像 發(fā)表于 02-28 09:46 ?555次閱讀
    通過(guò)<b class='flag-5'>Arduino</b> Nano Matter<b class='flag-5'>開發(fā)板</b>構(gòu)建智能卷簾系統(tǒng)

    Arduino Nano Matter開發(fā)板正式上市

    Silicon Labs(芯科科技)和Arduino在近日共同宣布Arduino Nano Matter開發(fā)板現(xiàn)已正式上市。這是延續(xù)今年3 月芯科科技和Arduino釋出
    的頭像 發(fā)表于 12-10 13:50 ?947次閱讀

    自己設(shè)計(jì)的Arduino UNO R3主控原理圖+PCB源文件(可直接打樣)

    一年前做的Arduino UNO r3,開源精神,把自己這塊板子奉獻(xiàn)給大家,板子沒(méi)有什么問(wèn)題,可以直接打樣制作,原理圖文件都表明了型號(hào)。不用謝~ Arduino UNO R3主控
    發(fā)表于 12-10 10:14

    基于Arduino的串口通信項(xiàng)目

    基于Arduino的串口通信項(xiàng)目涉及多個(gè)方面,包括硬件連接、軟件編程、串口參數(shù)配置等。 一、硬件準(zhǔn)備 Arduino開發(fā)板 :確保你有一塊Arduino
    的頭像 發(fā)表于 11-22 09:24 ?2203次閱讀

    【迅為】瑞芯微RK3588開發(fā)板RK3568開發(fā)板區(qū)別及優(yōu)勢(shì)

    RK3568開發(fā)板
    的頭像 發(fā)表于 11-18 14:19 ?1506次閱讀
    【迅為】瑞芯微RK3588<b class='flag-5'>開發(fā)板</b>RK3568<b class='flag-5'>開發(fā)板</b>區(qū)別及優(yōu)勢(shì)

    正點(diǎn)原子fpga開發(fā)板不同型號(hào)

    正點(diǎn)原子作為國(guó)內(nèi)領(lǐng)先的FPGA開發(fā)板供應(yīng)商,其產(chǎn)品線覆蓋了從入門級(jí)到高端應(yīng)用的各個(gè)領(lǐng)域。這些開發(fā)板不僅適用于學(xué)術(shù)研究,還廣泛應(yīng)用于工業(yè)控制、通信、圖像處理等多個(gè)領(lǐng)域。 1. 入門級(jí)開發(fā)板 1.1
    的頭像 發(fā)表于 11-13 09:30 ?3744次閱讀

    如何使用Arduino實(shí)現(xiàn)CAN總線通信

    開源硬件平臺(tái),通過(guò)添加CAN總線模塊,也可以實(shí)現(xiàn)CAN通信。 硬件準(zhǔn)備 Arduino開發(fā)板 :可以選擇Arduino Uno、Mega等型號(hào)。 CAN總線模塊 :如MCP2515或M
    的頭像 發(fā)表于 11-12 10:09 ?2738次閱讀

    51開發(fā)板芯片資料

    51開發(fā)板芯片資料
    發(fā)表于 09-18 09:29 ?1次下載

    linux開發(fā)板與樹莓派的區(qū)別

    定義和用途 Linux開發(fā)板:Linux開發(fā)板是一種基于Linux操作系統(tǒng)的嵌入式開發(fā)板,通常用于工業(yè)自動(dòng)化、物聯(lián)網(wǎng)、智能家居等領(lǐng)域。 樹莓派:樹莓派(Raspberry Pi)是一種基于Linux
    的頭像 發(fā)表于 08-30 15:34 ?1990次閱讀