Очередной шаг в построении часов на базе бюджетной платформы Arduino... В этом уроке будет продемонстрировано подключение семисегментного дисплея на базе драйвера МАХ7219.

        И прежде чем выводить данные о текущем времени, температуре, да и вообще выводить какие либо значения и параметры, нужно хоть немного освоить этот дисплей. Начинать конечно же, нужно с установки библиотеки, называется она LedControl.h, скачать её можно с GitHub. После установки библиотеки, станут доступны три примера применения, нас интересует пример применения библиотеки с 7-ми сегментными дисплеями, он называется LCDemo7Segment. Исходя из него будем изучать функционал библиотеки для работы с дисплеями на базе драйвера МАХ7219. Картинка ниже показывает как выглядит сам дисплей на базе драйвера МАХ7219.

 

 

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

 

 

        Ну и для начала, хотелось бы показать скетч основу для работы с дисплеем. Главное - хорошо его прокомментировать, чтобы в дальнейшем, глядя в скетч не возникало вопросов. Остаётся только напомнить - что если вы хотите просто протестировать на работоспособность данный дисплей, то можно скопировать его прямо из окна браузера в среду разработки Arduino IDE.  Главная функция скетча заключается в том, чтобы выводить указанные цифры в нужное знакоместо на дисплее.

 

/*Подключаем библиотеку LedControl.h*/
#include "LedControl.h"

/*Константы для пинов подключения*/
#define DATA_IN 13
#define CLK 12
#define LOAD_CS 11
#define NUM_DEV 1
#define DISP_ADDR 0

/*Цифра выводимая на дисплей*/
short Digit = 4;
/*Порядковый номер знакоместа*/
short Rank = 2;

/*
  Подключение дисплея MAX7219 производим в
  соответсвии с нижеследующей таблицей
  Arduino [Pin 13] -> Max7219 [DataIn]
  Arduino [Pin 12] -> Max7219 [CLK]
  Arduino [Pin 11] -> Max7219 [LOAD]

  Далее, ниже создаём объект Display класса LedControl
  с указанием пинов подключения, константа NUM_DEV говорит
  о том сколько устройств будет подключено каскадом по шине SPI
  в данном случае - всего одно, это дисплей MAX7219
*/
LedControl Display = LedControl(DATA_IN, CLK, LOAD_CS, NUM_DEV);

void setup()
{
  /*Выводим дисплей из спящего режима*/
  Display.shutdown(DISP_ADDR, false);
  /*Устанавливаем яркость свечения сегментов*/
  /*Доступные значения от 0 до 15*/
  Display.setIntensity(DISP_ADDR, 8);
  /*Очищаем дисплей*/
  Display.clearDisplay(DISP_ADDR);
}

void loop()
{
  /*
    Выводим цифру на дисплей в указанном знакоместе, где -
    DISP_ADDR - Адрес устройства на шине SPI, в нашем случае равен 0
    Rank - Порядковый номер знакоместа
    Digit - Выводимая на дисплей цифра
    Последний аргумент функции setDigit зажигает точку в выбранном
    знакоместе Rank если установлен в true, либо гасит точку, если
    установлен в false
  */
  Display.setDigit(DISP_ADDR, Rank, Digit, false);
}

 

        На фото ниже, можно видеть работу скетча, вкратце - функция setDigit() выводит цифру(переменная Digit), в знакоместо(переменная Rank) без зажигания десятичной точки в выбранном знакоместе. Говоря простым языком, выводим на дисплей цифру 4 в третьем разряде(справа). Если, к примеру, нужно зажечь точку в выбранном знакоместе, то последним параметром нужно указать true. 

 

 

        Итак, мы разобрались как зажечь цифру в нужном знакоместе, далее нас ждет освоение следующего шага - кодирование(генерация) собственных символов для дисплее на базе драйвера MAX7219. Конечно, следует учитывать, что мы не сможем создать полноценный набор буквенных знаков, потому как нас сильно ограничивает количество сегментов данного типа дисплея. Но, кое что у нас получится, и в дальнейшем полученные знания мы применим для построения меню для дисплеев этого типа.