Прерывания на Iskra Neo

Тема в разделе "Arduino & Shields", создана пользователем Faberge, 6 май 2016.

  1. Faberge

    Faberge Administrator Администратор

    Доброе утро.

    Возникла идея по расширению клавиатуры ноутбука с помощью дополнительных клавиш с макросами. Для пробной работы с прерываниями написал такой скетч и подключил кнопку к пинам на плате 7 и 3. Но МК ловит случайные срабатывания и не отвечает на нужные. В чем может быть причина? С прерываниями дела никогда не имел, но внимательно прочитал статью в справочнике.

    Код (C++):
    #define _pinout  7
    #define _pinin   3

    void setup()
    {
      pinMode(_pinout, OUTPUT);
      pinMode(_pinin, INPUT_PULLUP);
     
      digitalWrite(_pinout, LOW);
     
      attachInterrupt(_pinin, key_handler, FALLING);
     
      Keyboard.begin();
    }

    void key_handler()
    {
      Keyboard.print("1");
    }

    void loop()
    {

    }
     
  2. Alex19

    Alex19 Гуру

    1. Для Iskra Neo (Arduino Leonardo), attachInterrupt принимает не номер пина, а номер внешнего прерывания.
    К примеру для 3 пина, номер прерывания 0.

    Выглядит это так.
    Код (C++):
    attachInterrupt(0, key_handler, FALLING);
    Подробное описание - http://arduino.ua/ru/prog/AttachInterrupt.

    2. Правильное подключение.
    Кнопки и прерывания, требуют правильного подключения иначе будут ложные прерывания (дребезг). Знаю, что ставят одновибраторы, но тут не под подскажу, так как в электронике не силен.
     
  3. Faberge

    Faberge Administrator Администратор

    Спасибо! Удивительно, что в первый раз что то вообще отсылалось на компьютер. Должно быть, порт ловил случайные наводки. Но ложные срабатывания всё еще происходят, на одно нажатие кнопки на компьютере отображаются три-четыре символа. Вроде же дребезг контактов в кнопке должен быть устранен подтягиванием входа к 5В, нет?
     
  4. Alex19

    Alex19 Гуру

    Обычные кнопки, вообще нет смысла вешать на прерывания, тогда подтяжка спасает.

    Но она не спасет на прерывании, кроме дребезга, из-за него могут появляться проблемы с программой, она может падать и т.д.

    Если это обычные кнопки, то Вам вообще не нужны прерывания.
     
  5. Faberge

    Faberge Administrator Администратор

    Ну да, у меня клавиатура из матрицы (обычных?) кнопок 4х4. Просто я подумал, что с четырьмя прерываниями на Iskra Neo (i0 - i3) будет удобно отслеживать состояния всех 16 кнопок сразу. А с какими кнопками тогда нужны прерывания? Мне лучше вообще делать с библиотекой Bounce?
     
  6. Alex19

    Alex19 Гуру

    Если у Вас такая - http://amperka.ru/product/keypad-4x4, то Вам нужна библиотека Keypad.h. Сама библиотека сделана не плохо, когда-то с ней работал.

    Нет, использовать прерывания на обычные кнопки, это как из пушки по воробьям.

    UPD.
    Скачать библиотеку можно тут - https://github.com/Chris--A/Keypad.
    Описание - http://playground.arduino.cc/Code/Keypad, http://robots4life.ru/arduino-keypad.
     
    Faberge нравится это.
  7. Faberge

    Faberge Administrator Администратор

    Почти, http://www.chipdip.ru/product/ak-1604-n-bbw/. Сперва хотел как раз такую, как по вашей ссылке, но предпочел вместо прорезиненных кнопок обычные пластмассовые. Хорошо, спасибо, попробую с готовой библиотекой.
     
  8. Alex19

    Alex19 Гуру

    Они идентичны, вот описание Вашей - http://shpat.com/docs/elfa/03567831.pdf. Поэтому данная библиотека будет работать и с этой.
     
    Faberge нравится это.
  9. Faberge

    Faberge Administrator Администратор

    Действительно, всё заработало буквально сразу же, всего-то пришлось только переназначить символы для кнопок! Спасибо большое!