Содержание

Эксперимент 14. Счётчик нажатий

← Секундомер | Оглавление | Комнатный термометр →

В этом эксперименте мы выводим на семисегментный индикатор количество нажатий на кнопку (единицы).

Список деталей для эксперимента

Для дополнительного задания

Принципиальная схема

Схема на макетке

Обратите внимание

Скетч

p140_seven_segment_clicker.ino
#define DATA_PIN    13 // пин данных (англ. data)
#define LATCH_PIN   12 // пин строба (англ. latch)
#define CLOCK_PIN   11 // пин такта (англ. clock)
#define BUTTON_PIN  10
 
int clicks = 0;
boolean buttonWasUp = true;
byte segments[10] = {
  0b01111101, 0b00100100, 0b01111010, 0b01110110, 0b00100111, 
  0b01010111, 0b01011111, 0b01100100, 0b01111111, 0b01110111
};
 
void setup()
{
  pinMode(DATA_PIN, OUTPUT);
  pinMode(CLOCK_PIN, OUTPUT);
  pinMode(LATCH_PIN, OUTPUT);
  pinMode(BUTTON_PIN, INPUT_PULLUP);
}
 
void loop()
{
  // считаем клики кнопки, как уже делали это раньше
  if (buttonWasUp && !digitalRead(BUTTON_PIN)) {
    delay(10);
    if (!digitalRead(BUTTON_PIN))
      clicks = (clicks + 1) % 10;
  }
  buttonWasUp = digitalRead(BUTTON_PIN);
  // для записи в 74HC595 нужно притянуть пин строба к земле
  digitalWrite(LATCH_PIN, LOW);
  // задвигаем (англ. shift out) байт-маску бит за битом,
  // начиная с младшего (англ. Least Significant Bit first)
  shiftOut(DATA_PIN, CLOCK_PIN, LSBFIRST, segments[clicks]);
  // чтобы переданный байт отразился на выходах Qx, нужно
  // подать на пин строба высокий сигнал
  digitalWrite(LATCH_PIN, HIGH);
}

Пояснения к коду

Вопросы для проверки себя

  1. Для чего нужны микросхемы? Для чего нужен выходной сдвиговый регистр?
  2. Как найти ножку микросхемы, на которую отправляются данные?
  3. Что нужно сделать до и после отправки собственно данных на 74HC595?
  4. Сколько данных можно передать с помощью shiftOut() и как управлять порядком их передачи?

Задания для самостоятельного решения

  1. Заставьте shiftOut() отправлять биты, начиная со старшего, и измените код так, чтобы счетчик по-прежнему показывал арабские цифры.
  2. Замените кнопку на датчик света (фоторезистор в схеме делителя напряжения) и переделайте программу так, чтобы индикатор цифрой показывал уровень освещенности.

← Секундомер | Оглавление | Комнатный термометр →