Добрый вечер.
Делаю устройство для управления открытием/закрытием 8ью воротами, которое включает в себя 8 пультов соединенных между собой шиной CAN(пока еще не определился с шиной). На каждом пульте 8 кнопок с 2мя светодиодами на каждую(красный и зеленый). Этими 8ю кнопками управляются ворота. Т.е. с каждого пульта могут быть открыты любые из 8ми ворот. При нажатии на кнопку соответствующую номеру ворот, начинают открываться ворота и статус этой кнопки меняется на "Открытие" примерно на минуту должен начать моргать зеленый светодиод.
Каждая кнопка имеет 3 состояния которые индицируются светодиодами по бокам кнопки.
1. Закрыто - горит красный светодиод, зеленый потушен.
2. Открытие/закрытие ворот - Моргает зеленый. Открываются в течении минуты по нажатию на эту кнопку. Красный в этот момент потушен.
3. Ворота открыты - горит зеленый светодиод. Красный потушен.
Всё это я делаю на сдвиговом регистре HC595 x2 и HC165 x2.
Каждый пульт будет отправлять в сеть сообщение об изменении состояния какой либо из кнопок, другие пульты буду получать это сообщение и обновлять статус. Также будет главный контроллер который будет собственно и управлять 8ью воротами, как ворота будут открыты главный контроллер будет сообщать что ворота открыты сообщением в сеть.
Вопрос как мне организовать работу со светодиодами и кнопками. Ведь каждый пульт должен отображать состояния ворот светодиодами в реальном времени. Т.е. моргать могут 2 и 3 кнопки одновременно.
Пульты делаю на мегах328. Для кан шины хочу юзать MCP2515. Эти микрухи уже тестил, работают.
Возможно запутанно объяснил.
Заранее благодарю всех откликнувшихся)
Вопрос по сдвиговым регистрам.
- БлудныйКот
- Сообщения: 45
- Зарегистрирован: 29 дек 2016, 16:19
Re: Вопрос по сдвиговым регистрам.
Здравствуйте!
В уроке 21 рассматривается схема и библиотека подключения к Ардуино Led-индикаторов и матрицы кнопок, используя общие выводы. Вы можете заменить Led-индикаторы светодиодами и организовать схему по такому принципу.
В уроке 21 рассматривается схема и библиотека подключения к Ардуино Led-индикаторов и матрицы кнопок, используя общие выводы. Вы можете заменить Led-индикаторы светодиодами и организовать схему по такому принципу.
- БлудныйКот
- Сообщения: 45
- Зарегистрирован: 29 дек 2016, 16:19
Re: Вопрос по сдвиговым регистрам.
Спасибо!
Как пользоваться hc595 уже разобрался. А индицировать под каждой нопкой статус независимо от других пока не понимаю.
Как пользоваться hc595 уже разобрался. А индицировать под каждой нопкой статус независимо от других пока не понимаю.
Re: Вопрос по сдвиговым регистрам.
Если использовать способ из урока 21.
Соединяете кнопки и светодиоды в матрицу по схеме из урока. Подключаете библиотеку LedDigitsKeys.h. В прерывании по таймеру вызываете метод regen().
Теперь состояние каждой кнопки можно узнать из массивов flagPress[] и flagClick[]. Состояние светодиодов можно задать в массиве digit[]. Остается связать эти переменные. Если кнопка нажата, то светодиод горит.
Например, как-то так:
Соединяете кнопки и светодиоды в матрицу по схеме из урока. Подключаете библиотеку LedDigitsKeys.h. В прерывании по таймеру вызываете метод regen().
Теперь состояние каждой кнопки можно узнать из массивов flagPress[] и flagClick[]. Состояние светодиодов можно задать в массиве digit[]. Остается связать эти переменные. Если кнопка нажата, то светодиод горит.
Например, как-то так:
Код: Выделить всё
if( pult.flagClick[0][0] == true ) {
pult.flagClick[0][0] = false;
gateOpen=true; // нажали кнопку ОТКРЫТЬ
pult.digit[0] |= 1; // зажечь светодиод ОТКРЫТО
pult.digit[0] &= 0xfd; // погасить светодиод ЗАКРЫТО
}
if( pult.flagClick[0][1] == true ) {
pult.flagClick[0][1] = false;
gateOpen= false; // нажали кнопку ЗАКРЫТЬ
pult.digit[0] &= 0xfe; // погасить светодиод ОТКРЫТО
pult.digit[0] |= 2; // зажечь светодиод ЗАКРЫТО
}
- БлудныйКот
- Сообщения: 45
- Зарегистрирован: 29 дек 2016, 16:19
Re: Вопрос по сдвиговым регистрам.
Спасибо, со светодиодами уже разобрался) Сейчас разбираюсь с кнопками)
Теперь моргают асинхронно и сколько нужно. Только я решил всё это делать через HC595 и CD4021.
Теперь моргают асинхронно и сколько нужно. Только я решил всё это делать через HC595 и CD4021.
Вернуться в «Программирование Ардуино»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 0 гостей