作者: 14008205 時間: 2010-5-23 10:15 標題: 請教arduino 暫停的方法
本帖最後由 14008205 於 2010-5-23 10:31 編輯
我想set 1 個key 按1下係暫停,直到再按多下先continue之後的程式..
咁樣寫得唔得??
-
- if (int sk=digitalRead(12) == HIGH){
- delay (50);
- while (int sk=digitalRead(12) == LOW){
- boolean pause = true;
- }
- while (int sk=digitalRead(12) == HIGH){
- boolean pause = false;
- }
- }
- else{
- boolean pause = false;
- }
- for (int pt =10; pt<10; pt--){
- while (boolean pause = false){
- break;
- }
作者: 14008205 時間: 2010-5-23 18:44
c hing們救命T_T .. 功課黎
作者: oYueno 時間: 2010-5-23 19:46
回復 2# 14008205
唔明好唔明
問 問題都只說程式不提硬件
程式是建築在硬件之上
你用唔同的開關 又有唔同的結果
例如
1)常開開關 (按下是接通放手是打斷開的)
2)正反開關(按一下接通,放手都是接通,再一下才斷開)
程式寫出和硬件夾到頭來得個吉
作者: lok418 時間: 2010-5-23 20:23
佢想係program入面
按一個制 停左個program果個位
唔繼續行指令
作者: oYueno 時間: 2010-5-23 20:48
回復 4# lok418
問題是你用唔同的制有唔同的寫法
作者: oYueno 時間: 2010-5-23 21:01
回復 4# lok418
仲有開關 有跳彈的問題 如果沒加密斯特觸發器
最好等觸發 后加個 delay再 CHEK一次信號
https://h0.hkepc.com/forum/attachment.php?aid=1039453&k=651b65564e525c4b507a908a82a077cb&t=1781845584&sid=1cETRa1z388

作者: lok418 時間: 2010-5-23 21:25
應該就係check到有信號 就跳去function loop死-__-
再有信號就return返..
作者: oYueno 時間: 2010-5-23 21:46
回復 7# lok418
我不是不明白他的要求
只是想帶出程式和硬體是一体的
提個程式不提硬體 如何確定程式合硬體用呢!
作者: lok418 時間: 2010-5-23 21:48
本帖最後由 lok418 於 2010-5-23 21:59 編輯
咁佢提出 一定有key 一定有mcu 喇- -
係唔知落low定high..
作者: oYueno 時間: 2010-5-23 21:59
本帖最後由 oYueno 於 2010-5-23 22:05 編輯
回復 9# lok418
你不明我說什麼
用唔同開MCU有唔同的做法
如果是用正反制一句OK 了
while(int sk=digitalRead(12) == HIGH);
你按下就LOOP死
因為你按下他是一直HIGH下去,
要再按一下才回復LOW
解LOOP做下一句
作者: oYueno 時間: 2010-5-23 22:12
回復 1# 14008205
while (boolean pause = false)
是不是打錯 while (boolean pause == false)
作者: oYueno 時間: 2010-5-23 22:44
回復 1# 14008205
個程有D問題 如按下的時多過50個delay 又咁Q再下一次CHECK PORT前放手
暫停就失效了
我想做法是CHECK到 HIGH-->delay(回避彈跳)再CHECK一次是否HIGH(確定是有按下) SET FLAG
等待轉LOW 做下一句
作者: 14008205 時間: 2010-5-23 23:12
本帖最後由 14008205 於 2010-5-23 23:21 編輯
個程有D問題 如按下的時多過50個delay 又咁Q再下一次CHECK PORT前放手
暫停就失效了
我想做法是CHECK到 HIGH-->delay(回避彈跳)再CHECK一次是否HIGH(確定是有按下) SET FLAG
等待轉LOW 做下一句
你意思係 按落去..再放手既時間咁岩係50ms?
ps:粒制係無鎖常開的
以下係改過既程式.. 唔知我思路有冇錯呢?
先係detect到按緊制..
再等到放手
再入pause loop, 直到detect按多次制並放手先break loop..
thx各位ching的指導
-
- if (int sk=digitalRead(12) == HIGH){
- delay(150);
- for (int x =10; x<10; x--){
- while (int sk=digitalRead(12) == LOW){
- break;
- }
- }
- boolean pause == true;
- for (int pt =10; pt<10; pt--){
- if (int sk=digitalRead(12) == HIGH){
- delay(150);
- for (int y =10; y<10; y--){
- while (int sk=digitalRead(12) == LOW){
- boolean pause == false;
- break;
- }
- }
- while (boolean pause == false){
- break;
- }
- }
- }
- }
- else{
- boolean pause = false;
- }
作者: 14008205 時間: 2010-5-23 23:18
回復 6# oYueno
跳彈的問題 係唔係指粒制按到岩岩好導通..再按到底的過程? 咁應該delay幾多ms?
作者: oYueno 時間: 2010-5-24 00:35
本帖最後由 oYueno 於 2010-5-24 00:57 編輯
回復 13# 14008205
跟你說我是不會寫arduino
但都想試一下
int switchPin = 12;
boolean pause = false;
pinMode(switchPin, INPUT);
digitalWrite(switchPin, HIGH); // turn on pullup resistor
if(switchPin==LOW){//當有按下SW 當有按下SW switchPin=LOW
pause = true;//pause FLAG SET TRUE
delay (50);
while(switchPin==LOW);//等待放開 當放開switchPin=HIGH
}
if(pause == true){
while(switchPin==HIGH);//等待下一次的按下 等轉LOW 做下一句
delay (50);
while(switchPin==LOW);//等待放開
pause = false;
}
作者: 14008205 時間: 2010-5-24 17:49
回復 15# oYueno
thx ching.. 我會努力參考..難得ching對arduino唔熟都肯教我
作者: artreetree 時間: 2010-5-25 11:03
加隻cap做debouncing先啦, 個人覺得DELAY做debouncing唔夠可靠
作者: 14008205 時間: 2010-5-25 17:59
回復 17# artreetree
咁應該用幾uF cap?


