Странная работа примитивного скетча

Друзья, не могу понять, где капкан? Нажатием кнопки увеличиваю значение переменной на 1 и вывожу результат на монитор. При этом, если в процессе работы мульметром измеряется напряжение на пине 2 (нулевое прерывание), все срабатывает. При отключении мультиметра переменная при нажатии кнопки не увеличивается: как мне мнится, не срабатывает прерывание. Помогите старому дураку!

//UNO
volatile int button_value=0;
void setup() 
{
  pinMode(2, INPUT); //Пин кнопки на вход
  Serial.begin (9600); //Активация порта
  attachInterrupt(0, BUTTONPRESS,RISING);
}

void loop() 
{

}

void BUTTONPRESS()
{
  button_value++;
  Serial.println (button_value);
}

Подтяжку кнопки сделать не забыли?

Вот так попробуй:

Ага, щас попробую!

Не, не поможет - у тебя же уровень с 0 на +5В меняется (RISING).
Нужно резистор килоом 10 с пина на GND поставить.

Или кнопку переподключить так, чтобы можно было использовать по падающему фронту ( FALLING ) и тогда можно использовать INPUT_PULLUP (без внешнего резистора).

А как насчет подавления дребезга?
Да и вывод в сериал в прерывании - не самая лучшая идея

Вывод в сериал в прерывании - знаю, что не гуд, просто, чтобы монитор не пилил длинный столбик.

В прерывании поднимаете флаг, в лупе, если флаг поднят - пуляете в сериал и сбрасываете флаг

1 лайк

У него сейчас Serial и как антидребезг работает. А по твоей схеме - не будет…

Таймаут короткий, попробую и так и так…

Спасибо, так заработало.