Re: [問題] 基礎問題:Arduino按鈕沒被按下的時間計
※ 引述《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
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
05/05 17:51, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
ASM 近期熱門文章
PTT數位生活區 即時熱門文章