8 (800) 350-30-16

Счетчик нажатий с помощью сдвигового регистра

Дата: / Категория: Светодиоды / Автор: DOC_tr

В данной статье я разберу, как сделать счетчик нажатий на кнопку, с отображением на цифровом семисегментном индикаторе, а еще впаяю сюда заодно сдвиговый регистр, чтобы использовать не 8 пинов Arduino, а всего 4. 

Более подробно о работе сдвигового регистра я расскажу в следующей статье, а сейчас вам о нем нужно знать только то, что он может с помощью всего лишь 3х портов управлять 8ю портами. Эдакий множитель портов. Крайне полезная штука, если у вас не хватает портов на ардуине (в принципе, данное заявление распространяется практически на всех владельцев Arduino, разве что кроме Arduino MEGA).

Но об этом в следующей статье, а сейчас будет небольшой код и инструкция, как заставить все это дело работать.

Итак, приступим.

Соберем все, что лежит у нас на столе, по следующей схеме:

На схеме все это выглядит красиво, а вот в жизни не слишком ;)

Но, главное, что это все работает.

А теперь запустим наш "perpetuum mobile" с помощью следующего кода:

#define DT_PINS 7 // пин с данными
#define LAT_PINS 6 // пин строба
#define CLCK_PINS 5 // тактовый пин
#define BUTT_PINS 4 // пин кнопки

int click = 0;
boolean buttonWasUp = true;
byte segments[10] = {
0b01111101, 0b00100100, 0b01111010, 0b01110110, 0b00100111,
0b01010111, 0b01011111, 0b01100100, 0b01111111, 0b01110111
};

void setup()
{
pinMode(DT_PINS, OUTPUT);
pinMode(CLCK_PINS, OUTPUT);
pinMode(LAT_PINS, OUTPUT);
pinMode(BUTT_PINS, INPUT_PULLUP);
}

void loop()
{
// считаем клики с порта кнопки
if (buttonWasUp && !digitalRead(BUTT_PINS)) {
delay(10);
if (!digitalRead(BUTT_PINS))
click = (click + 1) % 10;
}
buttonWasUp = digitalRead(BUTT_PINS);
digitalWrite(LAT_PINS, LOW);
// передаем в наш регистр биты из нашего массива
shiftOut(DT_PINS, CLCK_PINS, LSBFIRST, segments[click]);
// выводим данные на соответствующие пины
digitalWrite(LAT_PINS, HIGH);
}

После запуска пробуем нажимать на кнопку и видим, что все получилось - цифра на экране меняет свое значение.

Вы можете сами поэкспериментировать с различными вариантами подключения портов, а также изменять единицы и нули в массиве segments, и посмотреть что получится. А почему так получается, а именно как мы с помощью 3х портов управляем восемью, я разберу подробно в следующей статье.

Теги: #Arduino, #74HC595, #кнопки, #цифровой индикатор

Ваша оценка:

Рейтинг: 10.0 (Оценок: 1)

Комментарий:

Copyright © RobOM.ru 2016 г. Все права защищены