roboforum.ru

Технический форум по робототехнике.

Protoshield и кнопка S1

Protoshield и кнопка S1

s_lim » 15 фев 2015, 11:42

Здравствуйте!
Заранее прошу прощения если тема поднималась, но нигде ничего не смог найти.
В общем есть Protoshield для Arduino UNO R3:
Изображение
Изображение
На данном шилде есть кнопка S1 светодиод LED2. Хотелось бы реализовать включение светодиода при нажатии на кнопку, а так же реализовать вызов обработчика прерывания при нажатии на кнопку.
Вот схема сборки (сорри, но интегральные схемы рисовать не научился):
Изображение

Вот текст программы (в соответствии с сэмплами которые нашел):

Код: Выделить всёРазвернуть
#define LED_PIN 13
volatile int state = LOW;

void setup(){
  pinMode(LED_PIN, OUTPUT);
  digitalWrite(LED_PIN, LOW);
  attachInterrupt(0, whenButtonPress, CHANGE); 
}

void loop(){
  digitalWrite(LED_PIN, state); 
}

void whenButtonPress(){
  state = !state;
}


Но по итогу светодиод горит с момента включения, и на нажатие кнопки не реагирует.
Что не правильно сделал?

Re: Protoshield и кнопка S1

tegauss » 16 фев 2015, 03:04

Попробуйте без шилда сначала. Чтобы хотя бы на аруине самой заработало. Светодиод на плате есть, кнопку сами прикрутите (int0 - это pin2 для uno). Советую также подтянуть вывод, на который будете вешать кнопку, к земле или к питанию. Иначе контроллер будет читать с него кашу из единичек и нулей.

Re: Protoshield и кнопка S1

s_lim » 16 фев 2015, 05:36

Спасибо за ответ!
Разобрался сам - надо было установить 2ой пин как вывод с напряжением HIGH.
Но возникла новая проблема - у кнопки есть механическое "дрибежание", т.е. при однократном нажатии может несколько раз вызвать прерывание. Обычно это решают чем нибудь вроде delay(200), но в обработчике прерывания нельзя использовать delay() и millis().


Rambler\'s Top100 Mail.ru counter