2014-10-30 49 views
0

我有一个具有Arduino输入的处理脚本。处理 - 在按钮上按住X键3秒 - 忽略进一步按钮按下

在一个按钮按下我有一个元素'生长'和椭圆3秒,然后恢复正常。

我似乎无法解决的是如何在3秒内忽略进一步按钮按下。

这是简化的代码。

int savedTime; 
int growTime = 3000; 

void setup() { 
    //Start counting milliseconds 
    savedTime = millis(); 
} 

void draw() { 
    if (arduino.digitalRead(2) == Arduino.HIGH){ 
     //Starts Timer for 'Grow' animation 
     savedTime = millis(); 
    } 

    int passedTime = millis() - savedTime; 

    if (passedTime >= growTime) { 
     opacity = 10; 
     if (circleSize > 0){ 
      scale(circleSize); 
      noStroke(); 
      circleSize -= 0.0009; 
     } 
    }else{ 
     scale(circleSize); 
     noStroke(); 
     circleSize += 0.0003; 
     opacity = 70; 
    } 
    ellipse(0, 0, circleSize, circleSize); 
} 

我了解自己现有的代码检查时看到的最后一次按下按键发生,有效,如果我不停地按下按钮,“增长”效应将继续射击。

如何做到这一点,如果'成长'效应正在发生,进一步的按钮被忽略?

我希望这是有道理的,我已经包括了人们需要了解的东西。这是一个更大的脚本的一部分,所以如果我错过了一些重要的东西,请原谅我!

回答

0

您应该以某种方式存储您已处于处理最后一个输入的过程中,因此进一步的点击将被忽略。

我会去与一个单独的布尔变量,如处理,或类似的东西,并检查你没有处理之前更新你最后savedTime。 你也可以在没有任何额外变量的情况下在savedTime上播放无效值,但是我认为有了额外的变量,一切都会变得清晰起来。

bool processing = false; 
int savedTime; 
int growTime = 3000; 

void setup() { 
    //Start counting milliseconds 
    savedTime = millis(); 
} 

void draw() { 
    if (!processing && arduino.digitalRead(2) == Arduino.HIGH){ 
     //Starts Timer for 'Grow' animation 
     savedTime = millis(); 
     processing = true; 
    } 

    int passedTime = millis() - savedTime; 

    if (passedTime >= growTime) { 
     opacity = 10; 
     if (circleSize > 0){ 
      scale(circleSize); 
      noStroke(); 
      circleSize -= 0.0009; 
     } else { 
      processing = false; 
     } 
    }else{ 
     scale(circleSize); 
     noStroke(); 
     circleSize += 0.0003; 
     opacity = 70; 
    } 
    ellipse(0, 0, circleSize, circleSize); 
} 

没有试过代码,所以可能有一些语法错误。希望能帮助到你!

编辑:我认为你不想处理任何其他输入,直到椭圆完全减少,如果你想在3秒“增长”后处理新的输入,你可能需要将processing = false;语句移动到在我添加的其他块之外。

+0

谢谢。是的几个语法修改,但你破解它。我有一种感觉,那会是这样的,但我是新手,并且一直盯着它太久了!再次感谢。 – Steviehype 2014-10-30 23:13:52