2017-07-03 98 views
0

我使用按钮作为切换开关。按它,它会做“东西A”。再次按下它,它会做“东西B”。为什么我无法打电话给我的方法checkButtons_slow()为什么我按下按钮后无法调用此方法?

int prev = 0; 
int current = 0; 
int val4 = 0; 
int val5 = 0; 
int ledPin = 13; 
int prev = 0; 
int current = 0; 

Servo ZServo; 

void setup() { 
    ZServo.attach(9); 
    pinMode(pushD3, INPUT_PULLUP); 
    digitalWrite(3, HIGH); 
    pinMode(pushD4, INPUT_PULLUP); 
    digitalWrite(4, HIGH); 
    pinMode(pushD5, INPUT_PULLUP); 
    digitalWrite(5, HIGH); 
    pinMode(pushD6, INPUT_PULLUP); 
    digitalWrite(6, HIGH); 
    pinMode(ledPin, OUTPUT); 
} 

void loop() { 
    if(digitalRead(3) == LOW) { 
    current = 1 - current; 
    } 
    if(current == 1 && prev == 0) { 
    checkButtons_slow(); 
    //test: ZServo.write(110); 
    delay(500); //half a second 
    } 
    if(current == 0 && prev == 1) { 
    ZServo.write(80); 
    delay(500); //half a second 
    } 
    prev = current; 
} 

这里是我的方法:

void checkButtons_slow() { 
    val4 = digitalRead(pushD4); 
    val5 = digitalRead(pushD5); 
    if (val4 == LOW) { 
    ZServo.write(88); 
    } else if (val5 == LOW) { 
    ZServo.write(99); 
    } else { 
    ZServo.write(91); //GUESSED ON 92; SHOULD TECHNICALLY BE 90 
    } 
} 

所以注释掉//test: ZServo.write(110);作品。我错过了什么checkButtons_slow();

回答

0

如果您将void loop()更改为此,则可以开启和关闭方法。

void loop() { 
    if (digitalRead(3) == LOW) { 
    num_presses++; 
    delay(500); 
    } 
    if ((num_presses % 2) == 0) { 
    //even 
    checkButtons_slow(); 
    } 
    else if(num_presses == 0) { 
    ZServo.write(90); 
    } 
    else { 
    ZServo.write(85); 
    } 
} 
+0

@JLH发现了一些可行的东西! – mkpappu

+0

这是一种“去弹跳”的形式,您通常必须在微处理器上进行轮询输入引脚以确定按钮或开关的状态。 –

相关问题