Board logo

標題: 請教arduino 暫停的方法 [打印本頁]

作者: 14008205    時間: 2010-5-23 10:15     標題: 請教arduino 暫停的方法

本帖最後由 14008205 於 2010-5-23 10:31 編輯

我想set 1 個key 按1下係暫停,直到再按多下先continue之後的程式..
咁樣寫得唔得??
  1.          
  2. if (int sk=digitalRead(12) == HIGH){
  3.         delay (50);
  4.         while (int sk=digitalRead(12) == LOW){
  5.         boolean pause = true;
  6.         }
  7.       while (int sk=digitalRead(12) == HIGH){
  8.         boolean pause = false;
  9.       }
  10.       }
  11.         else{
  12.           boolean pause = false;
  13.         }
  14.           for (int pt =10; pt<10; pt--){
  15.             while (boolean pause = false){
  16.               break;
  17.               }
複製代碼

作者: 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

回復  14008205
唔明好唔明
問 問題都只說程式不提硬件
程式是建築在硬件之上

你用唔同的開關 又有唔同的 ...
oYueno 發表於 2010-5-23 19:46

佢想係program入面
按一個制 停左個program果個位
唔繼續行指令
作者: oYueno    時間: 2010-5-23 20:48

回復 4# lok418

問題是你用唔同的制有唔同的寫法
作者: oYueno    時間: 2010-5-23 21:01

回復 4# lok418

仲有開關 有跳彈的問題 如果沒加密斯特觸發器
最好等觸發 后加個 delay再 CHEK一次信號
SWQ1.jpg

圖片附件: SWQ1.jpg (2010-5-23 21:01, 19.59 KB) / 下載次數 18
https://h0.hkepc.com/forum/attachment.php?aid=1039453&k=651b65564e525c4b507a908a82a077cb&t=1781845584&sid=1cETRa1z388


作者: lok418    時間: 2010-5-23 21:25

回復  lok418

仲有開關 有跳彈的問題 如果沒加密斯特觸發器
最好等觸發 后加個 delay再 CHEK一次信號
...
oYueno 發表於 2010-5-23 21:01



  應該就係check到有信號 就跳去function loop死-__-
再有信號就return返..
作者: oYueno    時間: 2010-5-23 21:46

回復 7# lok418

我不是不明白他的要求

只是想帶出程式和硬體是一体的
提個程式不提硬體 如何確定程式合硬體用呢!
作者: lok418    時間: 2010-5-23 21:48

本帖最後由 lok418 於 2010-5-23 21:59 編輯
回復  lok418

我不是不明白他的要求

只是想帶出程式和硬體是一体的
提個程式不提硬體 如何確定程式合硬 ...
oYueno 發表於 2010-5-23 21:46



    咁佢提出 一定有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的指導
  1.       
  2. if (int sk=digitalRead(12) == HIGH){
  3.          delay(150);
  4.          for (int x =10; x<10; x--){
  5.             while (int sk=digitalRead(12) == LOW){
  6.               break;
  7.               }
  8.           }
  9.         boolean pause == true;
  10.           for (int pt =10; pt<10; pt--){
  11.             if (int sk=digitalRead(12) == HIGH){
  12.                delay(150);
  13.                for (int y =10; y<10; y--){
  14.                   while (int sk=digitalRead(12) == LOW){
  15.                   boolean pause == false;
  16.                   break;
  17.                    }
  18.                 }
  19.             while (boolean pause == false){
  20.               break;
  21.               }
  22.             }
  23.           }
  24.        }
  25. else{
  26.        boolean pause = false;
  27.        }
複製代碼

作者: 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?





歡迎光臨 電腦領域 HKEPC Hardware (https://h0.hkepc.com/forum/) Powered by Discuz! 7.2