旋轉(zhuǎn)編碼器是可以無(wú)限旋轉(zhuǎn)的設(shè)備。像這樣的簡(jiǎn)單對(duì)象沒有鍋?zhàn)幽菢拥恼鎸?shí)狀態(tài),因此,當(dāng)您啟動(dòng)時(shí),將無(wú)法簡(jiǎn)單地從變成它的編碼器中讀取信息。
什么是編碼器?
在位置感測(cè)中,編碼器是一種可以檢測(cè)機(jī)械運(yùn)動(dòng)并將其轉(zhuǎn)換為模擬或數(shù)字編碼輸出信號(hào)的設(shè)備。更具體地說,它測(cè)量位置,同時(shí)測(cè)量速度。加速度和方向可以從線性或旋轉(zhuǎn)運(yùn)動(dòng)的位置得出。
但是因?yàn)槟梢岳^續(xù)轉(zhuǎn)動(dòng)它,所以它始終沒有開始,中間或結(jié)束。但是,如果您跟蹤代碼中的旋轉(zhuǎn),則可以將其用作旋鈕輸入,并且可以根據(jù)需要隨意向上或向下旋轉(zhuǎn)。
旋轉(zhuǎn)編碼器如何工作?
像這樣的最簡(jiǎn)單的編碼器僅使用4個(gè)引腳,其中一個(gè)是接地引腳,另一個(gè)是Vcc。其他兩個(gè)引腳會(huì)改變狀態(tài),并且始終為高電平或低電平,因此它們總共只能有4種組合。00、01、10和11。
這稱為2位格雷碼。因此,當(dāng)您轉(zhuǎn)動(dòng)它時(shí),arduino可以說……好吧,您現(xiàn)在是01,現(xiàn)在您是00,所以您以這種方式移動(dòng)?;蛘吣F(xiàn)在是01,但是現(xiàn)在您是10,所以您必須以另一種方式移動(dòng)。您會(huì)看到該編碼器有5個(gè)引腳,另兩個(gè)僅是按下時(shí)接合的簡(jiǎn)單開關(guān)。
聽起來超級(jí)簡(jiǎn)單,有點(diǎn),但是我們可以做的是每次值改變時(shí)我們都可以檢查它的移動(dòng)方向。然后,如果我們每次旋轉(zhuǎn)一個(gè)值都增加一個(gè)值,而當(dāng)我們又移動(dòng)一步時(shí)就減少它。
自啟動(dòng)以來,我們可以跟蹤它已經(jīng)移動(dòng)了多少。因此,如果您想將旋鈕調(diào)到最大11,那就是您了。(我保證那里有一個(gè)雙關(guān)語(yǔ))
因此,旋轉(zhuǎn)編碼器的真正時(shí)髦之處在于它可以正常工作。每當(dāng)這些值改變時(shí),我們都需要知道。這可能很難,因?yàn)槿绻鸻rduino正在執(zhí)行某些操作(例如delay(1000)或您擁有什么)的過程中,我們將錯(cuò)過更改。
因此,我們需要一種方式對(duì)arduino說:我不在乎您在做什么,何時(shí)在做什么;如果您看到這兩個(gè)引腳中的任何一個(gè)都更改了狀態(tài),則放棄所有內(nèi)容并對(duì)其進(jìn)行管理。為此,我們需要一種叫做中斷的東西。
中斷很神奇
中斷插針是特殊的插針,可以阻止您的arduino并強(qiáng)迫它繼續(xù)前進(jìn)。因?yàn)樗鼈兪翘厥獾匿N,您只能在arduino上得到其中的一些;但是這些引腳可以監(jiān)視任何變化(從高到低/從低到高),下降(從高到低)或上升(從低到高)。
您可以將中斷功能連接到這些引腳,以便在發(fā)生更改時(shí)使用。它將刪除所有內(nèi)容并運(yùn)行該功能。它變得時(shí)髦,因?yàn)樗蚱屏薬rduino循環(huán)的基本線性特性。但是當(dāng)您掌握它時(shí),它可能會(huì)成為最強(qiáng)大的功能。
這些函數(shù)內(nèi)部使用的所有全局變量都有一個(gè)特殊的名稱。它們被稱為易失性變量,這是有充分理由的。它們的值可以隨時(shí)更改。
因此,如果您在循環(huán)中使用了兩次易失性,那么如果它在中斷功能期間被更改,則第二次可能不是相同的值。