- 1、本文档共22页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Arduino_04.ppt(1344KB).ppt
第四章 開關電路與LED跑馬燈 認識開關 讀取數位輸入值 if條件式 撰寫迴圈程式 認識陣列 認識埠口與位移操作 認識開關 開關的外觀與電路符號 或 水銀開關 磁簧開關 … 參閱 4-2 單刀雙擲(Single Pole Double Throw) 讀取數位輸入值 讀取數位輸入值的語法: 電路的接法: 參閱 4-6 按壓式 開關 Arduino 的所有數位和類比接腳都能讀取/輸出 0 與 1 訊號。只要輸入值超過電源電壓的一半(如: 2.6V),就代表高電位(1);若輸入值低於0.25V,則代表低電位(0)。 下拉(pull-down)電阻 上拉(pull-up)電阻 按下開關輸入為“1”(高電位) 按下開關輸入為“0”(低電位) 數位輸出/入的值不是0就是1因此用布林類型即可。 (true 或 false) 要求高反應速率的電子訊號切換,上拉電阻常使用 5KΩ、4.7KΩ或 1KΩ。 開關實驗麵包板電路 參閱 4-12 因 Arduino 處理器的輸出電流不高(每支腳位最多輸出 40mA),加上板子第 13 腳內接一個 1KΩ電阻,因此不會燒毀 LED。(第 13 腳的 LED 可以不接,因為 Arduino 板子上已經有了)。 條件判斷、比較與邏輯運算子 參閱 4-13 比較運算子 符號 意義 == 相等 != 不相等 = = 邏輯運算子 名稱 符號 運算式 且(AND) A B 或(OR) ∥ A ∥B 反相(NOT) ! !A if (條件式) { 程序 A ; } if (條件式) { 程序 A ; } else { 程序 B ; } if (條件式A) { 程序 A ; } else if (條件式B) { 程序 B ; } 條件判斷式敘述 依據開關的狀態,點亮或關閉LED。 參閱 4-13 // LED 接數位第13腳 // 開關接數位第2腳 // LED 接腳設定成輸出 // 開關接腳設定成輸入 // 讀取開關的數值 // 如果開關是高電位 // 打開 LED 燈 // 關閉 LED 燈 實驗結果 編譯並上傳程式碼後,按著、放開幾次微動開關試試看,理論上, LED 將在按著開關時被點亮,放開開關時熄滅。 但實際上,LED 可能在你放開(或說關閉)開關之後,仍然點亮著。 這是機械式開關的彈跳(bouncing)現象所導致。解決方式如後 : 參閱 4-13 消除開關的彈跳訊號 機械式開關在切換的過程中,電子信號並非立即從0變成1(或從1變成0),而會經過短暫的,忽高忽低變化的彈跳現象。 為了避免上述狀況,程式(或者硬體)需要加入所謂的消除彈跳(de-bouncing)處理機制。 最簡易方式,就是在發現輸入訊號變化時,先暫停10~30毫秒,然後再讀取一次,以便確定入值。 參閱 4-15 如下圖所示,在「按一下」操作中,訊號改變了兩次 : 消除開關的彈跳訊號 沿用上一節的 LED 和開關電路,把軟體需求改成 : 「按一下開關點亮 LED、再按一下開關則熄滅」。 宣告一個 click 變數,記錄訊號改變次數,每當此變數值為 2,代表用戶按了一下按鈕。具備過濾彈跳訊號的開關程式碼如下 : 01 const byte LED = 13; 02 const byte SW = 2; 03 boolean lastState = LOW; 04 boolean toggle = LOW; 05 byte click = 0; 06 07 void setup() { 08 pinMode(LED, OUTPUT); 09 pinMode(SW, INPUT); lastState = digitalRead(SW); } 12 參閱 4-15 // LED 的腳位 // 開關的腳位 // 記錄上次的開關狀態,預設為「低電位」 // 輸出給 LED的訊號,預設為「低電位」 // 開關訊號的改變次數,預設為 0 // LED 接腳設定為「輸出」 // 開關接腳設定為「輸入」 // 讀取開關的初始值 消除開關的彈跳訊號 void loop() { boolean b1 = digitalRead(SW); if (b1 != lastState) { delay(20); boolean b2 = digit
文档评论(0)