Re: [請益] arduino Leonardo 當開關使用

看板Electronics作者 (.......................)時間4年前 (2020/04/24 18:12), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《mOuOm (mOuOm)》之銘言: : 我的開關設計很特別,當開關被按下不放時會模擬鍵盤送出某個特定按鍵訊號到電腦,類似usb keyboard的方式,這個目前都沒問題 : 我是用digitalread來讀取2號數位針腳有沒有接地的方式達成 : 但是想請教這邊的大神,有沒有方法可以在按下控制器按鍵時僅觸發一次,但是在控制器彈起時不會送訊號到電腦,直到下次在被按壓時才會再次觸發,想來想去還是沒有想到合適的方法,目前先用delay時間來控制 : 更新一下 : 後來用了其他寫法來達成我的需求,目前運作沒毛病,但偶爾在放開開關時會出現按壓的情況 : 不確定是不是線路雜訊造成 : 我開關設置距離較遠,目前用網路線加上微動開關連接pin2跟GND來當作開關 因為開關訊號會有彈跳的情況, 像下圖這樣 https://i.imgur.com/7KNPedn.png
如果在硬體上沒有對訊號做濾波的話, 就要在軟體中加上 debounce 處理 #define DEBOUNCE_TIME 3 int pin_state[DEBOUNCE_TIME]; void setup() { int init_state = digitalRead(2); for(int i = 0; i < DEBOUNCE_TIME; i++) pin_state[i] = init_state; } void main() { int new_state = digitalRead(2); int debounce_result = 0; for(int i = 0; i < DEBOUNCE_TIME-1; i++) { pin_state[i] = pin_state[i+1]; debounce_result += pin_state[i]; } pin_state[DEBOUNCE_TIME-1] = new_state; debounce_result += new_state; if(debounce_result == 0) { // 連續 DEBOUNCE_TIME 次讀到 0(LOW) 才做處理 // 送出 keyboard 訊號 } // 每 10ms 讀取一次訊號 delay_ms(10); } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.38.58.253 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Electronics/M.1587723146.A.7FD.html
文章代碼(AID): #1UehkAVz (Electronics)
文章代碼(AID): #1UehkAVz (Electronics)