Прерывания работают странно

Neka
Offline
Зарегистрирован: 17.08.2014

Здравствуйте!

Подцепил кнопку на пин #2 и GND. Код такой:

//
// светодиод, подключённый к digital pin 13 будет изменять своё 
// состояние при изменении напряжения на digital pin 2
//
int pin = 13;
volatile int state = LOW;

void setup()
{
  pinMode(pin, OUTPUT);              // порт как выход
  attachInterrupt(0, blink, CHANGE); // привязываем 0-е прерывание к функции blink().
  Serial.begin(9600);
}

void loop()
{
  digitalWrite(pin, state);          // выводим state  
}

void blink()
{
  state = !state;                    // меняем значение на противоположное
  Serial.println(state);
}

И происходит странная вещь. При ненажатой кнопке в монитор порта сыпится 0 1 по переменке бесконечно. ЛЕД светится в пол-силы, понятно, что это самодельный ШИМ) Но при нажатии кнопки, вывод прекращается и диод тухнет вообще или загорается в полную силу, в мониторе висит соответственно 0 или 1. Величина при "зависании" колеблется от включения\выключения ардуинки. Пробовал подтягивать через 1к и к земле, и к vcc - ничего не меняется

MaksMS
Offline
Зарегистрирован: 11.03.2013

А подтягивать резистором кнопку на плюс кто будет ? Такие элементариные вещи-то надо знать... 

И вообще смысл в этом скетче ? зачем прерывание ?

Neka
Offline
Зарегистрирован: 17.08.2014

Во-первых, цитата - "Пробовал подтягивать через 1к и к земле, и к vcc - ничего не меняется".

Во-вторых, я нашел причину)) Сам очень тупанул, извиняюсь за беспокойство.

В-третьих, это скетч для тестирования прерываний. Сам не представляю, зачем здесь прерывания.