觸摸式開關(guān)壞了怎么辦(觸摸開關(guān)失靈怎么辦)
前沿拓展:
網(wǎng)拍上容易買到類似左下圖的4路觸控模塊,對Arduino控制板而言,它相當(dāng)于右下角的4組開關(guān),所以程序不需要引用特別的程序庫:
此觸控模塊的主要構(gòu)成電路如下,負責(zé)處理電容觸控信號的核心是TTP224芯片。TTP224的技術(shù)文件指出,每個觸控感應(yīng)端可連接0~50pF的電容,借以調(diào)整觸控感應(yīng)的靈敏度,此模塊采用的電容值為30pF。每當(dāng)觸控端感應(yīng)到人體碰觸時,對應(yīng)的OUT1~OUT4將輸出高電位,模塊上的LED也將被點亮。
相較于上一篇文章的簡易DIY觸控電路,使用觸控IC的好處是穩(wěn)定、不易受外界環(huán)境影響(如:汗水、油污)和噪聲干擾,而且程序也簡單許多。
使用4路觸控開關(guān)模塊制作LED調(diào)光器本單元實驗將使用4路觸控模塊的其中3個開關(guān),當(dāng)作LED燈的開關(guān)、調(diào)亮和調(diào)暗控制界面。
實驗材料
Arduino Uno控制板×14路觸控開關(guān)模塊×1電阻:680Ω×1LED×1(顏色不拘)LED接在Arduino的第5腳(或其他具PWM輸出的接腳),觸控模塊的3個輸出,接Arduino的10~12腳。面包板的接線示范:
本單元程序?qū)⒆龀觥竼螕糸_、再按一下關(guān)」的開關(guān)效果。每碰觸一次開關(guān),開關(guān)模塊就會輸出一個脈沖(方波):
當(dāng)觸控信號從低電位變成高電位,代表有人碰觸了開關(guān),程序需要依照第5腳的LED狀態(tài),決定:
若LED燈是亮著的,則要關(guān)閉它。若LED燈是熄滅的,則要點亮它。偵測單一開關(guān)信號變化的程序:
const byte TOUCH_PIN = 10; // 觸控接腳 const byte LED_PIN = 13; // LED接腳 bool powerOn = false; // LED電源是否開啟,預(yù)設(shè)「否」 bool lastStatus = LOW; // 開關(guān)的上次狀態(tài) bool btnStatus = LOW; // 開關(guān)的當(dāng)前狀態(tài) void setup() { pinMode(TOUCH_PIN, INPUT); pinMode(LED_PIN, OUTPUT); } void loop() { // 讀取開關(guān)當(dāng)前的狀態(tài) btnStatus = digitalRead(TOUCH_PIN); // 如果目前開關(guān)的狀態(tài)是「高電位」,且之前的狀態(tài)是「低電位」… if (btnStatus == HIGH && lastStatus == LOW) { powerOn = !powerOn; // 反相電源狀態(tài) digitalWrite(LED_PIN, powerOn); } lastStatus = btnStatus; // 紀錄訊號狀態(tài) }編譯、上傳程序之后,碰一下編號2的觸控板,可點亮LED;再碰一下觸控板,則關(guān)閉LED。
自定義觸鍵結(jié)構(gòu)數(shù)據(jù)本單元程序有三組觸控鍵,需要建立如下的變數(shù)來儲存接腳和開關(guān)狀態(tài):
bool powerOn = false; // LED電源是否開啟,預(yù)設(shè)「否」 bool btnStatus = LOW; // 觸鍵的當(dāng)前狀態(tài) byte touchPin1 = 10; // 第1個觸鍵的接腳 bool lastStatus1 = LOW; // 第1個觸鍵的上次狀態(tài) byte touchPin2 = 11; // 第2個觸鍵的接腳 bool lastStatus2 = LOW; // 第2個觸鍵的上次狀態(tài) byte touchPin3 = 12; // 第3個觸鍵的接腳 bool lastStatus3 = LOW; // 第3個觸鍵的上次狀態(tài)為了讓代碼更清晰易讀,我們可以替具有相同數(shù)據(jù)結(jié)構(gòu)的觸控鍵,定義如下的struct類型(struct類型定義的語法說明,請參閱「Mifare RFIDRC522模塊實驗(二):C語言的結(jié)構(gòu)(struct)與類型定義(typedef)說明」):
// 宣告觸鍵的自訂結(jié)構(gòu)類型 typedef struct { byte pin; // 按鍵的接腳編號 bool lastStatus; // 上次的狀態(tài) } key;如此,便能用底下的敘述宣告電源鍵的接腳及其預(yù)設(shè)狀態(tài):
key powerKey = { 10, LOW };觸控LED調(diào)光器的完整代碼如下。「調(diào)亮」和「調(diào)暗」鍵只有在電源開啟(即,powerOn值為true)的狀態(tài)才有作用;燈光亮度值范圍介于0~255。
const byte LED_PIN = 5; // LED燈的接腳 const byte PWR_LED = 13; // 電源指示燈的接腳 bool powerOn = false; // LED電源是否開啟,預(yù)設(shè)「否」 bool btnStatus; // 按鈕狀態(tài) int pwmVal = 0; // 電源輸出值 // 宣告觸鍵的自訂結(jié)構(gòu)類型 typedef struct { byte pin; // 按鍵的接腳編號 bool lastStatus; // 上次的狀態(tài) } key; // 宣告電源鍵的接腳和預(yù)設(shè)狀態(tài) key powerKey = { 10, LOW }; // 宣告「調(diào)亮」鍵的接腳和預(yù)設(shè)狀態(tài) key upKey = { 11, LOW }; // 宣告「調(diào)暗」鍵的接腳和預(yù)設(shè)狀態(tài) key downKey = { 12, LOW }; void setup() { Serial.begin(9600); pinMode(powerKey.pin, INPUT); pinMode(upKey.pin, INPUT); pinMode(downKey.pin, INPUT); pinMode(LED_PIN, OUTPUT); pinMode(PWR_LED, OUTPUT); } void loop() { // 讀取電源鍵的狀態(tài) btnStatus = digitalRead(powerKey.pin); // 如果電源鍵的訊號從低電位變成高電位… if (btnStatus && powerKey.lastStatus == LOW) { powerOn = !powerOn; // 反相電源狀態(tài) digitalWrite(PWR_LED, powerOn); if (powerOn) { // 若powerOn為true… // 依照pwmVal的值點亮LED analogWrite(LED_PIN, pwmVal); } else { // 關(guān)閉LED燈 digitalWrite(LED_PIN, LOW); } } // 紀錄這次的電源鍵訊號狀態(tài) powerKey.lastStatus = btnStatus; // 讀取「調(diào)亮」鍵的狀態(tài) btnStatus = digitalRead(upKey.pin); // 若「有開啟電源」且「此按鍵訊號是高電位」且「前次訊號是低電位」 if (powerOn && btnStatus && upKey.lastStatus == LOW) { // 增加亮度值,每次增加10,不能超過255。 if ((pwmVal+10) <= 255) { pwmVal += 10; Serial.println(pwmVal); analogWrite(LED_PIN, pwmVal); } } upKey.lastStatus = btnStatus; // 讀取「調(diào)暗」鍵的狀態(tài) btnStatus = digitalRead(downKey.pin); if (powerOn && btnStatus && downKey.lastStatus == LOW) { // 減少亮度值,最低值為0 if ((pwmVal10) >= 0) { pwmVal = 10; Serial.println(pwmVal); analogWrite(LED_PIN, pwmVal); } } downKey.lastStatus = btnStatus; }拓展知識:
- 寧波市燃氣灶維修(寧波萬家樂燃氣灶維修)12-04
- 1電視頻道沒了怎么恢復(fù)(快速解決方法)
- 2海信42k11p怎么折開(海信42K11P:全方位展示超清畫質(zhì))
- 3Fardior燃氣灶售后維修電話號碼查詢(Fardior燃氣灶售后維修電話查詢)
- 4艾木歐防盜門沒電打不開怎么辦(艾木歐防盜門沒電無法啟動?解決方法總結(jié))
- 5ENS指紋鎖售后熱線(ENS指紋鎖售后熱線-專業(yè)解決您的問題)
- 6打電話顯示關(guān)機是什么原因(如何解決手機無法接通問題)。
- 7v500hk1 cs5故障維修(v500hk1 cs5故障維修指南)
- 8創(chuàng)維液晶電視的遙控器怎么調(diào)試(創(chuàng)維電視遙控器調(diào)試指南)
- 9林內(nèi)空氣能售后服務(wù)官網(wǎng)熱線(林內(nèi)空氣能售后服務(wù)官網(wǎng)熱線)
- 10朝友精工保險柜24小時售后電話(朝友精工保險柜24小時售后電話 - 完善24小時保
-
貼片代碼怎么看(深入解讀貼片代碼:洞悉世界編碼秘密)
2025-06-07
-
怎么拆彩電顯像管管座(拆解彩電顯像管管座技巧——30字以內(nèi))
2025-06-07
-
壁掛爐一天多少方氣(壁掛爐每天消耗幾方氣能?)
2025-06-07
-
海歌壁掛爐官網(wǎng)(海歌壁掛爐:讓溫暖環(huán)繞你)
2025-06-07
-
德能空氣能故障代碼e5(空調(diào)故障代碼E5的原因與解決方法)
2025-06-07


