Re: [問題] 基礎問題:Arduino按鈕沒被按下的時間計

看板ASM作者 (還得努力學習)時間7年前 (2017/04/17 23:37), 7年前編輯推噓2(200)
留言2則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《p790807 (卡丘)》之銘言: : 如題,事實上我想要做到和processing串連,類似按下按鈕會呈現某種畫面的效果。 : 而一開始Processing會有初始畫面 : 我有兩個按鈕A和B。 : 當A被按下"一次"時,會傳送Serial.write(1), : 而processing收到訊號1後,會"一直"停留在畫面a; : 同理,當B被按下一次時,會傳送Serial.write(2), : processing收到訊號2後,才會從原本的畫面a改呈現並停留在畫面b, : 而今天我想要做的是,當A和B按鈕都有一段時間沒有被按下時, : processing會再回到初始畫面。 不好意思野人獻曝一下XD 我的想法上是 如果A、B都沒有按下,就讓arduino delay 1ms 用個變數計算delay的次數,也就是幾個ms 當這個次數大於你要的"一段時間" 就執行Serial.write(3); //或是其他的數值代表AB一段時間沒被按下 而另外要注意一點,這個變數在A按下 || B按下時要記得重置歸零 影像處理的部分照原本的寫法再加上處理接收3的部分,這邊就不贅述了 不知道這樣的想法有沒有其他沒注意到的問題? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.125.33.221 ※ 文章網址: https://www.ptt.cc/bbs/ASM/M.1492443455.A.E54.html

04/18 01:27, , 1F
Serial.write(3); 看來這行會隨著loop永遠執行下去
04/18 01:27, 1F
感謝樓上提醒 cheuegou大的意思應該是說當我的想法 當執行完Serial.write(3)之後 如果一段時間(假設1 min) 內沒有再按下A 或 B 則會造成初始畫面會再顯示一次 如果初始畫面是一張圖,我們應該看不出來(螢幕就是重新顯示同一張圖而已) 如果初始畫面是影片的話,可能會產生影片播到一半又重頭開始播放的問題 要解決這個方法可能就使用一個狀態變數(旗標)的方式 透過此變數來標示目前是否處於顯示初始畫面的情況 #define MAX_IDLE_TIME 60000; //1 min int buttonPinA =1; int buttonPinB =2; int idle_counter = 0; int is_showing_init_img = 0; //=1: is showing init img ; =0: is not void setup(){ pinMode(buttonPinA, INPUT); pinMode(buttonPinB, INPUT); Serial.begin(9600); } void loop(){ if (digitalRead(buttonPinA)==HIGH && digitalRead(buttonPinB)==LOW){ Serial.write(1); idle_conter=0; is_showing_init_img=0; delay(100); } else if(digitalRead(buttonPinB)==HIGH && digitalRead(buttonPinA==LOW){ Serial.write(2); idle_conter=0; is_showing_init_img=0; delay(100); } else{ delay(1); //delay 1ms idle_counter++; } if ((0==is_show_init_img) && (idle_counter > MAX_IDLE_TIME)){ Serial.write(3); idle_counter=0; is_showing_init_img=1; } } ※ 編輯: oscar60111 (140.125.33.221), 04/18/2017 18:23:50

05/05 17:51, , 2F
我會用micros()計算按下去的時間跟放開的差值
05/05 17:51, 2F
文章代碼(AID): #1OzE4_vK (ASM)
文章代碼(AID): #1OzE4_vK (ASM)