简体   繁体   中英

Arduino, Run Time Code Error in Debouncing Voltage Time Delay Code

I am Ansh Goel, I was learning Arduino from Udemy. I am beginner to this field. I was creating a code for Debouncing the button to solve the issues of bouncing voltage. But there is error in the code. There is no Compile time error but it is run time error.

I also tried to check the code using the Serial.print() to find the where the error is, then I found that the error is in the second nested if condition. I have also mention where there is the error in the code for ease. There I am not able to get the Serial.print("A") function too to the Serial Monitor.

My main motive is to run the code so that I am able to stop bouncing voltages when a button is pressed using some delay.

It is from line 41

This is the code I used to debounce the button

 const int btn_pin = 2;
const int debounce_delay = 50; //ms

// We need to remember the previous button state between loops
int btn_prev = HIGH;
int btn_state = HIGH;
unsigned long last_debounce_time = 0;

// Counter
int counter = 0;

void setup() {

  Serial.begin(9600);

  // Set up pins
  pinMode(btn_pin, INPUT_PULLUP);
  pinMode(13, OUTPUT);
}

void loop() {

  int btn_read;

  // Read current button state
  btn_read = digitalRead(btn_pin);

  //Remember when the button change state

  // If the button was previously HIGH and now LOW, it's been pressed
  if ( (btn_prev == HIGH) && (btn_read == LOW )) {


    //Store the time it took to take the action for button press
    last_debounce_time = millis();
  }
    //Wait before changing the state of the button



// IN THIS CONDITION THERE IS ERROR SOMEWHERE I AM NOT GETTING IT

    if(millis() > (last_debounce_time + debounce_delay)){
      if(btn_read != btn_state) {


    Serial.println("A");
        // Then store the button change value to the global variable
        btn_state = btn_read;

        if(btn_state == LOW) {

          // Increment and print counter
          counter++;
          Serial.println(counter);
          digitalWrite(13,HIGH);
          delay(500);
          digitalWrite(13,LOW);
          delay(500);      
        }
      }
    }



  // Remember the previous button state for the next loop iteration
  btn_prev = btn_state;
}

For testing purposes, this is the circuit design on TinkerCad, that you can check online.

TinkerCad Circuit Design

Please Help me solve the issue, it will be a great help from your side for me.

There are several locations where your code could malfunction:

  • you're not looping properly for loop
  • your logic doesn't work
  • digitalRead doesn't work
  • print doesn't work

first, remove the debounce check and see if this works:

//if(millis() > (last_debounce_time + debounce_delay)){

to check all other issues, add the following right before the remaining if:

  • delay so you don't get endless data
  • print millis, last_debounce_time, debounce_delay and btn_read
  • end line

then run and press the button. The output will let you know what's the issue

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM