精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎樣制作可以控制兩個單獨LED狀態的按鈕

454398 ? 來源:網絡整理 ? 作者:網絡整理 ? 2019-11-12 11:41 ? 次閱讀

步驟1:理論

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

對于此設置,我們希望打開或關閉LED。對于上面的簡單示例,這本身就是一個問題,因為Arduino中的循環功能每秒重復數百次。即使最快的按鍵也可以多次打開和關閉。第一個問題我們將使用一個或兩個簡單的布爾值來克服,這將在接下來的幾頁中進行解釋。

第二個問題是長按功能。我們如何觸發此功能而不先觸發短按功能?答案很簡單。按下按鈕時觸發長按功能,釋放按鈕后觸發短按功能。通過在長按功能激活之前在屏幕上釋放一個對象,可以再次在智能手機上觀察到這一點。

在下一步中,我們將創建硬件設置,如果需要,請跳過此設置您已經處于這個階段。..

步驟2:硬件

怎樣制作可以控制兩個單獨LED狀態的按鈕

硬件非常簡單,所以我不會給您帶來太多負擔。

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

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

第3步:詳細軟件第1部分

現在詳細說明代碼的每個步驟。如果您想直接閱讀完整的代碼,則將在步驟5中找到

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

p》 int LED1 = 12;

int LED2 = 13;

int button = 3;

接下來,我們需要一些布爾值。這些將用于打開或關閉LED的狀態

boolean LED1State = false;

boolean LED2State = false;

現在另外兩個布爾值。第一個將根據按鈕的狀態進行更改。這將使代碼可以檢測到按下或釋放按鈕后的第一個循環。第二個功能有兩個功能,它將允許代碼停止長按多次激活,并在長按后釋放按鈕時停止激活短按功能。

boolean buttonActive = false;

boolean longPressActive = false;

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

long buttonTimer = 0;

long longPressTime = 250;

現在進行設置,這又非常簡單,我們只需設置引腳模式即可。

void setup() {

pinMode(LED1, OUTPUT);

pinMode(LED2, OUTPUT);

pinMode(button, INPUT);

}

第4步:詳細軟件部分2

現在進入循環。我將對此進行細分一點一點地解釋發生了什么。程序要做的第一件事是讀取按鈕的狀態。這將為我們提供下面的代碼,并允許我們為未按下和按下狀態創建函數,請記住,短按功能在釋放按鈕時發生。

if (digitalRead(button) == HIGH) {

//Button pressed

} else {

//Button not pressed

}

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

if (buttonActive == false) {

buttonActive = true;

buttonTimer = millis();

}

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

我們還檢查longPressActive布爾值是否為false,因為一旦激活長按功能,我們便會將此布爾值設置為true以停止重復激活。一旦將按鈕按住所需的時間,我們將翻轉LED1State布爾值的狀態,布爾值將相應地翻轉LED相應地連接到 HIGH 或 LOW 的引腳。

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

longPressActive = true;

LED1State = !LED1State;

digitalWrite(LED1, LED1State);

}

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

if (buttonActive == true) {

buttonActive = false;

}

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

if (longPressActive == true) {

longPressActive = false;

} else {

LED2State = !LED2State;

digitalWrite(LED2, LED2State);

}

步驟5:完整代碼

這是準備上傳到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:獎金-兩個按鈕6個功能

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

短按按鈕1

短按按鈕2

短按按鈕1和2

長按按鈕1

長按按鈕2

長按按鈕1和2

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

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

這是代碼

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個LED添加第三個按鈕,或為30個LED添加四個按鈕。也許還有一段時間:)
責任編輯:wv

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    242

    文章

    23140

    瀏覽量

    658515
  • 按鈕
    +關注

    關注

    0

    文章

    134

    瀏覽量

    12741
收藏 人收藏

    評論

    相關推薦

    兩個循環里后臺讀取串口信息了,和前面板有一按鈕 怎么去控制另外的同一動作呢

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

    兩個開關電源可以并聯使用嗎

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

    開關可以控制電路的通和斷對嗎

    開關是電子電路中非常重要的一種元件,它可以用來控制電路的通斷狀態。通過控制開關的開合,可以實現對電路的
    的頭像 發表于 08-25 09:52 ?591次閱讀

    單穩態觸發器的兩個工作狀態是什么

    單穩態觸發器是一種數字邏輯電路,廣泛應用于各種電子設備和系統中。它具有兩個工作狀態:穩定狀態和暫態狀態。 單穩態觸發器的工作原理 單穩態觸發器是一種具有
    的頭像 發表于 08-22 10:11 ?362次閱讀

    觸發器的兩個穩定狀態分別是什么

    觸發器作為數字電路中的基本邏輯單元,具有兩個穩定狀態,這兩個狀態通常用于表示二進制數碼中的0和1。
    的頭像 發表于 08-12 11:01 ?637次閱讀

    雙穩態電路的兩個穩定狀態是什么

    雙穩態電路是一種具有兩個穩定狀態的電子電路,廣泛應用于數字電路、通信系統、存儲器等領域。 雙穩態電路的基本概念 雙穩態電路是一種具有兩個穩定狀態的電路,即在沒有外部輸入信號的情況下,電
    的頭像 發表于 08-11 15:00 ?1082次閱讀

    雙穩態觸發器的兩個基本性質是什么

    的定義 雙穩態觸發器是一種具有兩個穩定狀態的邏輯電路,通常由兩個交叉耦合的反相器或門電路構成。在沒有外部輸入信號的情況下,雙穩態觸發器可以保持在兩個
    的頭像 發表于 08-11 10:08 ?555次閱讀

    雙穩態觸發器的兩個穩定狀態是什么

    雙穩態觸發器的兩個穩定狀態通常被稱為“0”狀態和“1”狀態,這兩個狀態
    的頭像 發表于 08-11 10:05 ?693次閱讀

    兩個銅片可以形成原電池嗎

    兩個銅片本身不能形成原電池,因為原電池的工作原理依賴于兩個不同電位的電極材料之間的氧化還原反應。
    的頭像 發表于 05-21 16:23 ?841次閱讀

    arcgis中如何關聯兩個屬性表

    在ArcGIS中,關聯兩個屬性表是一重要的操作,可以通過此操作將兩個表中的數據關聯起來,以便進行分析和查詢。下面是詳細介紹如何在ArcGIS中實現屬性表的關聯。 首先,我們需要明確
    的頭像 發表于 02-25 11:01 ?4013次閱讀

    沒有電位器,用兩個按鈕可以實現變頻器調速嗎?

    沒有電位器,用兩個按鈕可以實現變頻器調速嗎? 變頻器是一種廣泛應用于電機調速的設備,它能夠調節電機的轉速,提高電機的效率,并且降低能耗。電位器是變頻器調速中常用的組件,但是在某些情況下,由于種種原因
    的頭像 發表于 02-18 16:55 ?1725次閱讀

    兩個電位器控制變頻器,如何接線?

    是一種可調節電阻器,可以通過改變電阻值來控制電流或電壓。變頻器是一種能夠調整電機轉速的設備,讓電機在不同的頻率下工作。 3. 確定電位器的安裝位置。在這個場景中,我們需要兩個電位器來控制
    的頭像 發表于 02-05 10:13 ?4902次閱讀

    將動態指示段重定向到單獨LED

    有時,除了數字指示器之外,還需要單獨LED。它們可以連接到微控制器的單獨引腳,但您也可以節省
    發表于 02-02 16:49 ?542次閱讀
    將動態指示段重定向到<b class='flag-5'>單獨</b>的<b class='flag-5'>LED</b>

    stm32一定時器能同時控制兩個燈以不同頻率閃爍嗎?

    STM32的定時器功能強大,**STM32的定時器可以同時控制兩個燈以不同頻率閃爍** 。
    的頭像 發表于 12-13 10:43 ?2004次閱讀

    兩個硬盤2系統開機切換

    切換兩個硬盤上的系統是一種常見的行為,可以讓用戶在不同的操作系統之間進行切換,以滿足不同的需求。在本文中,我們將詳細介紹如何配置和使用兩個硬盤上的系統進行切換。本文將分為以下幾個部分進行討論:硬件
    的頭像 發表于 11-28 15:08 ?7429次閱讀