Пользовательский код устранения дребезга не работает
Это мой собственный код устранения дребезга
Он удерживает светодиод включенным, переключая необходимое пороговое значение при срабатывании после включения светодиода, чтобы поддерживать светодиод в высоком состоянии, и наоборот, при повторном срабатывании, комментарии к коду объясняют это более подробно.
>/*
* This code is my custom debounce code, I made this but this isn't working as planned,
* see the thing is that it turns on when I hold the button and if I release it,
* it starts to flickers and then gradually turn off, what is wrong with my code ?
* I can't see it.
*/
const int ledPin = 13; // led connected to pin 13
const int PushButton = 2; // a pushbutton connected to pin 2
int switcher = HIGH; // the switcher changes it's value, we require this later
int dilay = 1; // controls the delay
unsigned long lastTrigger = 0; // records the last time the led was turned on
void setup() {
pinMode(ledPin, OUTPUT); // sets ledpin as output
pinMode(PushButton, INPUT); // sets pushbutton pin as input
}
void loop() {
int pushButtonState = digitalRead(PushButton); // stores the value of the pin each time the loop begins agian
if((millis() - lastTrigger) >= dilay){ // my custom debounce code
if(pushButtonState == switcher){ // this is the trick, when the pushbutton pin is high it's equal to the switcher value
digitalWrite(ledPin, HIGH); // it turns on the led
int switcher = LOW; // now the switcher value will be low now the pushbutton pin value will also be low keeping the led on
}else{
digitalWrite(ledPin, LOW); // now if the led is on and pushbutton is high, then it will not be equal to the switcher because we had changed it in the previous statement
int switcher = HIGH; // now the switcher is high and the pushbutton value low, switcher isn't equal to pushbutton so there by keeping the ledpin as low
}
if(pushButtonState == 1){ // if pushbutton is high
int lastTrigger = millis(); // then lastTrigger equals to the current time
}
}
}
@Sanjay .S Kumar, 👍0
Обсуждение1 ответ
Измените int switcher = LOW/HIGH
на просто switcher = LOW/HIGH
.
В противном случае вы переопределите переменную и сделаете ее локальной переменной, а не измените глобальную переменную с тем же именем (как вы ожидаете).
PS ваш код на самом деле не устраняет дребезг. Он немного сводит это на нет, опрашивая входной контакт только каждые 1 мс. Но в некоторых коммутаторах [возврат может занять до 6 мс](http://www.ganssle.com/debouncing.htm)., @Gerben
теперь, с учетом предложенных вами изменений, светодиод теперь мигает, @Sanjay .S Kumar
- Хорошая кнопка debouncing/Библиотека StateChange
- Кнопка переключения переключает между операторами обращения с разблокированием кнопки
- Программное обеспечение, устраняющее дребезг кнопки при отпускании
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
как подключена кнопка? у вас есть понижающий резистор?, @Juraj
кнопка представляет собой переключатель, который соединяет контакт 5 В и контакт 2, и нет, я не использую понижающий резистор, @Sanjay .S Kumar
без понижения напряжения, вывод свободно плавает между НИЗКИМ и ВЫСОКИМ уровнем при отключении от 5 В., @Juraj