roboforum.ru

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

Protoshield и кнопка S1

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

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;
}


Но по итогу светодиод горит с момента включения, и на нажатие кнопки не реагирует.
Что не правильно сделал?
s_lim
 
Сообщения: 5
Зарегистрирован: 29 янв 2015, 16:59

Re: Protoshield и кнопка S1

Сообщение tegauss » 16 фев 2015, 03:04

Попробуйте без шилда сначала. Чтобы хотя бы на аруине самой заработало. Светодиод на плате есть, кнопку сами прикрутите (int0 - это pin2 для uno). Советую также подтянуть вывод, на который будете вешать кнопку, к земле или к питанию. Иначе контроллер будет читать с него кашу из единичек и нулей.
tegauss
 
Сообщения: 14
Зарегистрирован: 02 дек 2011, 22:02
Откуда: Дубна
прог. языки: C, Delphi

Re: Protoshield и кнопка S1

Сообщение s_lim » 16 фев 2015, 05:36

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


Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14