Четырехразрядный семисегментный индикатор

Четырехразрядный семисегментный индикатор Ардуино

Четырехразрядный семисегментный индикатор Ардуино ► светодиодный индикатор четырехсимвольный используется для таймеров на Arduino или вывода чисел в проектах.

Светодиодный четырехразрядный семисегментный индикатор Ардуино используется для создания счетчиков или таймеров на Arduino, вывода числовых значений с датчиков в готовых проектах. Рассмотрим распиновку четырехсимвольного светодиодного индикатора, как подключить модуль к плате Arduino и рассмотрим несколько примеров использования индикатора с подробным описанием программ.

Видео. Четырехразрядный семисегментный индикатор

Распиновка 4 разрядного 7 сегментного индикатора

Распиновка сегментов индикатора, состоящего из четырех символов ничем не отличается от одно символьного семисегментного индикатора Ардуино. Отличие модуля в количестве разрядов (символов) — каждый разряд включается отключением питания от соответствующего катода. Таким образом все светодиоды одного сегмента в разрядах (например, A-A-A-A) подключены параллельно к общему катоду.

Распиновка четырехразрядного семисегментного светодиодного индикатора
Распиновка четырехразрядного семисегментного светодиодного индикатора

С включением сегмента довольно просто разобраться. Разберем небольшой пример. Изначально на все 4 разряда (D1, D2, D3, D4) подано напряжение. Чтобы включить сегмент A на втором символе, необходимо на ножку A (анод) подать напряжение. Но сегмент не загорится, пока мы не отключим напряжение у ножки D2. Таким образом можно включать любой светодиод на модуле 7 сегментного индикатора.

Проблема подключения индикатора к Arduino состоит в том, что используется сразу много пинов на плате. Кроме того, выводить на индикаторе одновременно можно только одну цифру. Поэтому необходимо за очень короткое время по очереди выводить нужную цифру на каждом из разрядов. Человеческое зрение не успевает уловить переключение и вам будет казаться, что все разряды горят одновременно.

Подключение 4 разрядного 7 сегментного индикатора

Для занятия нам понадобятся следующие детали:

  • плата Arduino Uno / Arduino Nano / Arduino Mega;
  • четырехразрядный семисегментный индикатор;
  • макетная плата (breadboard);
  • тактовая кнопка;
  • аналоговый датчик воды;
  • резисторы 220 Ом;
  • провода «папа-папа».
Схема подключения четырехсегментного индикатора к Ардуино
Схема подключения четырехсегментного индикатора к Ардуино

В первом примере мы продемонстрируем простую программу, чтобы можно было наглядно понять, как работает 4-разрядный 7-сегментный индикатор к Ардуино. Схема подключения индикатора к микроконтроллеру представлена на схеме выше, но в первом примере не все пины Ардуино используются в программе. Подключите светодиодный четырехразрядный индикатор к плате и загрузите следующий код.

Скетч 4-разрядного семисегментного индикатора

#define g  11  // назначаем имена пинов для удобства
#define d1 A1
#define d2 A2
#define d3 A3
#define d4 A4

void setup() {
   pinMode(g, OUTPUT);   // назначаем режим работы пинов
   pinMode(d1, OUTPUT);
   pinMode(d2, OUTPUT);
   pinMode(d3, OUTPUT);
   pinMode(d4, OUTPUT);

   digitalWrite(d1, HIGH);  // подаем напряжение на пины разрядов
   digitalWrite(d2, HIGH);
   digitalWrite(d3, HIGH);
   digitalWrite(d4, HIGH);

   digitalWrite(g, HIGH);   // подаем напряжение на сегмент (G)
   delay(1000);
}

void loop() {
   digitalWrite(d1, LOW); // включаем первый разряд
   digitalWrite(d4, HIGH);
   delay(200);
   digitalWrite(d2, LOW); // включаем второй разряд
   digitalWrite(d1, HIGH);
   delay(200);
   digitalWrite(d3, LOW); // включаем третий разряд
   digitalWrite(d2, HIGH);
   delay(200);
   digitalWrite(d4, LOW); // включаем четвертый разряд
   digitalWrite(d3, HIGH);
   delay(200);
}

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

  1. в процедуре void setup мы подали напряжение на четыре разряда светодиодного индикатора, чтобы они не горели изначально при начале программы;
  2. в основном цикле void loop мы поочередно включаем разряды (включение происходит при режиме LOW), при этом сегмент G остается всегда включен.

В следующем примере соберем схему — таймер Ардуино с четырехразрядным семисегментным индикатором на светодиодах. Перед загрузкой скетча необходимо подключить к пину A0 тактовую кнопку и установить библиотеку в Arduino IDE TaimerOne.h. Запуск таймера происходит только при нажатой кнопке, а при отпускании кнопки таймер останавливается и обнуляется при повторном нажатии.

Скетч таймера на 4-разрядном семисегментном индикаторе

#include <TimerOne.h>
#define a 5
#define b 6
#define c 7
#define d 8
#define e 9
#define f 10
#define g 11

#define d1 A1
#define d2 A2
#define d3 A3
#define d4 A4

long n = 0;
int x = 100;
int count = 0;

void setup() {
  pinMode(a, OUTPUT);
  pinMode(b, OUTPUT);
  pinMode(c, OUTPUT);
  pinMode(d, OUTPUT);
  pinMode(e, OUTPUT);
  pinMode(f, OUTPUT);
  pinMode(g, OUTPUT);

  pinMode(d1, OUTPUT);
  pinMode(d2, OUTPUT);
  pinMode(d3, OUTPUT);
  pinMode(d4, OUTPUT);
  
  pinMode(A0, INPUT);

  Timer1.initialize(100000);
  Timer1.attachInterrupt( add );
}

void loop() {
  while (digitalRead(A0) == LOW) {
    clearLEDs();
    pickDigit(0); // включаем первую цифру (тысячи)
    pickNumber((n / 1000));
    delay(5);

    clearLEDs();
    pickDigit(1); // включаем вторую цифру (сотни)
    pickNumber((n % 1000) / 100);
    delay(5);

    clearLEDs();
    pickDigit(2); // включаем третью цифру (десятки)
    pickNumber(n % 100 / 10);
    delay(5);

    clearLEDs();
    pickDigit(3); // включаем четвертую цифру (единицы)
    pickNumber(n % 10);
    delay(5);
  }
  if (digitalRead(A0) == HIGH) { n = 0; count = 0; }
}

// определение разряда
void pickDigit(int x) {
  digitalWrite(d1, HIGH);
  digitalWrite(d2, HIGH);
  digitalWrite(d3, HIGH);
  digitalWrite(d4, HIGH);
  switch (x) {
    case 0: digitalWrite(d1, LOW);  break;
    case 1: digitalWrite(d2, LOW);  break;
    case 2: digitalWrite(d3, LOW);  break;
    default: digitalWrite(d4, LOW); break;
  }
}

// определение символа (цифры)
void pickNumber(int x) {
  switch (x) {
    default: zero();   break;
    case 1: one();     break;
    case 2: two();     break;
    case 3: three();  break;
    case 4: four();    break;
    case 5: five();     break;
    case 6: six();       break;
    case 7: seven(); break;
    case 8: eight();  break;
    case 9: nine();   break;
  }
}

// очистка индикатора
void clearLEDs() {
  digitalWrite(a, LOW);
  digitalWrite(b, LOW);
  digitalWrite(c, LOW);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void zero() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, LOW);
}

void one() {
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void two() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, LOW);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
}

void three() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, HIGH);
}

void four() {
  digitalWrite(a, LOW);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void five() {
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void six() {
  digitalWrite(a, HIGH);
  digitalWrite(b, LOW);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void seven() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, LOW);
  digitalWrite(e, LOW);
  digitalWrite(f, LOW);
  digitalWrite(g, LOW);
}

void eight() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, HIGH);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void nine() {
  digitalWrite(a, HIGH);
  digitalWrite(b, HIGH);
  digitalWrite(c, HIGH);
  digitalWrite(d, HIGH);
  digitalWrite(e, LOW);
  digitalWrite(f, HIGH);
  digitalWrite(g, HIGH);
}

void add() {
  count ++;
  if (count == 10) {
    count = 0;  n++;
    if (n == 10000) { n = 0; }
  }
}

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

  1. если не подключить кнопку — таймер запустится сразу после загрузки кода;
  2. в процедуре void add идет отсчет секунд — count. Когда первый разряд четырехсимвольного индикатора Ардуино переполняется (переменная count становится больше 9) — увеличивается на одну единицу счетчик.
1 Star2 Stars3 Stars4 Stars5 Stars (2 votes, average: 5,00 out of 5)
Загрузка...

Похожие записи по теме:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *