吴忠躺衫网络科技有限公司

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣制作可以控制兩個(gè)單獨(dú)LED狀態(tài)的按鈕

454398 ? 來源:網(wǎng)絡(luò)整理 ? 作者:網(wǎng)絡(luò)整理 ? 2019-11-12 11:41 ? 次閱讀

步驟1:理論

首先介紹一些理論。 使用按鈕打開燈很簡單,如果按鈕顯示 HIGH (按下時(shí)),那么我們可以通過寫連接到的輸出引腳來打開LED 》 HIGH 。按鈕讀取 LOW 后,我們可以再次將輸出引腳設(shè)置為 LOW 以關(guān)閉LED。這就是我們所說的瞬時(shí)的。

對于此設(shè)置,我們希望打開或關(guān)閉LED。對于上面的簡單示例,這本身就是一個(gè)問題,因?yàn)?a target="_blank">Arduino中的循環(huán)功能每秒重復(fù)數(shù)百次。即使最快的按鍵也可以多次打開和關(guān)閉。第一個(gè)問題我們將使用一個(gè)或兩個(gè)簡單的布爾值來克服,這將在接下來的幾頁中進(jìn)行解釋。

第二個(gè)問題是長按功能。我們?nèi)绾斡|發(fā)此功能而不先觸發(fā)短按功能?答案很簡單。按下按鈕時(shí)觸發(fā)長按功能,釋放按鈕后觸發(fā)短按功能。通過在長按功能激活之前在屏幕上釋放一個(gè)對象,可以再次在智能手機(jī)上觀察到這一點(diǎn)。

在下一步中,我們將創(chuàng)建硬件設(shè)置,如果需要,請?zhí)^此設(shè)置您已經(jīng)處于這個(gè)階段。..

步驟2:硬件

怎樣制作可以控制兩個(gè)單獨(dú)LED狀態(tài)的按鈕

硬件非常簡單,所以我不會(huì)給您帶來太多負(fù)擔(dān)。

首先是兩個(gè)LED。我們將每個(gè)陽極連接到Arduino的引腳12和13,然后將陰極接地。

按鈕連接到5V輸出和Arduino的引腳3,然后用10kOhm電阻接地。

第3步:詳細(xì)軟件第1部分

現(xiàn)在詳細(xì)說明代碼的每個(gè)步驟。如果您想直接閱讀完整的代碼,則將在步驟5中找到

。首先讓我們看一下該設(shè)置所需的變量,從簡單的引腳參考開始。

p》 int LED1 = 12;

int LED2 = 13;

int button = 3;

接下來,我們需要一些布爾值。這些將用于打開或關(guān)閉LED的狀態(tài)

boolean LED1State = false;

boolean LED2State = false;

現(xiàn)在另外兩個(gè)布爾值。第一個(gè)將根據(jù)按鈕的狀態(tài)進(jìn)行更改。這將使代碼可以檢測到按下或釋放按鈕后的第一個(gè)循環(huán)。第二個(gè)功能有兩個(gè)功能,它將允許代碼停止長按多次激活,并在長按后釋放按鈕時(shí)停止激活短按功能。

boolean buttonActive = false;

boolean longPressActive = false;

最后兩個(gè)變量。第一個(gè)變量用于記錄第一次按下按鈕的時(shí)間。第二個(gè)變量是您希望按住按鈕的時(shí)間長度(以毫秒為單位),以激活長按功能。可以更改為您選擇的圖形。

long buttonTimer = 0;

long longPressTime = 250;

現(xiàn)在進(jìn)行設(shè)置,這又非常簡單,我們只需設(shè)置引腳模式即可。

void setup() {

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

pinMode(button, INPUT);

}

第4步:詳細(xì)軟件部分2

現(xiàn)在進(jìn)入循環(huán)。我將對此進(jìn)行細(xì)分一點(diǎn)一點(diǎn)地解釋發(fā)生了什么。程序要做的第一件事是讀取按鈕的狀態(tài)。這將為我們提供下面的代碼,并允許我們?yōu)槲窗聪潞桶聪聽顟B(tài)創(chuàng)建函數(shù),請記住,短按功能在釋放按鈕時(shí)發(fā)生。

if (digitalRead(button) == HIGH) {

//Button pressed

} else {

//Button not pressed

}

在按下按鈕的部分中,我們要做的第一件事是測試buttonActive變量,在設(shè)置時(shí)將其設(shè)置為false 。如果當(dāng)前為假,則表示程序正在檢測首次按下的按鈕。這是因?yàn)樵谧x取false之后,我們立即將其設(shè)置為true,只有釋放按鈕才能將其設(shè)置為false。我們還記錄了按鈕第一次被按下的時(shí)間。

if (buttonActive == false) {

buttonActive = true;

buttonTimer = millis();

}

按鈕被按下部分的下一步是測試我們將按鈕按下了多長時(shí)間。 。為此,我們測試當(dāng)前時(shí)間,減去第一次按下的時(shí)間(以毫秒為單位),然后將其與希望激活長按之前的時(shí)間進(jìn)行比較。

我們還檢查longPressActive布爾值是否為false,因?yàn)橐坏┘せ铋L按功能,我們便會(huì)將此布爾值設(shè)置為true以停止重復(fù)激活。一旦將按鈕按住所需的時(shí)間,我們將翻轉(zhuǎn)LED1State布爾值的狀態(tài),布爾值將相應(yīng)地翻轉(zhuǎn)LED相應(yīng)地連接到 HIGH 或 LOW 的引腳。

if ((millis() - buttonTimer 》 longPressTime) && (longPressActive == false)) {

longPressActive = true;

LED1State = !LED1State;

digitalWrite(LED1, LED1State);

}

移至未按下代碼部分的按鈕。我們將檢查的第一件事是buttonActive布爾值是否為true。如果將其設(shè)置為true,則代碼是自釋放按鈕以來的第一次循環(huán)。然后它將布爾值設(shè)置回false,以允許上面的代碼檢測到再次按下按鈕。

if (buttonActive == true) {

buttonActive = false;

}

在上面的if語句中,在我們檢測到第一個(gè)循環(huán)時(shí)釋放按鈕后,我們接下來將檢查長按功能是否已激活,這將放棄兩個(gè)可能的步驟。如果長按被激活,我們只需將longPressActive設(shè)置回false即可允許程序再次長按。如果未激活,我們將像第一個(gè)那樣翻轉(zhuǎn)第二個(gè)LED的狀態(tài)。

if (longPressActive == true) {

longPressActive = false;

} else {

LED2State = !LED2State;

digitalWrite(LED2, LED2State);

}

步驟5:完整代碼

這是準(zhǔn)備上傳到Arduino的完整代碼。

int LED1 = 12;

int LED2 = 13;

int button = 3;

boolean LED1State = false;

boolean LED2State = false;

long buttonTimer = 0;

long longPressTime = 250;

boolean buttonActive = false;

boolean longPressActive = false;

void setup() {

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

pinMode(button, INPUT);

}

void loop() {

if (digitalRead(button) == HIGH) {

if (buttonActive == false) {

buttonActive = true;

buttonTimer = millis();

}

if ((millis() - buttonTimer 》 longPressTime) && (longPressActive == false)) {

longPressActive = true;

LED1State = !LED1State;

digitalWrite(LED1, LED1State);

}

} else {

if (buttonActive == true) {

if (longPressActive == true) {

longPressActive = false;

} else {

LED2State = !LED2State;

digitalWrite(LED2, LED2State);

}

buttonActive = false;

}

}

}

步驟6:獎(jiǎng)金-兩個(gè)按鈕6個(gè)功能

如果我們有兩個(gè)按鈕怎么辦?那么我們就有6種功能,如下所示。

短按按鈕1

短按按鈕2

短按按鈕1和2

長按按鈕1

長按按鈕2

長按按鈕1和2

該程序的工作方式與第一個(gè)代碼相同,但有一些顯著變化。

首先,LED的數(shù)量更多,這意味著變量更多,當(dāng)然還有額外的按鈕。但是最大的改變是激活長按或短按的時(shí)間。一旦達(dá)到這兩個(gè)點(diǎn)中的任何一個(gè),而不是打開或關(guān)閉LED,我們就可以針對每種功能采取三種可能的措施。結(jié)果六個(gè)可能的LED之一點(diǎn)亮或熄滅。為了確定要采取的操作,我們檢查每個(gè)按鈕的狀態(tài)以及這些要點(diǎn)的狀態(tài),并做出相應(yīng)的響應(yīng)。

這是代碼

int LED1 = 8;

int LED2 = 9;

int LED3 = 10;

int LED4 = 11;

int LED5 = 12;

int LED6 = 13;

int button1 = 3;

int button2 = 4;

long buttonTimer = 0;

long buttonTime = 250;

boolean buttonActive = false;

boolean longPressActive = false;

boolean button1Active = false;

boolean button2Active = false;

boolean LED1Active = false;

boolean LED2Active = false;

boolean LED3Active = false;

boolean LED4Active = false;

boolean LED5Active = false;

boolean LED6Active = false;

void setup() {

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

pinMode(LED3, OUTPUT);

pinMode(LED4, OUTPUT);

pinMode(LED5, OUTPUT);

pinMode(LED6, OUTPUT);

pinMode(button1, INPUT);

pinMode(button2, INPUT);

}

void loop() {

if (digitalRead(button1) == HIGH) {

if (buttonActive == false) {

buttonActive = true;

buttonTimer = millis();

}

button1Active = true;

}

if (digitalRead(button2) == HIGH) {

if (buttonActive == false) {

buttonActive = true;

buttonTimer = millis();

}

button2Active = true;

}

if ((buttonActive == true) && (millis() - buttonTimer 》 buttonTime) && (longPressActive == false)) {

longPressActive = true;

if ((button1Active == true) && (button2Active == true)) {

LED4Active = !LED4Active;

digitalWrite(LED4, LED4Active);

} else if((button1Active == true) && (button2Active == false)) {

LED5Active = !LED5Active;

digitalWrite(LED5, LED5Active);

} else {

LED6Active = !LED6Active;

digitalWrite(LED6, LED6Active);

}

}

if ((buttonActive == true) && (digitalRead(button1) == LOW) && (digitalRead(button2) == LOW)) {

if (longPressActive == true) {

longPressActive = false;

} else {

if ((button1Active == true) && (button2Active == true)) {

LED1Active = !LED1Active;

digitalWrite(LED1, LED1Active);

} else if ((button1Active == true) && (button2Active == false)) {

LED2Active = !LED2Active;

digitalWrite(LED2, LED2Active);

} else {

LED3Active = !LED3Active;

digitalWrite(LED3, LED3Active);

}

}

buttonActive = false;

button1Active = false;

button2Active = false;

}

}

從這里我們甚至可以為可能的14個(gè)LED添加第三個(gè)按鈕,或?yàn)?0個(gè)LED添加四個(gè)按鈕。也許還有一段時(shí)間:)
責(zé)任編輯:wv

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • led
    led
    +關(guān)注

    關(guān)注

    242

    文章

    23362

    瀏覽量

    663233
  • 按鈕
    +關(guān)注

    關(guān)注

    0

    文章

    134

    瀏覽量

    12865
收藏 人收藏

    評論

    相關(guān)推薦

    ads1013有兩個(gè)模擬輸入,可以接不同的兩個(gè)模擬輸入嗎?

    ads1013有兩個(gè)模擬輸入,可以接不同的兩個(gè)模擬輸入嗎,驅(qū)動(dòng)程序中怎么分別讀兩個(gè)模擬輸入的轉(zhuǎn)換結(jié)果?
    發(fā)表于 12-02 08:02

    兩個(gè)循環(huán)里后臺(tái)讀取串口信息了,和前面板有一個(gè)按鈕 怎么去控制另外的同一個(gè)動(dòng)作呢

    我在兩個(gè)循環(huán)里 讀取串口信息了, 怎么去控制另外的同一個(gè)動(dòng)作呢 大佬們,這個(gè)可以實(shí)現(xiàn)嗎,。目前搞到了是串口接收循環(huán)里,收到字符串,就比較長度,符合就觸發(fā)來另外循環(huán)的
    發(fā)表于 10-19 09:25

    兩個(gè)開關(guān)電源可以并聯(lián)使用嗎

    兩個(gè)開關(guān)電源并聯(lián)使用是一個(gè)相對復(fù)雜的話題,涉及到電子電路設(shè)計(jì)、電源管理、安全規(guī)范等多個(gè)方面。 1. 開關(guān)電源的基本原理 開關(guān)電源是一種通過電子開關(guān)元件(如晶體管、MOSFET等)快速切換來控制電流
    的頭像 發(fā)表于 10-09 16:04 ?2214次閱讀

    控制按鈕開關(guān)是交流還是直流

    控制按鈕開關(guān)可以是交流(AC)或直流(DC)供電,具體取決于其設(shè)計(jì)和應(yīng)用場景。在電氣系統(tǒng)中,按鈕開關(guān)通常用于控制電路的開啟和關(guān)閉,它們
    的頭像 發(fā)表于 09-11 14:54 ?851次閱讀

    光電傳感器兩個(gè)按鈕怎么調(diào)節(jié)

    光電傳感器是一種將光信號(hào)轉(zhuǎn)換為電信號(hào)的傳感器,廣泛應(yīng)用于自動(dòng)化控制、機(jī)器人、安防監(jiān)控等領(lǐng)域。在實(shí)際應(yīng)用中,光電傳感器通常需要通過按鈕進(jìn)行調(diào)節(jié),以適應(yīng)不同的工作環(huán)境和需求。 一、光電傳感器的基本原理
    的頭像 發(fā)表于 09-04 14:45 ?1599次閱讀

    開關(guān)可以控制電路的通和斷對嗎

    開關(guān)是電子電路中非常重要的一種元件,它可以用來控制電路的通斷狀態(tài)。通過控制開關(guān)的開合,可以實(shí)現(xiàn)對電路的
    的頭像 發(fā)表于 08-25 09:52 ?1104次閱讀

    單穩(wěn)態(tài)觸發(fā)器的兩個(gè)工作狀態(tài)是什么

    單穩(wěn)態(tài)觸發(fā)器是一種數(shù)字邏輯電路,廣泛應(yīng)用于各種電子設(shè)備和系統(tǒng)中。它具有兩個(gè)工作狀態(tài):穩(wěn)定狀態(tài)和暫態(tài)狀態(tài)。 單穩(wěn)態(tài)觸發(fā)器的工作原理 單穩(wěn)態(tài)觸發(fā)器是一種具有
    的頭像 發(fā)表于 08-22 10:11 ?651次閱讀

    觸發(fā)器的兩個(gè)穩(wěn)定狀態(tài)分別是什么

    觸發(fā)器作為數(shù)字電路中的基本邏輯單元,具有兩個(gè)穩(wěn)定狀態(tài),這兩個(gè)狀態(tài)通常用于表示二進(jìn)制數(shù)碼中的0和1。
    的頭像 發(fā)表于 08-12 11:01 ?1638次閱讀

    雙穩(wěn)態(tài)電路的兩個(gè)穩(wěn)定狀態(tài)是什么

    雙穩(wěn)態(tài)電路是一種具有兩個(gè)穩(wěn)定狀態(tài)的電子電路,廣泛應(yīng)用于數(shù)字電路、通信系統(tǒng)、存儲(chǔ)器等領(lǐng)域。 雙穩(wěn)態(tài)電路的基本概念 雙穩(wěn)態(tài)電路是一種具有兩個(gè)穩(wěn)定狀態(tài)的電路,即在沒有外部輸入信號(hào)的情況下,電
    的頭像 發(fā)表于 08-11 15:00 ?1740次閱讀

    雙穩(wěn)態(tài)觸發(fā)器的兩個(gè)基本性質(zhì)是什么

    的定義 雙穩(wěn)態(tài)觸發(fā)器是一種具有兩個(gè)穩(wěn)定狀態(tài)的邏輯電路,通常由兩個(gè)交叉耦合的反相器或門電路構(gòu)成。在沒有外部輸入信號(hào)的情況下,雙穩(wěn)態(tài)觸發(fā)器可以保持在兩個(gè)
    的頭像 發(fā)表于 08-11 10:08 ?824次閱讀

    雙穩(wěn)態(tài)觸發(fā)器的兩個(gè)穩(wěn)定狀態(tài)是什么

    雙穩(wěn)態(tài)觸發(fā)器的兩個(gè)穩(wěn)定狀態(tài)通常被稱為“0”狀態(tài)和“1”狀態(tài),這兩個(gè)狀態(tài)
    的頭像 發(fā)表于 08-11 10:05 ?1194次閱讀

    三菱plcFx2N2AD可以兩個(gè)壓力傳感器嗎

    三菱PLC FX2N-2AD是一款具有模擬輸入功能的可編程邏輯控制器,可以接收模擬信號(hào)并將其轉(zhuǎn)換為數(shù)字信號(hào),以便進(jìn)行進(jìn)一步的處理和控制。在某些應(yīng)用場景中,可能需要同時(shí)接入兩個(gè)壓力傳感器
    的頭像 發(fā)表于 06-20 10:13 ?841次閱讀

    兩個(gè)銅片可以形成原電池嗎

    兩個(gè)銅片本身不能形成原電池,因?yàn)樵姵氐墓ぷ髟硪蕾囉?b class='flag-5'>兩個(gè)不同電位的電極材料之間的氧化還原反應(yīng)。
    的頭像 發(fā)表于 05-21 16:23 ?1165次閱讀

    arcgis中如何關(guān)聯(lián)兩個(gè)屬性表

    在ArcGIS中,關(guān)聯(lián)兩個(gè)屬性表是一個(gè)重要的操作,可以通過此操作將兩個(gè)表中的數(shù)據(jù)關(guān)聯(lián)起來,以便進(jìn)行分析和查詢。下面是詳細(xì)介紹如何在ArcGIS中實(shí)現(xiàn)屬性表的關(guān)聯(lián)。 首先,我們需要明確
    的頭像 發(fā)表于 02-25 11:01 ?4475次閱讀

    沒有電位器,用兩個(gè)按鈕可以實(shí)現(xiàn)變頻器調(diào)速嗎?

    沒有電位器,用兩個(gè)按鈕可以實(shí)現(xiàn)變頻器調(diào)速嗎? 變頻器是一種廣泛應(yīng)用于電機(jī)調(diào)速的設(shè)備,它能夠調(diào)節(jié)電機(jī)的轉(zhuǎn)速,提高電機(jī)的效率,并且降低能耗。電位器是變頻器調(diào)速中常用的組件,但是在某些情況下,由于種種原因
    的頭像 發(fā)表于 02-18 16:55 ?1925次閱讀
    桑植县| KK百家乐官网娱乐城 | 星河国际娱乐场| 百家乐官网路子技巧| 百家乐娱乐平台备用网址| bet365娱乐场注册| 澳门百家乐官网下路写法| 百家乐和的几率| 明珠娱乐| 抚顺县| 星河百家乐官网的玩法技巧和规则 | 大发888官网多少| 百家乐官网怎么赢博彩正网| 百家乐网上投注代理商| 易博全讯网| 狮威百家乐官网的玩法技巧和规则| 老虎机遥控器多少钱| 海王星国际娱乐| 战神百家乐官网的玩法技巧和规则| 威尼斯人娱乐城赌博网站| 真人百家乐官网软件博彩吧| 温州市百家乐鞋业有限公司| 长岭县| 百家乐群11889| 多彩娱乐城| 至尊百家乐官网于波| 大发888老l| 自贡百家乐官网娱乐场开户注册| 威尼斯人娱乐网网上百家乐| 乌拉特前旗| 赌博百家乐秘笈| 百家乐官网从哪而来| 百家乐园鼎盛娱乐场| 百家乐官网国际娱乐| 百家乐跟路技巧| 金木棉百家乐网络破解| 稳赢的百家乐官网投注方法| 阿玛尼百家乐的玩法技巧和规则| 好用百家乐官网分析软件| 金字塔百家乐的玩法技巧和规则| 真人百家乐官网导航|