Arduino Nano v3 (Китай) Внешние прерывания

Тема в разделе "Arduino & Shields", создана пользователем Morlok, 30 янв 2017.

  1. Morlok

    Morlok Нуб

    Всем доброго времени суток!
    Решил клавиатуру подключить к Китайской реплике Arduino Nano.
    Пожадничал на контакты - взял для эксперимента 4 кнопки, 8-битный сдвиговый регистр и отдал 1 контакт с линии кнопок на внешнее прерывание.
    Собственно, сетап скетча - на 2 пин вешаем прерывание и функцию printButton, которая просто выводит номер контакта сдвигового регистра, который активен в момент нажатия кнопки - по сути, номер кнопки в линии
    Код (C++):
    void setup() {
      // put your setup code here, to run once:
      Serial.begin(9600);
      attachInterrupt(0,printButton,CHANGE);
      pinMode(latchPin, OUTPUT);
      pinMode(clockPin, OUTPUT);
      pinMode(dataPin, OUTPUT);
    }
    Луп - по кругу активируем 4 контакта Q0-Q3 сдвигача, который подключен к клаве.
    Код (C++):
    void loop() {
      // put your main code here, to run repeatedly:
      iteration++;
      if (iteration == 4)
        iteration = 0;
      registerWrite(iteration, HIGH);
    }
    registerWrite - функция взятая с данного сайта - http://arduino.ru/Tutorial/registr_74HC595 - записывает в сдвигач байт.
    Схема подключения сдвигача, соответственно, взята оттуда же
    Собственно в чем проблема, форумчане: функция printButton вызывается постоянно, вне зависимости от того, нажал я кнопку, или нет - соответственно выводит в монитор 0-1-2-3-0-1-2-3 и т.д.
    Но если нажимаю на кнопку и пока я её удерживаю - выводит корректный номер активного пина.

    Если кто-нибудь уже сталкивался с таким неудержимым вызовом внешних прерываний - буду рад советам!