Arduino, ошибка кода времени выполнения в коде задержки времени снижения напряжения
Я Анш Гоэль, я изучал Ардуино у Удеми. Я новичок в этой области. Я создавал код для устранения подпрыгивания кнопки, чтобы решить проблемы с подпрыгиванием напряжения. Но в коде есть ошибка. Ошибка времени компиляции отсутствует, но это ошибка времени выполнения.
Я также попытался проверить код с помощью Serial.print(), чтобы найти, где находится ошибка, затем я обнаружил, что ошибка находится во втором вложенном условии if. Я также упомянул, где в коде есть ошибка. Там я не могу получить функцию 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, которую вы можете проверить онлайн.
Пожалуйста, помогите мне решить проблему, это будет для меня большим подспорьем с вашей стороны.
1 ответ
Есть несколько мест, где ваш код может работать неправильно:
- вы неправильно зацикливаете цикл
- твоя логика не работает
- digitalRead не работает
- печать не работает
Во-первых, удалите проверку отладки и посмотрите, работает ли это:
//if(millis() > (last_debounce_time + debounce_delay)){
чтобы проверить все остальные проблемы, добавьте следующее прямо перед остальными, если:
- задержка, чтобы вы не получали бесконечные данные
- print millis, last_debounce_time, debounce_delay и btn_read
- конец строки
затем запустите и нажмите кнопку. Результат позволит вам узнать, в чем проблема