作者oscar60111 (还得努力学习)
看板ASM
标题Re: [问题] 基础问题:Arduino按钮没被按下的时间计
时间Mon Apr 17 23:37:33 2017
※ 引述《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://webptt.com/cn.aspx?n=bbs/ASM/M.1492443455.A.E54.html
1F:推 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
2F:推 k078787878: 我会用micros()计算按下去的时间跟放开的差值 05/05 17:51