Cемисегментные светодиодные индикаторы и Arduino

Последнее время наблюдается тенденция роста числа проектов на Arduino с использованием различных дисплеев, индикаторов и других способов отображения и вывода информации. Поэтому я считаю нужным рассмотреть вопрос о подключении семисегментных светодиодных индикаторов к плате Arduino UNO. О том, что такое семисегментный индикатор (далее просто индикатор или семисегментник) и как с ним работать было сказано ранее. В данном проекте мы осуществим подключение 4-х индикаторного модуля к плате Arduino UNO.

Внешний вид модуля из 4-х семисегментных индикаторов

LED1

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

LED2

Для того чтобы зажечь определённый индикатор нужно подать на его общий вывод логический ноль или по другому подать ноль. Привожу схему подключения семисегментного модуля из 4-х индикаторов к плате ArduinoUNO.

Схема включения семисегментных светодиодных индикаторов на Arduino

LED3

В данном примере мы получаем аналоговое значение через переменное сопротивление и выводим его на 4 индикатора. Переменное сопротивление подключается к выводу A0. Максимально возможное значение составляет 1024, минимальное соответственно 0. Вращая ручку переменного сопротивления мы меняем показания «дисплея».

Схема питается от источника тока в 5 Вольт. Подключение необходимо осуществлять через токоограничивающие резисторы. Такие резисторы при напряжении в 5 Вольт составляют в пределах 330-470 Ом. Это необходимо для защиты микроконтроллера Arduinoот значительных токов, которые могут вывести ее из строя.

На модули есть выводы с обозначениями «G,F,E,D,C,B,A» их нужно подключить к следующим выводам Arduino «8,7,6,5,4,3,2»

А так это выглядит в собраном виде

LED4

Код программы для управления семисегментными индикаторами

const int numeral[10] = {
   //ABCDEFG /dp
   B11111100, // 0
   B01100000, // 1
   B11011010, // 2
   B11110010, // 3
   B01100110, // 4
   B10110110, // 5
   B00111110, // 6
   B11100000, // 7
   B11111110, // 8
   B11100110, // 9
};
// pins for decimal point and each segment
// DP,G,F,E,D,C,B,A
const int segmentPins[] = { 13,8,7,6,5,4,3,2 };
const int nbrDigits= 4; // the number of digits in the LED display
//dig 0 1 2 3
const int digitPins[nbrDigits] = { 9,10,11,12 };
void setup()
{
   for(int i=0; i < 8; i++) {
      pinMode(segmentPins[i], OUTPUT); // set segment and DP pins to output
   }
   for(int i=0; i < nbrDigits; i++) {
      pinMode(digitPins[i], OUTPUT);
   }
} 
 
void loop()
{
   int value = analogRead(0);
   showNumber(value);
} 
 
void showNumber( int number)
{
   if(number == 0) {
      showDigit( 0, nbrDigits-1) ; // display 0 in the rightmost digit
   } else {
      // display the value corresponding to each digit
      // leftmost digit is 0, rightmost is one less than the number of places
      for( int digit = nbrDigits-1; digit >= 0; digit--)  {
         if(number > 0)  {
            showDigit( number % 10, digit) ;
            number = number / 10;
         }
      }
   }
} 
 
// Displays given number on a 7-segment display at the given digit position
void showDigit( int number, int digit)
{
   digitalWrite( digitPins[digit], HIGH );
   for(int segment = 1; segment < 8; segment++)  {
      boolean isBitSet = bitRead(numeral[number], segment);
      // isBitSet will be true if given bit is 1
      // isBitSet = ! isBitSet; // Code Option*
      // uncomment the above Code Option line for common anode display
      digitalWrite( segmentPins[segment], isBitSet);
   }
   delay(5);
   digitalWrite( digitPins[digit], LOW );
} 

В данном коде мы сначала объявили массив значений для отображения каждого сегмента индикатора. Для того чтобы зажечь тот или иной сегмент и сформировать из него цифру нужно на выводы подать напряжение.

Комментарии  

 
#1 Андрей 01.02.2016 22:25
Долго искал в интернете понятный скетч для вывода переменный на сегментный индикатор. Пример мне понравился, все вроде бы получилось/ Только сначала перепутал порядок анодов общих. Как-то еще придумать, чтобы вывод данных немного усреднялся для большей стабильности показаний. Но это просто учебный пример. Вместо переменного резистора можно подключить датчик температуры или еще что. Спасибо.
Цитировать
 

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


Защитный код
Обновить

Последние комментарии

Последнии темы форума

  • Нет сообщений для показа