Доброе утро. Возникла идея по расширению клавиатуры ноутбука с помощью дополнительных клавиш с макросами. Для пробной работы с прерываниями написал такой скетч и подключил кнопку к пинам на плате 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() { }
1. Для Iskra Neo (Arduino Leonardo), attachInterrupt принимает не номер пина, а номер внешнего прерывания. К примеру для 3 пина, номер прерывания 0. Выглядит это так. Код (C++): attachInterrupt(0, key_handler, FALLING); Подробное описание - http://arduino.ua/ru/prog/AttachInterrupt. 2. Правильное подключение. Кнопки и прерывания, требуют правильного подключения иначе будут ложные прерывания (дребезг). Знаю, что ставят одновибраторы, но тут не под подскажу, так как в электронике не силен.
Спасибо! Удивительно, что в первый раз что то вообще отсылалось на компьютер. Должно быть, порт ловил случайные наводки. Но ложные срабатывания всё еще происходят, на одно нажатие кнопки на компьютере отображаются три-четыре символа. Вроде же дребезг контактов в кнопке должен быть устранен подтягиванием входа к 5В, нет?
Обычные кнопки, вообще нет смысла вешать на прерывания, тогда подтяжка спасает. Но она не спасет на прерывании, кроме дребезга, из-за него могут появляться проблемы с программой, она может падать и т.д. Если это обычные кнопки, то Вам вообще не нужны прерывания.
Ну да, у меня клавиатура из матрицы (обычных?) кнопок 4х4. Просто я подумал, что с четырьмя прерываниями на Iskra Neo (i0 - i3) будет удобно отслеживать состояния всех 16 кнопок сразу. А с какими кнопками тогда нужны прерывания? Мне лучше вообще делать с библиотекой Bounce?
Если у Вас такая - 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.
Почти, http://www.chipdip.ru/product/ak-1604-n-bbw/. Сперва хотел как раз такую, как по вашей ссылке, но предпочел вместо прорезиненных кнопок обычные пластмассовые. Хорошо, спасибо, попробую с готовой библиотекой.
Они идентичны, вот описание Вашей - http://shpat.com/docs/elfa/03567831.pdf. Поэтому данная библиотека будет работать и с этой.
Действительно, всё заработало буквально сразу же, всего-то пришлось только переназначить символы для кнопок! Спасибо большое!