Button 我想计算按钮(开关)在执行之前的按下次数
我的代码只执行案例1。如果我按3次,我需要。它将执行我的案例3。多谢各位Button 我想计算按钮(开关)在执行之前的按下次数,button,arduino,embedded,Button,Arduino,Embedded,我的代码只执行案例1。如果我按3次,我需要。它将执行我的案例3。多谢各位 int pushButton = 13; void setup() { Serial.begin(9600); pinMode(pushButton, INPUT); for(int pin=10;pin<=12;pin++){ pinMode(pin,OUTPUT); } } void loop() { int ctr=0; int buttonState = digitalRead(pus
int pushButton = 13;
void setup() {
Serial.begin(9600);
pinMode(pushButton, INPUT);
for(int pin=10;pin<=12;pin++){
pinMode(pin,OUTPUT);
}
}
void loop() {
int ctr=0;
int buttonState = digitalRead(pushButton);
if(buttonState ==1)
{
ctr+=1;
Serial.println(ctr);
}
switch (ctr) {
case 1:
Serial.println("00000000000000000000");
blinking();
break;
case 2:
Serial.println("AAAAAAAAAAAAAAAA");
running();
break;
case 3:
incremental();
default:
Serial.println("push the button");
}
}
void blinking(){
for(int z=0;z<=3;z++){
for(int i=10;i<=12;i++){
digitalWrite(i,HIGH);
}delay(500);
for(int i=10;i<=12;i++){
digitalWrite(i,LOW);
}delay(500);
}
}
void running(){
for(int z=0;z<=2;z++){
for(int i=10;i<=12;i++){
digitalWrite(i,HIGH);
delay(500);
digitalWrite(i,LOW);
}
}
}
void incremental(){
for(int z=0;z<=2;z++){
int d=1500;
for(int i=10;i<=12;i++){
digitalWrite(i,HIGH);
delay(d); d-=500;
}
for(int i=10;i<=12;i++){
digitalWrite(i,LOW);
}delay(500);
}
}
int按钮=13;
无效设置(){
Serial.begin(9600);
pinMode(按钮,输入);
对于(int pin=10;pin将int ctr=0
更改为静态int ctr=0
它与具有全局范围的declarectr
相同
每次调用loop
函数时,它都不会重置为0
应检查按钮去抖动。除了ctr在每次循环()时被分配为零之外
运行时,您还存在一个问题,即如果按下按钮,ctr
将持续增加,这可能不是您想要的。当默认情况将无限期运行时,它还会在三点之后增加ctr
。目前还不清楚您是否打算将情况3改为默认情况;通常会考虑这种情况糟糕的做法或错误,如果是故意的,那么值得一提
以下代码使ctr
为静态,因此它也不总是被指定为零,并且仅当按下按钮时才会增加ctr
,如果只是按住或卡住按钮,则不会增加。在默认情况下,它还会将ctr
返回到零,以便您可以循环状态(这可能不是您的意图).为了清晰起见,我已删除调试输出
void loop()
{
static int ctr = 0 ;
static bool button_down = false ;
int button_state = digitalRead(pushButton) == 1 ;
if( !button_down && button_state = 1 )
{
ctr++ ;
button_down = true ;
}
else if( button_state = 0 )
{
button_down = false ;
}
switch( ctr )
{
case 1:
blinking();
break;
case 2:
running();
break;
case 3:
incremental();
break ;
default:
ctr = 0 ;
break ;
}
}
你需要消除按钮的反弹(应用一些简单的数字滤波器来消除按下任何按钮时出现的机电信号反弹)。