Arduino按钮计数器

标签 arduino

我正在使用 Arduino,但我的代码遇到了问题。我想要一个按钮来点亮某些灯,每次按下它时,灯都会以不同的模式点亮。目前,代码不跟踪按钮被按下的次数。我真的很感激任何帮助!

const int buttonPin = 4;  // pushbutton 1 pin
int ledPins[] = {5,6,7,8,9,10};
int buttonCounter = 0;  
int buttonState = digitalRead(buttonPin);

void setup(){
  pinMode(buttonPin, INPUT); 
  Serial.begin(9600); 
  // The for loop refers to each pin number
  // by their position in the array
  for(int i = 0; i < 6; i++){
    pinMode(ledPins[i], OUTPUT);
  }
}

 int countButtonPresses() 
 {
   if (buttonState == 0) 
   {
     buttonCounter = buttonCounter + 1;
   }
   return buttonCounter;
 }

void loop(){
  int displayTime = 800;
  int pattern = countButtonPresses();
  Serial.println(pattern);
  switch(pattern) {
    case 1: 
      for(int i = 0; i <=5; i++){
        digitalWrite(ledPins[i], HIGH);
        delay(displayTime);
        digitalWrite(ledPins[i], LOW);
      }
      break;
    case 2:
      for(int i = 0; i <=5; i += 2){
        digitalWrite(ledPins[i], HIGH);
        delay(displayTime); 
        digitalWrite(ledPins[i], LOW);
      }
      break;
    default:
      Serial.println(countButtonPresses());
  }
}

最佳答案

在我看来,问题在于你不清楚自己想做什么:-)

第一个错误是逻辑错误:您无法计算按钮按下的次数,因为当您按下按钮一次时,程序返回“one”,并执行模式一。下次按下按钮时,程序会再次返回“1”,依此类推。所以,你必须改变你的逻辑(例如,当你按第一次时,执行模式一,当你按第二次时,执行模式二)。

第二个错误是按钮按下的处理。假设你的按钮被按下,如果它返回零(我们说“低电平有效”),你的程序可能会在你释放它之前计数几十次。造成这种情况的原因是您没有对其进行“去抖”。

“弹跳”效果是指您的 Arduino 速度比您快,如果您按下按钮十分之一秒,Arduino 会循环几次,查找按下的按钮并计算“按下”的次数。

为了避免这种情况,当你发现它被按下时(buttonstate = 0),你必须执行照明任务,并等待直到buttonstate变为!= 0。并且你必须移动指令“buttonstate = digitalRead(buttonPin);”在loop()函数中,以便连续读取按钮的状态。

我“抛弃”了一些想法以使其发挥作用;尽量写得好一点,有问题再问。

关于Arduino按钮计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25018000/

相关文章:

java - Arduino ADK 无法通过 USB 从 Galaxy S II 接收数据

eclipse - 通过 USB 将数据从 PC 发送到 Android

Arduino - 将 HEX 转换为 RGB 的奇怪行为

templates - 尝试在 Arduino : TYPE not declared in this Scope 中使用模板而不是重载函数

unsigned long 和 uint8_t 数组之间的转换

algorithm - 温度调节电路Arduino

c++ - 从基本/父数组调用子成员?

c++ - 将字节连接到字符串

serial-port - Arduino串行通讯输出

c++ - 将 Arduino RGB LED 从一种颜色褪色到另一种颜色?