色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

完善資料讓更多小伙伴認識你,還能領(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ù),對其進行處理,然后再放回去,例如,這可能意味著將數(shù)字輸出之一從0V更改為5V。

2。電源

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

3。電源插針

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

4。模擬輸入引腳

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

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

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

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

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

7。板載編程電路

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

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

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

步驟2:下載和安裝Arduino IDE

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

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

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

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

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

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

第3步:第一個程序-心跳

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

當(dāng)您打開Arduino IDE時,為了正確設(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ù)之前,我們先解釋幾件事。首先,每個程序示例,甚至您編寫的程序都稱為草圖。在Arduino IDE中,我們將向您展示的幾乎所有內(nèi)容都有大量的草圖。因此,當(dāng)您想做某事而又不知道如何做時,應(yīng)該遍歷整個草圖列表,您可能會找到帶有程序示例的草圖。并且每個草圖都被很好地注釋,以便對每個動作進行解釋。

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

但是我們將對其進行一些更改,因為僅打開/關(guān)閉LED燈很無聊。讓我們模擬一個心跳。為了簡單起見,我們刪除了所有評論。更改像這樣的循環(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,并且遇到“打開串口錯誤。..”之類的錯誤,則應(yīng)閱讀此書。

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

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

loop()函數(shù)在setup()之后運行,并且無限期地反復(fù)運行,即所謂的“無限”循環(huán)函數(shù)。實際上,在電路板連接到電源時,它始終運行。這是因為電子設(shè)備中的程序永遠都不會到達末尾,因為如果發(fā)生這種情況,則意味著您的設(shè)備與關(guān)閉設(shè)備一樣好。在此草圖中,我們將數(shù)字引腳13設(shè)置為ond,然后將數(shù)字引腳13設(shè)置為低值(0V或GND; LED熄滅),然后延遲該時間或等待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àn)在我們可以繼續(xù)。在第16、17和18行上,定義了三個變量。首先是“ led”,在其中存儲連接到LED的數(shù)字I/O引腳的數(shù)量。在此草圖中為9。其他兩個變量用于更改LED的亮度,第一個是亮度級別,第二個是代表兩個亮度級別之間增加/減少步長的數(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)該是不言自明的。如果沒有,讓我們快速進行一下。在第32行上,我們向當(dāng)前LOB添加一個階躍值,然后詢問LOB是否小于或等于0(LOB不能為負值,因為您知道PHYSICS),并且大于255。為什么是255?因為PWM輸出的分辨率為256,所以從0到255的值。這在analogWrite()函數(shù)中使用,因此電壓電平以0到0的255到5V的255的形式表示(稍后將對此進行詳細介紹)。如果不滿足此條件,則程序?qū)⒗^續(xù)執(zhí)行下一條指令,即delay(30)。因為它太快了,所以delay()只是減慢了這個過程。如果沒有這行代碼,您將看不到LED衰落的效果。..但是,如果滿足條件,則我們將LOB步號更改為負,以便LOB開始下降。下次滿足此條件時,負LOB步長將變?yōu)闊o窮大,依此類推,無限大。如果您希望進一步減慢處理速度,只需將delay(30)中的30更改為其他更高的值。

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

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

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

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

LED-發(fā)光二極管是一種特殊的二極管,當(dāng)電流流過該二極管時會發(fā)出彩色光(LED的較長腳為陽極,而另一腳為陰極)。當(dāng)我們超過電流和電壓限制時,無論連接的方向如何,二極管也可能被破壞,因此請小心閱讀數(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)時,它將保持該狀態(tài),但是當(dāng)您更改按鈕的狀態(tài)時,僅在將其保持在該狀態(tài)時,它才會保持在該狀態(tài)。當(dāng)您停止按按鈕時,它將返回其默認狀態(tài),在大多數(shù)情況下為關(guān)閉狀態(tài)。有些開關(guān)具有兩個以上的狀態(tài),但是我們不會在Instructable中使用它們。

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

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

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

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

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

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

步驟6:串行通信

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

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

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

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

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

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

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

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

在Arduino IDE中,有一個用于監(jiān)視串行接口的簡潔工具,您可以稱之為串行監(jiān)視器。要啟動它,請轉(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è)置偵聽器進行通信。 Serial.available()函數(shù)偵聽串行通信線路上的消息,并且當(dāng)消息緩沖區(qū)中充滿數(shù)據(jù)(即使只有一個字符)時,Serial.available()也會返回消息緩沖區(qū)中的字節(jié)數(shù)。我們等待該消息,然后將該消息放入消息緩沖區(qū)中,進行讀取,然后檢查其特定值。當(dāng)消息為“ 1”時,它將打開一個指示燈,并將消息寫回到串行線“ LED亮”。要寫入串行線,我們使用Serial.println()函數(shù)。您只需用引號將要打印的文本寫上并放在Serial.println()的括號中。

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

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

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

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

但是我們將使這項工作生效。我們需要稍微更改一下DigitalReadSerial草圖,以便我們可以同時使用兩個按鈕。將此代碼復(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ā)送到串行的消息一口氣排隊。首先,我們創(chuàng)建一個名為message的字符串變量,然后向其中添加文本。 String()函數(shù)將整數(shù)值轉(zhuǎn)換為字符串,以便可以將其串聯(lián)為消息字符串。

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

上拉:1.拉下:0

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

上拉:0。下拉:1

步驟7:按鈕彈跳

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

這稱為反彈效果,解決方案是反跳算法。按鈕彈跳是電子學(xué)中的嚴重問題,并且有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,然后啟動串行監(jiān)視器。

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

步驟8:ADC

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

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

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

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

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

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

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

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

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

Vout = Vin * R2/(R1 + R2)

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

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

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

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

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)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Arduino
    +關(guān)注

    關(guān)注

    188

    文章

    6471

    瀏覽量

    187308
收藏 人收藏

    評論

    相關(guān)推薦

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

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

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

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

    基于Arduino的串口通信項目

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

    正點原子fpga開發(fā)板不同型號

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

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

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

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

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

    RISC-V有沒有類似Arduino那樣的開發(fā)板

    使用ARduino開發(fā),由于有第三方提供的庫支持,在開發(fā)上非常方便。RISC-V有沒有在Arduino IDE上可以使用的開發(fā)板
    發(fā)表于 06-23 12:32

    RL78/G24快速原型開發(fā)板資料包大全

      RL78/G24快速原型開發(fā)板資料包大全  RL78/G24 快速原型開發(fā)板配備RL78/G24微控制器,是一種專門用于各種應(yīng)用開發(fā)試產(chǎn)的原型開發(fā)板。它只需連接USB線即可編寫/調(diào)
    發(fā)表于 06-04 16:21 ?2次下載

    SiliconLabs攜手Arduino演示基于MGM240模塊的新型Nano Matter開發(fā)板

    Arduino Nano Matter開發(fā)板,從而將Matter協(xié)議引入Arduino生態(tài)系統(tǒng),為廣大的開發(fā)人員提供一個快速涉足Matter互聯(lián)互通設(shè)計的絕佳途徑。
    的頭像 發(fā)表于 04-11 17:35 ?668次閱讀
    SiliconLabs攜手<b class='flag-5'>Arduino</b>演示基于MGM240模塊的新型Nano Matter<b class='flag-5'>開發(fā)板</b>

    Arduino Uno R3開發(fā)版簡化

    本人小白,想把Atmega328p-AU芯片單獨拿出來用來控制LED陣列,但Arduino R3開發(fā)板的原理圖真看不懂!想知道除了328芯片還需要什么以及線路怎么連接,感謝各位大佬!
    發(fā)表于 04-02 08:38

    fpga開發(fā)板是什么?fpga開發(fā)板有哪些?

    FPGA開發(fā)板是一種基于FPGA(現(xiàn)場可編程門陣列)技術(shù)的開發(fā)平臺,它允許工程師通過編程來定義和配置FPGA芯片上的邏輯電路,以實現(xiàn)各種數(shù)字電路和邏輯功能。FPGA開發(fā)板通常包括FPGA芯片、時鐘模塊、電源模塊、輸入輸出接口等組
    的頭像 發(fā)表于 03-14 18:20 ?2062次閱讀

    fpga開發(fā)板使用教程

    FPGA開發(fā)板的使用教程主要包括以下幾個關(guān)鍵步驟。
    的頭像 發(fā)表于 03-14 15:50 ?1172次閱讀

    如何使用Arduino UNO和電位器控制伺服電機

    在本Arduino伺服電機教程中,您將學(xué)習(xí)如何使用Arduino UNO和電位器控制伺服電機。
    的頭像 發(fā)表于 02-11 10:11 ?2867次閱讀
    如何使用<b class='flag-5'>Arduino</b> <b class='flag-5'>UNO</b><b class='flag-5'>板</b>和電位器控制伺服電機

    fpga開發(fā)板與linux開發(fā)板區(qū)別

    FPGA開發(fā)板與Linux開發(fā)板是兩種不同的硬件開發(fā)平臺,各自具有不同的特點和應(yīng)用場景。在以下的文章中,我將詳細介紹FPGA開發(fā)板和Linux開發(fā)板
    的頭像 發(fā)表于 02-01 17:09 ?2307次閱讀

    如何使用arduino控制接觸器?

    我將避免鉛酸電池過載。我想通過使用近 30A 的接觸器和 arduino uno 來控制電池過載。如何使用arduino控制接觸器?
    發(fā)表于 01-22 07:14
    主站蜘蛛池模板: 女人的选择hd| 午夜伦理:伦理片| 久久精品热99看| 久久极品视频| 快乐激情网| 欧美高清69vivo| 涩涩涩涩爱网站| 亚洲国产高清视频在线观看| 亚洲中文字幕国产综合| 综合色中色| 糙汉顶弄抽插HHHH| 国产精品欧美久久久久天天影视| 国产小视频免费看| 久久99热狠狠色AV蜜臀| 免费一级片网站| 三八成人网| 亚洲区 bt下载| 91av影院| 古装性艳史电影在线看| 精品国产高清自在线看| 嫩草影院一区| 无套日出白浆在线播放| 伊人网伊人网| 爱穿丝袜的麻麻3d漫画acg| 国产久久亚洲美女久久| 久久久免费热线精品频| 人妻体内射精一区二区| 亚洲精品久久午夜麻豆| 99热久久精品国产一区二区| 国产精品久久久久AV麻豆| 久久妇女高潮几次MBA| 全部老头和老太XXXXX| 亚洲精品久久99蜜芽尤物TV| 91avcom| 国产高清在线观看| 久久笫一福利免费导航| 日久精品不卡一区二区| 伊人色综合久久天天网| 国产AV精品久久久毛片| 旧里番ovaの催○セイ活指导| 桃色园社区|