Arduino, ошибка кода времени выполнения при отладке кода задержки по напряжению - PullRequest
0 голосов
/ 03 мая 2020

Я sh Гоэль, я учил Ардуино у Удеми. Я новичок в этой области. Я создавал код для Debouncing кнопки, чтобы решить проблемы подпрыгивания напряжения. Но в коде есть ошибка. Нет ошибки времени компиляции, но это ошибка времени выполнения.

Я также попытался проверить код с помощью Serial.print (), чтобы найти, где находится ошибка, затем я обнаружил, что ошибка находится в второе вложенное условие. Я также упомянул, где есть ошибка в коде для простоты. Там я не могу передать функцию Serial.print («A») на Serial Monitor.

Мой основной мотив - запустить код, чтобы я мог остановить скачки напряжения, когда кнопка нажата с некоторой задержкой.

Это из строки 41

Это код, который я использовал для отмены нажатия кнопки

 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;
}

В целях тестирования это конструкция схемы на TinkerCad, что вы можете проверить онлайн.

TinkerCad Circuit Design

Пожалуйста, помогите мне решить эту проблему, это будет отличная помощь с вашей стороны для меня.

1 Ответ

0 голосов
/ 03 мая 2020

Есть несколько мест, где ваш код может работать со сбоями:

  • вы не выполняете цикл должным образом для l oop
  • ваш лог c не работает
  • digitalRead не работает
  • печать не работает

сначала удалите проверку отладки и посмотрите, работает ли она:

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

чтобы проверить все другие проблемы, добавьте следующее прямо перед остальными, если:

  • задержка, чтобы вы не получали бесконечные данные
  • print millis, last_debounce_time, debounce_delay и btn_read
  • конец строки

, затем запустите и нажмите кнопку. Вывод даст вам знать, в чем проблема

...