7 сегментный индикатор. Урок 23. Ардуино

cover
7 сегментный индикатор
7 сегментный индикатор

Привет! В начальном наборе для Ардуино осталось совсем немного датчиков. Сегодня посмотрим на одноразрядный 7 сегментный индикатор.

Такой индикатор это всего лишь несколько светодиодов собранных в корпус. Они собраны по схеме, которая позволяет нам использовать несколько светодиодов, чтобы отображать цифры и буквы.

Поскольку управлять таким индикатором можно также, как и простым светодиодом. Вспомним один из самых первых уроков. И используем программу из него. Посмотрите его еще раз, если уже забыли или пропустили.

Для того, чтобы выполнить этот урок нам понадобиться.

  • Ардуино UNO
  • Макетная плата
  • Перемычки
  • 8 резисторов 220 Ом
  • 7-сегментный одноразрядный индикатор
  • Кабель USB

7 сегментный индикатор

Все светодиоды внутри корпуса индикатора соединены с общим катодом. Для катода даже выделено две ножки. Они находятся в центре с каждой стороны корпуса.

Подключать каждый светодиод нужно последовательно с сопротивлением. Поэтому каждый контакт платы подключаем к Ардуино через резистор.

Схема и программа

Принципиальная схема подключения индикатора
Принципиальная схема подключения индикатора

Схема кажется громоздкой. Но, на самом деле, тут всего лишь соединяются 8 светодиодов. Они соединяются с цифровыми портами Ардуино последовательно с резисторами.

Пока что не будем искать какой конкретно светодиод нужно подключить к конкретному порту. Определим это уже в программе.

Простейший код скетча позволит нам проверить работоспособность индикатора. Для начала включим все сегменты.

int leds[] = {2, 3, 4, 5, 6, 7, 8, 9};

void setup() {
  for( int j=0; j <= 7; j++){
    digitalWrite(leds[j], OUTPUT);
    digitalWrite(leds[j], HIGH);
  }
}
void loop() {
}

Заполним массив номерами цифровых портов. И будем обращаться к ним с помощью этого массива.

Включаем все сегменты индикатора
Включаем все сегменты индикатора

Теперь, надо понять какие порты соответствуют конкретным сегментам на индикаторе. Для этого переберем их последовательно. Добавим небольшую паузу после каждого сегмента. После чего пронумеруем.

int leds[] = {2, 3, 4, 5, 6, 7, 8, 9};
int del = 300;

void setup() {
  for( int j=0; j <= 7; j++){
    digitalWrite(leds[j], OUTPUT);
    delay(del);
    digitalWrite(leds[j], HIGH);
  }
}
void loop() {
}

Теперь мы можем добавить немного движения в схему. Для начала заставим точку мигать.

int leds[] = {2, 3, 4, 5, 6, 7, 8, 9};
int del = 300;

void setup() {
  for( int j=0; j <= 7; j++){
    digitalWrite(leds[j], OUTPUT);
    digitalWrite(leds[j], HIGH);
  }
}

void loop() {
  digitalWrite(leds[0], LOW);
  delay(del);
  digitalWrite(leds[0], HIGH);
  delay(del);
}
Точка на индикаторе мигает каждый цикл
Точка на индикаторе мигает каждый цикл

Обратный отсчет

Ну и теперь напишем небольшую функцию, чтобы мы могли использовать индикатор для отображения цифр.

void digit(int x){
    switch (x) {
        case 1:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[4],HIGH);
          break;
        case 2:
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[3],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 3:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 4:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[6],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 5:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[6],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 6:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[3],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[6],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 7:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[5],HIGH);
          break;
        case 8:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[3],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[6],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 9:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[6],HIGH);
          digitalWrite (leds[7],HIGH);
          break;                   
      }
} 

Теперь мы можем передать в функцию нужную нам цифру и получить ее на индикаторе.

Полный текст программы

Добавим в главный цикл программы вызов функции с увеличением счетчика. Напишем еще одну небольшую функцию очистки экрана. А потом посмотрим, что получилось в итоге.

Счетчик цифр на индикаторе
Счетчик цифр на индикаторе
int leds[] = {2, 3, 4, 5, 6, 7, 8, 9};
int x = 0;
int del = 500;

void setup() {
  for( int j=0; j <= 7; j++){
    digitalWrite(leds[j], OUTPUT);
    digitalWrite(leds[j], LOW);
  }  
}

void clean(){
  for( int j=0; j <= 7; j++){
    digitalWrite(leds[j], LOW);
  }  
}
void digit(int x){
    switch (x) {
        case 1:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[4],HIGH);
          break;
        case 2:
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[3],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 3:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 4:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[6],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 5:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[6],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 6:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[3],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[6],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 7:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[5],HIGH);
          break;
        case 8:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[3],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[6],HIGH);
          digitalWrite (leds[7],HIGH);
          break;
        case 9:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[6],HIGH);
          digitalWrite (leds[7],HIGH);
          break;         
        case 0:
          digitalWrite (leds[1],HIGH);
          digitalWrite (leds[2],HIGH);
          digitalWrite (leds[3],HIGH);
          digitalWrite (leds[4],HIGH);
          digitalWrite (leds[5],HIGH);
          digitalWrite (leds[6],HIGH);
          break;           
      }
  
} 

void loop() {
    digit(x);
    delay(del);
    clean();
    x++;

    if (x == 10){x=0;}        
}

Заключение

Мы рассмотрели одноразрядный 7 сегментный индикатор. Как и многие другие элементы, он служит для вывода информации из нашей схемы и программы для пользователя. Мы написали простейшую программу и функцию управления индикатором. Но также для него уже существуют удобные библиотеки. Рассмотрим одно такую в следующий раз.

Где купить

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

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