如何保留计时器按钮状态的值

How to hold value for the state of a button for a timer?

本文关键字:按钮 状态 计时器 何保留 保留      更新时间:2023-10-16

我正在用Arduino上的16x2 LCD屏幕制作一个定时器。显然,我想按下我的启动按钮以供计时器计算,直到按下停止按钮为止。我有一个重置按钮,该按钮已连接到RESET PIN,因此我没有为其编写代码。

我已经去过ladayada.com关于按钮状态的教程,我密切关注说明。我仍然得到错误的结果。

signed short minutes, seconds;
char timeline[16];
int startPin = 7;
int stopPin = 6;
int buttonState1;
int buttonState2;
int oldState;
int currentState;
void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(startPin,INPUT_PULLUP);
  pinMode(stopPin,INPUT_PULLUP);
  buttonState1 = digitalRead(startPin);
  buttonState2 = digitalRead(stopPin);
void loop() {
 currentState = digitalRead(startPin);
  if(currentState!= buttonState1){
  if(currentState==LOW){ 
  lcd.setCursor(0, 1);
  sprintf(timeline,"%0.2d mins %0.2d secs", minutes, seconds);
  lcd.print(timeline);
  delay(1000);
  seconds++; 
 if (seconds == 60){
    seconds = 0;
    minutes ++; }
  }
  }
 if(buttonState2==LOW){
    delay(500);
    sprintf(timeline,"%0.2d mins %0.2d secs", minutes, seconds);
    }
 buttonState1 = currentState;
}

我希望Arduino保存按钮的状态并计算直到按下停止按钮。按下停止按钮时,按下时应显示时间(当前计数(。取而代之的是,必须按两次开始按钮才能计数一秒钟。我什至无法进入停止按钮的逻辑。

如果仅在程序开始时按开始按钮,为什么不等待 setup()中的按钮操作?

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  pinMode(startPin,INPUT_PULLUP);
  pinMode(stopPin,INPUT_PULLUP);
  while (digitalRead(startPin) != LOW); // <- wait for button action
}

loop()中,您要计算直到按下停止按钮为止。如果以后进行硬件重置,则只需按下停止按钮,就可以将程序放入无限循环中。

void loop() {
  lcd.setCursor(0, 1);
  sprintf(timeline,"%0.2d mins %0.2d secs", minutes, seconds);
  lcd.print(timeline);
  delay(1000);
  seconds++; 
  if (seconds == 60) {
    seconds = 0;
    minutes ++; 
  }
  if (digitalRead(stopPin) == LOW) {
    delay(500);
    sprintf(timeline,"%0.2d mins %0.2d secs", minutes, seconds);
    while(true) {} // infinite loop
  }
}