推 chuegou: Serial.write(3); 看來這行會隨著loop永遠執行下去 04/18 01:27
感謝樓上提醒
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
推 k078787878: 我會用micros()計算按下去的時間跟放開的差值 05/05 17:51