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

