第1步:零件清單
1 x Arduino(或Arduino兼容板。我使用來自moderndevice.com的BBB)
1 x 100K電阻(棕黑黃)
1 x 1K電阻(棕黑紅)
1 x 10K電阻(棕色黑色橙色)
1 x 22K電阻器(紅色紅色橙色)
1 x 33K電阻器(橙色橙色橙色)
1 x 68K電阻器(藍(lán)色灰色橙色)
5 x按鈕開關(guān)
面包板
一些連接它的電線
第二步:理論 - 快速回顧
《我建議您閱讀上一個(gè)Instructable的第2步和第3步了解詳細(xì)信息,但是如果你很懶(嗯,我很忙),我會給你一個(gè)快速的回顧。
通常的方法讀取按鈕是將其連接到數(shù)字輸入引腳和5V。當(dāng)您按下按鈕時(shí),輸入引腳連接到5V,您可以讀取引腳上的邏輯高電平。
對于Arduino的模擬引腳,您可以根據(jù)引腳上的電壓讀取介于0和1023之間的值。 。如果有0V,則讀取0,如果有5V,則讀取1023.中間的每個(gè)電壓將根據(jù)實(shí)際電壓返回一個(gè)比例值。從此可以看出,可以連接多個(gè)按鈕模擬引腳,如果你可以讓每個(gè)模塊引腳連接不同的電壓到模擬引腳。
事實(shí)證明,這很簡單。您只需為每個(gè)按鈕設(shè)置不同的分壓器。我將告訴你如何。
如果看一下電路,當(dāng)按鈕打開時(shí),R1充當(dāng)下拉電阻,但當(dāng)(例如)S4按鈕關(guān)閉時(shí),電流從5V流過R5,通過按鈕,通過R1和地面。 IO引腳將測量S4(或R5)與R1之間的電壓 - AKA由R1和R5形成分壓器。通過使用歐姆定律,我們可以計(jì)算出我們將在IO引腳上讀取大約2.75V或大約562.
PS:如果其中任何一個(gè)不清楚,你應(yīng)該真正閱讀以前的Instructable - 我會進(jìn)入更多詳情。另請參閱上面關(guān)于分壓器維基百科頁面的鏈接。
步驟3:面包板
您現(xiàn)在可以在面包板上構(gòu)建上一個(gè)電路。如果你看看前面的電路和我的面包板,你會注意到我使用了不同的電阻器。只要你記住一些事情,電阻就不是很關(guān)鍵。
首先,分壓器中兩個(gè)電阻之間的差異越大,值越接近地或者輸入電壓。
第二點(diǎn)是連接到按鈕的電阻值越接近,它們之間的差異越小,這可能使得難以讀取唯一值。
所以,我要做的主要是電路的變化是使R1成為47K電阻。通過使下拉電阻與范圍中間的值相同,您將獲得最大的讀數(shù)范圍。
在之前的Instructable中,我提到我有一些壞按鈕,而且有些讀數(shù)已經(jīng)全部結(jié)束了這個(gè)地方。我猜測電動車和壞按鈕等。..。..事實(shí)證明,這是一個(gè)糟糕的面包板。我正在使用兩塊面包板,我已經(jīng)使用了超過10年,似乎有些地方不再有良好的接觸了。我訂購了新的面包板,但我還在等。如果您的讀數(shù)不一致,請嘗試將按鈕移動到面包板上的其他位置。
步驟4:獲取必要讀數(shù)
下一步是獲取您需要檢查按下哪些按鈕的值。下載附加的草圖,并按照上一步中的電路設(shè)置運(yùn)行它。將草圖上傳到電路板后打開串行監(jiān)視器,然后按住按鈕(每次1個(gè))約2秒鐘。
對于每個(gè)按鈕,當(dāng)您按下并釋放它時(shí),您將看到值可能在很短的時(shí)間內(nèi)有點(diǎn)不一致,忽略那些不穩(wěn)定的值并記下剩下的最大和最小值。
這就是我的5個(gè)按鈕:
1(1K) - 》 930 - 935
2(10K) - 》 510 - 520
3(22K) - 》 315 - 326
4(47K) - 》 175 - 179
5(68K) - 》 127 - 135
正如您所看到的,通過可靠的連接,每個(gè)按鈕的范圍非常小。我所擁有的最大范圍是11點(diǎn),這意味著波動幅度約為0.054V。一點(diǎn)都不差。.有一個(gè)小的范圍沒有理由你不能使用E12范圍的電阻值在10到100K(10k,12k,15k,18k,22k,27k,33k)之間擴(kuò)展到12個(gè)按鈕,39k,47k,56k,68k,82k和100k),下拉電阻為27K - 33K。
步驟5:編碼
這是我進(jìn)行改進(jìn)的主要領(lǐng)域。即使先前的硬件工作并且代碼可以確定按下了哪個(gè)按鈕,只要您按下按鈕就會報(bào)告多個(gè)按鈕按下。
我現(xiàn)在需要的是讓Arduino讀取一個(gè)按鈕每次按下并釋放按鈕時(shí)按。附加的代碼執(zhí)行此操作。我也只是在檢查按鈕狀態(tài)之間延遲了50ms,這似乎足以讓它去抖動。
我改變的另一件事是清理代碼。前面的代碼為每個(gè)按鈕使用了3個(gè)常量。這個(gè)版本使用數(shù)組,使代碼更容易閱讀。為了使它適用于你的值,替換buttonLowRange和buttonHighRange數(shù)組中每個(gè)按鈕的值(你在上一步中得到的)。
完成后,您只需要在dealWithButtonPress方法中設(shè)置要將按鈕鏈接到的操作。現(xiàn)在它只是在串行輸出上打印一條消息,指示按下了哪個(gè)按鈕。
步驟6:擴(kuò)展它
正如我在步驟4中提到的那樣,這可能會以最小的努力擴(kuò)展到12個(gè)按鈕。
模擬輸入有一個(gè)10位分辨率,使我們在0V和參考電壓之間提供1023個(gè)值。如果將其除以12個(gè)按鈕,則可以看到每個(gè)按鈕必須在85個(gè)點(diǎn)的唯一范圍內(nèi)。為了安全起見,我會稱它不超過40 - 50。如果你這樣做,你將不得不使用相當(dāng)精確的電阻器(或測量它們并使用接近E12值的電阻器)你會相當(dāng)可能需要更好的方法去除按鈕。
從我的所有值都在11點(diǎn)的最大范圍內(nèi)的事實(shí),這似乎是完全可行的。
第7步:最后的想法
這個(gè)版本比以前的版本要好很多。我不喜歡的一件事是依靠延遲進(jìn)行去抖動。我會看看中斷,而不是那樣讀取按鈕,但是現(xiàn)在它運(yùn)行得很好。
正如我在步驟4中提到的,通過與開關(guān)的牢固連接,每個(gè)按鈕的范圍非常小。我得到的最大范圍是11分,這意味著沒有理由不使用10到100K之間的E12電阻值(10k,12k,15k,18k,22k,27k,33k)來擴(kuò)展到12個(gè)按鈕,39k,47k,56k,68k,82k和100k),下拉電阻約為27K - 33K。
如果有任何不清楚的地方,請隨時(shí)詢問,我會在必要時(shí)回答并更新Instructable。
感謝您抽時(shí)間閱讀!我希望你發(fā)現(xiàn)這個(gè)版本比第一個(gè)版本更有用。任何反饋或評級(眨眼,眨眼)將不勝感激。此外,如果您發(fā)現(xiàn)這有用,請花時(shí)間在微控制器競賽中為我投票。
這是一個(gè)非常大的項(xiàng)目的第一部分。希望這次我能完成它(我不打算在接下來的幾周里搬到另一個(gè)大陸)。請留意我創(chuàng)建時(shí)鐘的下一個(gè)教程,這個(gè)時(shí)鐘顯示多個(gè)時(shí)區(qū),一個(gè)RGB Orb,7段顯示,并將這一切與一個(gè)將更新狀態(tài)的在線應(yīng)用程序連接起來(如果可能在單個(gè)Arduino上)。
-
Arduino
+關(guān)注
關(guān)注
190文章
6498瀏覽量
192204
發(fā)布評論請先 登錄
LM26484 2 個(gè) DCDC 和 1 個(gè) LDO 可配置 PMIC數(shù)據(jù)手冊

LP8720系列 1 個(gè)降壓型 DC/DC 和 5 個(gè)具有 I2C 兼容接口的線性穩(wěn)壓器數(shù)據(jù)手冊

具有4個(gè)降壓穩(wěn)壓器、1個(gè)LDO和8位ADC的DA9080 PMIC數(shù)據(jù)手冊

評論