极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14087|回复: 3

請問如何讓arduino在指定時間內某按鈕有作用,時間到後失效

[复制链接]
发表于 2014-11-10 18:55:31 | 显示全部楼层 |阅读模式
作用當analogRead(1)按下後,計時10秒按analogRead(0)按鈕才會開始累加,時間到後再按analogRead(0)不累加
但目前狀況是程序一執行,還沒按下analogRead(1)按鈕就開始倒數了
arduino新手發問^^感謝指教!!


  1. int number = 0;
  2. int down = 0;
  3. int on = 0;
  4. long gametime = 10000;   // 遊戲時間10秒 單位為 MS*1000=S

  5. void loop() {
  6. /*** 計數程序 ***/
  7.   unsigned long Time = millis();  
  8.   if (analogRead(1) > 100) //當按鈕按下時,端口1會獲得高電位
  9.      on = 1;    //此時將按下狀態置为“真”
  10.       if (on && Time < gametime) { // 當按下開始按鈕後,在時間內計分
  11.         on = 1; // 將on持續開啟
  12.    {
  13.   while (analogRead(0) > 100) { //當按鈕按下時,模擬端口0會獲得連續的高電位
  14.     down = 1; //此時將按下狀態置为“真”
  15.   }
  16.   if (down) { //判斷按鈕按下狀態,如果按下過就顯示數字並累加
  17.     down = 0;
  18.   if (++number == 10000) {
  19.     number = 0; //判斷從0到9999後歸0
  20.     }
  21.   }
  22.     setNumber(number); //顯示數字
  23.    }
  24. }
  25. setNumber(number); //顯示數字
  26. }
复制代码
回复

使用道具 举报

发表于 2014-11-10 22:59:28 | 显示全部楼层

  1. const int buttonPin0 =  A0;  //A0和A1需要外部下拉
  2. const int buttonPin1 =  A1;

  3. int b1State = 0;            
  4. long previousMillis = 0;      
  5. int num = 0;
  6. int number = 0;

  7. long interval = 100;         

  8. void setup()
  9. {
  10.     Serial.begin(9600);  
  11. }

  12. void loop()
  13. {
  14.   unsigned long currentMillis = millis();

  15.   if(currentMillis - previousMillis > interval)
  16.           {
  17.                    previousMillis = currentMillis;
  18.                    if(analogRead(buttonPin1) > 1000)   //A1被按下(A1为高电平)
  19.                    {
  20.                            b1State = 1;
  21.                            num++;
  22.                    }
  23.                    else
  24.                    {
  25.                            b1State = 0;
  26.                            num = 0;
  27.                    }       

  28.                    if((b1State == 1)&&(num < 100))//如果A1被按下,并且时间没有超过100*100ms,
  29.                            if(analogRead(buttonPin0) > 1000)        //A0被按下(A0为高电平)
  30.                                    number++;                                //number 累加

  31.                    if(number > 9999)
  32.                            number = 0;               

  33.                    Serial.println(number);       
  34.     }
  35. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2014-11-10 23:38:59 | 显示全部楼层
问题出在这句:
  if (analogRead(1) > 100) //當按鈕按下時,端口1會獲得高電位

后面少了个{。
回复 支持 反对

使用道具 举报

发表于 2014-11-11 09:35:23 | 显示全部楼层
fish6823 发表于 2014-11-10 23:38
问题出在这句:
  if (analogRead(1) > 100) //當按鈕按下時,端口1會獲得高電位

由此可见,好的书写习惯在debug的时候,其重要性就体现出来了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-15 17:25 , Processed in 0.044528 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表