int inPin = 7; // номер входного вывода int outPin = 13; // номер выходного вывода int counter = 0; // сколько раз мы должны получить новое значение int reading; // текущее значение, прочитанное с входного вывода int current_state = LOW; // входное значение, полученное после подавления дребезга // следующая переменная long, потому что время, измеренное в миллисекундах, // быстро станет числом, большим, чем может храниться в int. long time = 0; // время последней выборки входного вывода int debounce_count = 10; // количество миллисекунд/выборок для решения, что сигнал на входе принял устойчивое состояние void setup() { pinMode(inPin, INPUT); pinMode(outPin, OUTPUT); digitalWrite(outPin, current_state); // установить выход светодиода в начальное состояние } void loop() { // Если мы перешли к следующей миллисекунде if(millis() != time) { reading = digitalRead(inPin); if(reading == current_state && counter > 0) { counter--; } if(reading != current_state) { counter++; } // Если вход показывает одно значение достаточно долго, давайте переключим его if(counter >= debounce_count) { counter = 0; current_state = reading; digitalWrite(outPin, current_state); } time = millis(); } }