91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

步驟1:Arduino Uno簡介

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

開發(fā)板概述

1。微控制器

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

2。電源

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

3。電源插針

電源插針由8個(gè)母頭插針組成。首先是NC-未連接任何東西。第二個(gè)是IOREF,它用于屏蔽以確定Arduino板工作的電壓水平(3.3V或5V,對于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)壓外部電源,對于Arduino Uno,您可以將此引腳連接到5V來為開發(fā)板供電。

4。模擬輸入引腳

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

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

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

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

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

7。板載編程電路

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

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

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

步驟2:下載和安裝Arduino IDE

IDE表示集成開發(fā)環(huán)境,這是一個(gè)類似文字處理器的應(yīng)用程序,我們在其中編寫微控制器的指令集(程序)。此應(yīng)用程序?qū)⑽覀兊拇a轉(zhuǎn)換為微控制器可以理解的機(jī)器語言,然后將其上傳到微控制器。

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

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

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

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

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

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

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

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

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

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

,對于操作系統(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è)草圖列表,您可能會找到帶有程序示例的草圖。并且每個(gè)草圖都被很好地注釋,以便對每個(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會說:“我還活著,你好,世界!” :-)。草圖中有很多注釋,請閱讀它們,通常它們會解釋所有內(nèi)容;-)。

但是我們將對其進(jìn)行一些更改,因?yàn)閮H打開/關(guān)閉LED燈很無聊。讓我們模擬一個(gè)心跳。為了簡單起見,我們刪除了所有評論。更改像這樣的循環(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)該會看到板載橙色LED以心跳的方式閃爍。

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

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

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

loop()函數(shù)在setup()之后運(yùn)行,并且無限期地反復(fù)運(yùn)行,即所謂的“無限”循環(huán)函數(shù)。實(shí)際上,在電路板連接到電源時(shí),它始終運(yùn)行。這是因?yàn)殡娮釉O(shè)備中的程序永遠(yuǎn)都不會到達(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)閉超過100毫秒,然后再次開啟150毫秒。

步驟4:LED褪色

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

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

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

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

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

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

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

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

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

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

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

第5步:按鈕和LED指示燈

現(xiàn)在,讓我們通過按下按鈕或開關(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í),它才會保持在該狀態(tài)。當(dāng)您停止按按鈕時(shí),它將返回其默認(rèn)狀態(tài),在大多數(shù)情況下為關(guān)閉狀態(tài)。有些開關(guān)具有兩個(gè)以上的狀態(tài),但是我們不會在Instructable中使用它們。

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

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

您可以看到,我們有兩個(gè)原理圖該圖,它們分別起作用。您可以使用任何這些原理圖來打開/關(guān)閉LED,因?yàn)樗鼈儓?zhí)行的功能相同,但方式不同。 Arduino Uno用作穩(wěn)定電源。左圖為上拉電阻,右圖為上拉電阻。通過查看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。

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

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

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

步驟6:串行通信

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

什么是串行通信?這是微控制器可以相互通信的一種方式。簡而言之,一個(gè)微控制器輸出(發(fā)送,傳輸)信號,在連接兩個(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é)的長度。 (我們不會對此進(jìn)行詳細(xì)介紹)默認(rèn)值為8位,但也可以為9位或10位。

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

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

在Arduino IDE中,有一個(gè)用于監(jiān)視串行接口的簡潔工具,您可以稱之為串行監(jiān)視器。要啟動(dò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的串行接口。為此,我們在括號中輸入波特率,在本草圖中為9600。

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

將此草圖上傳到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)行連接,以便您可以使用上拉和下拉電阻器和按鈕來創(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

}

在這里,沒有什么新內(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,而對于下拉電阻(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í),它將被讀為一系列(對于帶有下拉電阻的按鈕)。無論您按多快然后釋放它,讀取的值仍將是一系列的值,但永遠(yuǎn)不會是單個(gè)值(0000000 1111111 00000000)。有時(shí),在按下按鈕時(shí)此零變?yōu)?之前會有一些值更改(00000 1 0 1 00 11 0 11111111111111 )。或者您可能是一個(gè)按鈕的上帝,并且您能夠做到,每個(gè)按鈕一個(gè)按鈕按xD。 (小笑話)

這稱為反彈效果,解決方案是反跳算法。按鈕彈跳是電子學(xué)中的嚴(yán)重問題,并且有numeros硬件和軟件解決方案,但是對于Arduino IDE中的大多數(shù)草圖,最簡單的解決方案是軟件彈跳算法。向下電阻連接到數(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è)?好吧,我們在Arduino Uno中的微控制器是數(shù)字設(shè)備,這意味著它僅適用于數(shù)字信號。如果考慮電壓,電壓數(shù)字信號可以具有兩個(gè)電平:數(shù)字零或0V和數(shù)字一或5V。但是,幾乎所有其他功能都可以與模擬信號一起使用,模擬信號可以具有任何電平,電壓范圍在0V至5V之間。您可以在圖像上看到它。

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

Aref引腳Arduino Uno用作模擬轉(zhuǎn)換的電壓參考引腳。該參考電壓電平必須盡可能穩(wěn)定,準(zhǔn)確且無噪聲,以便在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è)置。 (我們不會在此Instructable中使用它)

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

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

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

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

什么是分壓器?好吧,這個(gè)名字說的一切都是由電路來分壓的。我們使用兩個(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,就像下部的圖像一樣。

您可以使用上面的公式來計(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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6526

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Arduino UNO Q開發(fā)板部署OpenClaw開源AI智能體

    近期 OpenClaw 邊緣 AI 火遍開發(fā)者社區(qū),百元開發(fā)板跑 AI 智能體的演示讓無數(shù)技術(shù)愛好者沸騰!想低成本上手這款開源 AI 智能體,實(shí)現(xiàn)本地語音控制、環(huán)境感知等實(shí)操功能,卻苦于找不到適配性強(qiáng)、易部署、性價(jià)比高的開發(fā)板?
    的頭像 發(fā)表于 03-09 10:03 ?847次閱讀
    在<b class='flag-5'>Arduino</b> <b class='flag-5'>UNO</b> Q<b class='flag-5'>開發(fā)板</b>部署OpenClaw開源AI智能體

    MCU 開發(fā)板大比拼:STM32、ESP32、Arduino、樹莓派誰更強(qiáng)?

    嵌入式開發(fā)板琳瑯滿目,STM32、ESP32、Arduino、RaspberryPi各有特色。新手容易糾結(jié):到底哪塊適合我的項(xiàng)目?本文整理了一份開發(fā)板對比速查表,幫你快速理清思路。一
    的頭像 發(fā)表于 01-09 19:03 ?1009次閱讀
    MCU <b class='flag-5'>開發(fā)板</b>大比拼:STM32、ESP32、<b class='flag-5'>Arduino</b>、樹莓派誰更強(qiáng)?

    UNO Q:開啟Arduino的全新未來

    圖源: * Arduino* 作者:Matt Campbell,貿(mào)澤電子專稿 發(fā)布日期: 2025年10月7日 Arduino UNO Q不僅是靈活UNO平臺的下一代產(chǎn)品,更是一種全新
    的頭像 發(fā)表于 12-15 11:46 ?906次閱讀

    RVMCU課堂「15」: 手把手教你玩轉(zhuǎn)RVSTAR—SPI總線通信篇

    10-64bit 軟件平臺 [size=14.6667px]NucleiStudio IDE 202102版 CoolTerm 硬件需求 RV-STAR開發(fā)板 Arduino UNO開發(fā)
    發(fā)表于 10-31 07:00

    STM32 Nucleo-64開發(fā)板技術(shù)解析與應(yīng)用指南

    ARDUINO^?^ Uno V3連接和ST morpho接頭,可輕松擴(kuò)展STM32 Nucleo開放式開發(fā)平臺的功能。該設(shè)有板載ST-LINK調(diào)試器/編程器,具有USB重新枚舉功能
    的頭像 發(fā)表于 10-22 14:26 ?946次閱讀
    STM32 Nucleo-64<b class='flag-5'>開發(fā)板</b>技術(shù)解析與應(yīng)用指南

    STM32WB07CC開發(fā)板技術(shù)解析與應(yīng)用指南

    STMicroelectronics NUCLEO-WB07CC STM32 Nucleo-64射頻開發(fā)板采用基于Arm? Cortex?M0+內(nèi)核的STM32WB07CC微控制器
    的頭像 發(fā)表于 10-17 17:11 ?1353次閱讀
    STM32WB07CC<b class='flag-5'>開發(fā)板</b>技術(shù)解析與應(yīng)用指南

    STM32 Nucleo-144開發(fā)板技術(shù)解析與應(yīng)用指南

    。 STMicroelectronics開發(fā)板支持多種連接選項(xiàng),包括Arduino、ST Zio和Morpho,同時(shí)集成了開關(guān)模式電源(SMPS),可實(shí)現(xiàn)高效的電源管理。該非常適合用于測試不同的性能和功耗配置,因此成為探索想
    的頭像 發(fā)表于 10-17 14:40 ?1262次閱讀
    STM32 Nucleo-144<b class='flag-5'>開發(fā)板</b>技術(shù)解析與應(yīng)用指南

    ?STM32 Nucleo-64開發(fā)板技術(shù)解析與應(yīng)用指南

    STMicroelectronics -C051C8 STM32 Nucleo-64開發(fā)板通過由STM32微控制器為概念測試和原型創(chuàng)建提供了一種經(jīng)濟(jì)實(shí)惠且靈活的途徑。該開發(fā)板支持ARDUINO
    的頭像 發(fā)表于 10-16 10:50 ?798次閱讀
    ?STM32 Nucleo-64<b class='flag-5'>開發(fā)板</b>技術(shù)解析與應(yīng)用指南

    Arduino UNO Q 登陸 DigiKey,現(xiàn)已開放預(yù)訂

    DigiKey 日前宣布,最新發(fā)布的 Arduino? UNO Q?現(xiàn)已可通過 DigiKey 官網(wǎng)進(jìn)行預(yù)訂。這款前沿新一代開發(fā)板集成了高性能微處理器、圖形加速功能以及專用微控制器,助力產(chǎn)品
    的頭像 發(fā)表于 10-13 14:55 ?645次閱讀
    <b class='flag-5'>Arduino</b> <b class='flag-5'>UNO</b> Q 登陸 DigiKey,現(xiàn)已開放預(yù)訂

    高通宣布收購 Arduino,加速普及前沿邊緣計(jì)算與 AI 技術(shù)

    “ ?全新 Arduino UNO Q 開發(fā)板Arduino App Lab 將為數(shù)百萬開發(fā)者帶來高通 Dragonwing 處理器的強(qiáng)
    的頭像 發(fā)表于 10-08 11:15 ?762次閱讀
    高通宣布收購 <b class='flag-5'>Arduino</b>,加速普及前沿邊緣計(jì)算與 AI 技術(shù)

    ?PIC32CZ CA70 Curiosity Ultra開發(fā)板用戶指南總結(jié)

    微控制器 (MCU)。該開發(fā)板集成編程器或調(diào)試器,無需額外硬件。PIC32CZ CA70開發(fā)板配備Arduino Uno R3兼容接口和Xplained Pro擴(kuò)展兼容接口。此
    的頭像 發(fā)表于 09-28 14:43 ?966次閱讀
    ?PIC32CZ CA70 Curiosity Ultra<b class='flag-5'>開發(fā)板</b>用戶指南總結(jié)

    如何在 NuMaker-IoT-M467 上使用 Arduino IDE 控制 Wi-Fi 模塊?

    在NuMaker開發(fā)板上,有一個(gè)ESP-12F Wi-Fi模塊;但是,Arduino IDE 中的 NuMaker UNO 包不提供該模塊的相關(guān)控制。如果您希望在 Arduino ID
    發(fā)表于 09-04 08:28

    如何用Arduino Nano/UNO R3開發(fā)板給另一個(gè)Arduino IDE不能下載的Arduino Nano/UNO R3開發(fā)板重新燒錄引導(dǎo)程序bootlaoder

    本文介紹了如何用能夠Arduino IDE下載的Arduino Nano/UNO R3開發(fā)板給另一個(gè)Arduino IDE不能下載的
    的頭像 發(fā)表于 08-08 20:16 ?3673次閱讀
    如何用<b class='flag-5'>Arduino</b> Nano/<b class='flag-5'>UNO</b> R3<b class='flag-5'>開發(fā)板</b>給另一個(gè)<b class='flag-5'>Arduino</b> IDE不能下載的<b class='flag-5'>Arduino</b> Nano/<b class='flag-5'>UNO</b> R3<b class='flag-5'>開發(fā)板</b>重新燒錄引導(dǎo)程序bootlaoder

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

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

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

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