在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

電子發燒友App

硬聲App

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

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

3天內不再提示
電子發燒友網>電子資料下載>電子資料>一種配置任意數量開關的方法

一種配置任意數量開關的方法

2022-10-31 | zip | 0.03 MB | 次下載 | 免費

資料介紹

描述

背景和起源

在本文中,我介紹了一種配置任意數量的開關的方法,這些開關鏈接到單個(公共)中斷服務例程 (ISR)。該方法完全是軟件驅動的,不依賴于開關的任何物理接線來中斷引腳。

這篇文章源于之前開發一個庫的工作,該庫可以有效地處理任何類型的開關并以不同的方案連接 - ez_switch_lib.

總而言之,它ez_switch_lib 提供了一些有趣且獨特的功能:

  • 可以配置任何開關類型,例如按鈕、撥動開關等
  • 支持常見的開關接線方案
  • 可同時配置多個不同類型和接線方案的開關
  • 開關去抖動會自動處理,這也可以由用戶配置
  • 可以隨時測試開關的狀態,例如測試開關是否處于轉換狀態、打開或關閉等
  • 開關可以自動鏈接到其他數字輸出引腳,以便在發生切換時也觸發鏈接的輸出引腳(設置或清除)

本文重點介紹的正是后者,將開關鏈接到其他數字輸出引腳,并以此為基礎。

將開關鏈接到中斷

本文展示了我們如何能夠輕松地將任意數量的、任何類型的、以不同方案接線的開關鏈接(關聯)到中斷或任何額外的接線 - 沒有電線將開關連接到中斷!

為了使示例簡單,我們將使用單個 ISR 來處理所有開關,但這是可變的 - 同樣,我們可以根據需要使用任意數量的 ISR 和外部中斷引腳(當然,要達到微控制器的設計限制)。

那么,我們如何做到這一點呢?

如上所述,該ez_switch_lib 庫提供了一個特定功能,允許將開關鏈接到數字輸出引腳,以便在啟動開關時自動設置/清除相關的輸出引腳。這個函數被調用link_switch_to_output 并且只有三個參數

  • 數字輸出引腳要鏈接到的開關的 ID
  • 要鏈接的數字輸出引腳的引腳號
  • 鏈接輸出引腳的初始設置(即 LOW 或 HIGH)

一旦聲明/定義了開關,就可以使用上述功能將其與數字輸出引腳相關聯。這是該方法的精髓——我們需要做的就是定義一個 ISR,使用該attachInterrupt 函數來處理任何合適的外部中斷數字引腳上的開關事件。

我們將看到我們如何能夠聲明許多不同類型的開關,并以不同的方式連接,但這樣每個開關在啟動時都會自動觸發一個定義的和常見的 ISR。此 ISR 處理開關的作用不在本文的范圍內,但讀者將看到 ISR 中存在各種“鉤子”的位置,并草繪添加特定的最終用戶代碼來處理每種可能的開關中斷事件類型。

讓我們看一下示例草圖及其配置的開關。

示例草圖將使用七個數字引腳,六個用于開關,一個用于公共中斷引腳,根據下表分配和接線:

pYYBAGNYtJ6APm91AADkJ2DUs3Y010.png
開關配置
?

(使用面包板按照上表和下圖連接組件。)

需要注意的是:

  • 我們使用數字引腳 2 作為分配給 ISR 的公共引腳,觀察該引腳沒有任何物理連接
  • ' circuit_C1' 和 ' circuit_C2' 是ez_switch_lib庫中的保留字,分別代表一個帶有外部 10k ohm 下拉電阻的電路和一個基本電路(除了開關本身沒有額外的組件)

我們將數字引腳 3-8 分配給開關,如下所示:

  • 3 個與下拉 10k 歐姆電阻器相連的撥動開關 - ' circuit_C1'(參見下面的示意圖)
  • 3 x 按鈕開關直接接線,' circuit_C2'(參見下面的示意圖)
  • 所有開關都是軟件鏈接到一個公共數字引腳 2(ISR 引腳),link_switch_to_output在每個開關創建后使用該函數(add_switch 函數)

上述開關配置是任意的,用于展示ez_switch_lib庫的靈活性,開關可以鏈接到單個 ISR,但可以使用任何組合開關類型、開關電路布線和多個 ISR。

素描設計

草圖有六個主要部分:

  • ez_switch_lib聲明-ez_switch_lib庫的聲明(即#include "ez_switch_lib.h")。要運行草圖,您需要將ez_switch_lib庫文件(.cpp、.h 和 .txt)復制到 Arduino 庫目錄到名為“ ez_switch_lib”的目錄中,即../Arduino/libraries/ez_switch_lib(請參閱ez_switch_lib文章以訪問和下載這些文件)。
  • create instance - 創建和建立大小等于我們希望配置的交換機數量(這里是六個)的庫實例。草圖為我們用來為所有功能和資源添加前綴的實例分配名稱'',例如' '等。 ez_switch_libez_switch_libmy_switchesez_switch_lib my_switches.add_switch(..)
  • 定義交換機配置數據- 定義我們的交換機配置的數據。草圖的核心是開關配置數據,它保存在一個名為 ' ' 的二維數組中,每一行定義與每個開關關聯的數據,如下所示: my_switch_data
column[0] - 表示開關類型(' button_switch' 或 ' toggle_switch')。(同樣,' button_switch' 或 ' toggle_switch' 是ez_switch_lib庫保留字并定義所考慮的開關類型。)
column[1] - 這是分配給開關的數字引腳
column[2] - 表示開關接線方案(保留字' circuit_C1'或' circuit_C2')
  • setup 函數——你會注意到,這是我們使用該add_switch函數將每個開關聲明到庫的地方,并將公共中斷引腳分配給每個開關(link_switch_to_output函數)。
  • 主循環處理。在檢查時,主循環似乎根本沒有做太多事情——它只是使用該read_switch 函數不斷地輪詢每個開關,尋找狀態變化。這是因為該方法完全是軟件驅動的,因此需要不斷地尋找狀態變化。當狀態改變發生時,會發生兩件事:
1. 開關相關聯的輸出引腳(公共中斷引腳)自動升為高電平(RISING),從而觸發 ISR,該 ISR 將處理致動開關的開關事件,并且
2. 完成 ISR 處理后,該read_switch函數將返回一個值 ' switched'(也是一個保留的ez_switch_lib 庫字),如果需要,該值可以在主循環中進一步處理 - 兩口相同的櫻桃!
  • 中斷服務程序 (ISR) - 一個相當簡單的 ISR,旨在使用可用變量識別不同的開關類型及其相關特性。ez_switch_lib 您會注意到 ISR 只是向串行監視器報告觸發了哪個開關事件。在一般情況下,不推薦使用串行打印 I/O,這里使用它只是為了提供視覺確認,即草圖正在做它應該做的事情。根據您的項目需要,在每個“掛鉤”處添加您自己的最終用戶代碼。

好的,它是如何工作的?

ez_switch_lib 消除了我們對開關彈跳或開關接線方式的任何擔憂。它還可以為我們提供有關開關的非常有用的狀態信息,例如開關類型、開關是否正在轉換或已轉換或其他情況、撥動開關當前是打開還是關閉等。但最重要的是,它為我們提供了能夠自動將開關鏈接到另一個數字輸出引腳,當相關開關被啟動時,我們可以使用它來觸發 ISR。

現在,在我們的示例草圖中,每個聲明的開關觸發相同的 ISR,所以問題是 ISR 如何確定哪個開關已啟動,即哪個開關觸發了 ISR?再次,ez_switch_lib 迎合這個。它提供最后一個啟動的開關的開關 ID。正是這一特性為 ISR 提供??了處理正確切換的方法。特定的庫變量稱為“ last_switched_id”。

有了這些知識,ISR 就可以處理驅動開關的特定要求。

都好?是的,只要您認識到按鈕和撥動式開關各有其自己的特征,ISR 也必須滿足這些特征。具體來說:

按鈕式開關- 在可以說已完全切換之前,驅動周期會從關閉再返回關閉。
撥動式開關- 撥動開關有兩個驅動周期 - 它們可以從關閉或開關轉換。

同樣,ez_switch_lib 允許這些特定的開關特性,為最終用戶(和 ISR)提供適當處理每種事件類型的方法。

當您檢查 ISR 代碼時,您將看到它如何具體而簡單地處理上述場景。

此外,我們不要忘記,雖然 ISR 將處理開關驅動,但還有一個額外的點可以應用進一步的處理。如果您檢查主循環,您將看到每個開關都被直接和不斷地輪詢和讀取。正是這種對開關的輪詢允許觸發開關的 ISR。但是,每次觸發開關 ISR 時,開關本身也將被視為已啟動 (' switched')。如果開關已啟動,則輪詢循環中函數的答案read_switch將顯示為 ' '。switched因此,如果需要,或者如果開關沒有鏈接的 ISR 輸出引腳,它提供了在主輪詢循環中添加進一步開關處理的額外機會。

誰說我們不能吃蛋糕?!!

最后

我希望你對這篇文章感興趣,并且值得為你自己的項目考慮。我確實建議您更全面地瀏覽ez_switch_lib 這篇文章并下載其用戶指南嬰兒床單,以全面了解功能。


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1U盤一鍵制作
  2. 23.84 MB   |  3次下載  |  免費
  3. 2ch341驅動
  4. 0.18 MB   |  1次下載  |  免費
  5. 3貼片電阻阻值代號
  6. 0.08 MB   |  1次下載  |  1 積分
  7. 4DS-CM5A H24-CN-V2
  8. 524.28 KB  |  1次下載  |  免費
  9. 5基于Linux的液晶顯示屏驅動技術的研究與應用
  10. 14.59 MB   |  次下載  |  1 積分
  11. 6研華AIMB-218工控主板用戶手冊
  12. 4.45 MB   |  次下載  |  1 積分
  13. 7研華AIMB-275工控主板用戶手冊
  14. 3.11 MB   |  次下載  |  1 積分
  15. 8ST NPI 新上架產品【DCP0606Y】
  16. 1.35 MB  |  次下載  |  免費

本月

  1. 1人形機器人電機驅動和傳感報告
  2. 4.27 MB   |  60次下載  |  免費
  3. 2晶體三極管的電流放大作用詳細說明
  4. 0.77 MB   |  32次下載  |  2 積分
  5. 3九陽豆漿機高清原理圖
  6. 2.47 MB   |  31次下載  |  1 積分
  7. 4雙極型三極管放大電路的三種基本組態的學習課件免費下載
  8. 4.03 MB   |  25次下載  |  1 積分
  9. 5多級放大電路的學習課件免費下載
  10. 1.81 MB   |  21次下載  |  2 積分
  11. 6Altium Designer元件庫
  12. 17.11 MB   |  11次下載  |  免費
  13. 7STM32F10xxx單片機編程手冊
  14. 0.29 MB   |  5次下載  |  免費
  15. 8HT8691R內置BOOST升壓模塊的D類音頻功率放大器中文手冊
  16. 1.77 MB   |  4次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935127次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
  4. 1.48MB  |  420063次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費下載
  8. 340992  |  191382次下載  |  10 積分
  9. 5十天學會AVR單片機與C語言視頻教程 下載
  10. 158M  |  183339次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81586次下載  |  10 積分
  13. 7Keil工具MDK-Arm免費下載
  14. 0.02 MB  |  73814次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分
主站蜘蛛池模板: 在线黄色免费观看 | 久久精品99 | 女人被两根一起进3p在线观看 | 制服丝袜国产精品 | 99视频在线永久免费观看 | 天天狠天天透天干天天怕处 | 国产香港日本三级在线观看 | 操女网站| 欧美性黑人极品hd网站 | 最新久久免费视频 | 久久婷婷综合五月一区二区 | 4438x亚洲最大 | 国产乱码免费卡1卡二卡3卡四 | 在线你懂的| 国产91久久最新观看地址 | 99久久精品免费看国产 | 日本黄色美女视频 | 偷偷狠狠的日日日日 | 亚洲黄色三级网站 | 一区二区三区四区无限乱码在线观看 | 精品久久久久久中文字幕欧美 | 黄免费视频 | 一区二区高清在线 | 国模私拍在线观看 | 最近观看免费高清视频 | 狠狠干狠狠操视频 | 欧美激情 在线 | 午夜视频在线免费播放 | 米奇影院777| 男女一级大黄 | 99久久综合 | 久久美女免费视频 | 99久在线 | 色五月丁香五月综合五月 | 天堂综合网| 国产色司机在线视频免费观看 | 亚洲黄色官网 | 日本卡一卡2卡3卡4精品卡无人区 | 黄色欧美 | 亚洲国产精品综合久久久 | 国产欧美精品一区二区色综合 |