КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

7-сегментный дисплей 86*65мм, 3 inch

Общие сведения:

Последовательные 7-сегментные дисплеи 86x65мм красного, зелёного и синего цвета - позволяют выводить числа (целые, дробные, отрицательные), время, температуру, текст и т.д.

Модули дисплеев можно использовать как по отдельности, так и подключать их друг к другу. Первый модуль подключается к микроконтроллеру используя всего 2 информационных вывода, а вход каждого последующего модуля подключается к выходу предыдущего. Таким образом можно создать целую строку для вывода различной информации, задействовав всего 2 вывода микроконтроллера. Ещё один вывод микроконтроллера (с поддержкой ШИМ) можно использовать для управления яркостью всех последовательно соединённых модулей.

Видео:

Спецификация:

  • Напряжение питания Vcc: 5 В.
  • Уровень логической «1» на входе: > 0,7 Vcc.
  • Уровень логической «1» на выходе: > 0,8 Vcc.
  • Уровень логического «0» на входе: < 0,3 Vcc.
  • Уровень логического «0» на выходе: < 0,1 Vcc.
  • Потребляемый ток: < 200 мА, при Vcc = 5В, все сегменты включены на максимальной яркости
  • Потребляемый ток: < 200 мкА, при Vcc = 5В, все сегменты выключены
  • Цвет сегментов: красный / зелёный / синий.
  • Рабочая температура: -40 ... 85 °С
  • Габариты: 86х65х24 мм.
  • Вес: 85 г.

Подключение:

Информационные выводы модуля (SCL и SDI) можно подключать к любым цифровым или аналоговым выводам Arduino. Дополнительный вывод модуля PWM, позволяющий управлять яркостью, подключается к любому выводу Arduino с поддержкой ШИМ. Если в вашем проекте регулировка яркости не требуется, то вывод модуля PWM остаётся неподключённым.

У модуля имеются две колодки выводов на входе (с одной стороны платы) и две колодки выводов на выходе (с другой стороны платы):

  • Колодка питания на входе:
    Колодка состоит из 2 выводов и служит для подачи питания 5VDC на модуль.
    • +5V - вход питания.
    • GND - общий вывод питания (все выводы GND всех колодок внутрисхемно соединены).
  • Колодка данных на входе:
    Колодка состоит из 4 выводов и служит для управления модулем.
    • SCL - (Serial CLock) вход линии тактирования.
    • SDI - (Serial Data Input) вход линии данных.
    • PWM - (Pulse Width Modulation) вход сигнала ШИМ для управления яркостью.
    • GND - общий вывод питания (все выводы GND всех колодок внутрисхемно соединены).
  • Колодка питания на выходе:
    Колодка состоит из 2 выводов и служит для подачи питания на следующий модуль.
    • +5V - выход питания (соединён с одноимённым выводом на входе).
    • GND - общий вывод питания (все выводы GND всех колодок внутрисхемно соединены).
  • Колодка данных на выходе:
    Колодка состоит из 4 выводов и служит для подключения следующего модуля.
    • SCL - (Serial CLock) выход линии тактирования.
    • SDO - (Serial Data Output) выход линии данных.
    • PWM - (Pulse Width Modulation) выход сигнала ШИМ для управления яркостью.
    • GND - общий вывод питания (все выводы GND всех колодок внутрисхемно соединены).

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

Модули удобно подключать 3 способами, в зависимости от ситуации:

Способ - 1 : Подключение без управления яркостью

Выводы SCL и SDI первого модуля можно подключать к любым выводам Arduino или ESP, а вывод PWM остаётся неподключённым.

Входы следующих модулей подключаются в выходам предыдущих, как показано на схеме.

Подключение к Piranha UNO / Arduino UNO:

В примере вывод SCL подключён к выводу D6, вывод SDI к выводу D7.

Подключение к Piranha ESP32:

В примере вывод SCL подключён к выводу 19, вывод SDI к выводу 18.

Способ - 2 : Подключение с возможностью программного управления яркостью

Данные примеры отличаются от предыдущих наличием подключённого вывода PWM.

Подключение к Piranha UNO / Arduino UNO:

Вывод PWM подключается к любому выводу Arduino поддерживающему ШИМ (в примере D11).

Подключение к Piranha ESP32:

Вывод PWM подключается к любому выводу ESP (в примере 17).

Способ - 3 : Подключение с раздельным питанием, без управления яркостью

При таком подключении, плата микроконтроллера запитана от одного источника питания, а модули дисплеев от другого.

Если дополнительно подключить вывод PWM, как в предыдущем примере, то появится возможность программного управления яркостью.

Подключение к Piranha UNO / Arduino UNO:

На картинке не показан источник питания Arduino UNO, им может быть кабель USB, провод питания с разъёмом DC jack 5.5x2.1, или автономный источник питания.

Подключение к Piranha ESP32:

На картинке не показан источник питания Piranha ESP32, им может быть кабель USB, или источник питания подключённый к выводам черной (-) и белой (+) колодки.

Питание:

Входное напряжение питания модулей 5В постоянного тока подаётся на выводы +5V и GND колодки питания.

При наличии в проекте большого количества модулей, рекомендуется использовать подключение с раздельным питанием. Отдельный источник питания подключается к выводам +5V и GND колодки питания модуля, а вывод GND колодки данных модуля подключается к любому выводу GND на плате Arduino / Piranha / ESP.

Подробнее о модуле:

Модуль построен на базе 7-и сегментного индикатора и 8-и битного сдвигового регистра 74HC595 с выходным регистром-защелки. Наличие регистра-защёлки предотвращает мерцание сегментов в процессе загрузки данных. Сигналы к регистру проходят через микросхему 74HC00, логика включения которой позволяет использовать всего 2 провода (SCL и SDI) как для записи данных в сдвиговый регистр, так и для выгрузки уже записанной информации в регистр-защёлки.

В каждом сегменте индикатора (кроме точки) используются 4 последовательно соединённых светодиода, для питания которых модуль оснащён повышающим DC-DC преобразователем MT3608. Управление сегментами происходит через транзисторные сборки Дарлингтона ULN2003. Вход PWM используемый для регулировки яркости ШИМ сигналом, внутрисхемно подтянут до уровня +5V, значит при неподключённом выводе PWM - яркость будет максимальной.

Для работы с модулями последовательных 7-сегментных дисплеев нужно установить библиотеку iarduino_nLED, которая позволяет регулировать яркость свечения сегментов, задавать выравнивание, выводить числа (целые, дробные, положительные, отрицательные) и символы ("0123456789abcdefghijlnopstu .,*-_"), как на всю строку из модулей, так и на выбранные участки этой строки.

Подробнее про установку библиотеки читайте в нашей инструкции..

Примеры вывода данных на всю строку модулей:

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

#include <iarduino_nLED.h>             // Подключаем библиотеку для работы с последовательными 7-сегментными дисплеями.
iarduino_nLED disp(3, 6, 7);           // Создаём объект disp для работы с функциями и методами библиотеки iarduino_nLED, указав: КОЛИЧЕСТВО модулей, вывод SCL, вывод SDI [, вывод PWM].
                                       // В данном примере вывод PWM не указан, значит он не используется.
void setup(){                          //
     disp.clear();                     // Чистим весь экран.
}                                      //
                                       //
void loop(){                           //
     float i;                          //
     i=(float)(millis()%100000)/1000;  // Получаем время в секундах с момента старта скетча в виде числа с плавающей точкой. Со сбросом в 0 после каждых 99,999 секунд.
     disp.print( i, 1 );               // Выводим полученное число с одним знаком после запятой.
}                                      //

В данном скетче создаётся объект disp для работы со строкой из 3 модулей подключённых к выводам 6 и 7 Arduino (6-SCL, 7-SDI). Вывод модуля PWM не указан, значит он не используется.

После подачи питания, на строке из трёх модулей, будет отображаться длительность работы Arduino в секундах, с одним знаком после запятой.

По умолчанию, выводимое число выравнивается по правому краю строки.

При выводе чисел от 0.0 до 9.9, они занимают всего 2 модуля, значит старший разряд (крайний левый модуль) будет погашен. При выводе чисел от 10.0 до 99.9, они будут занимать все три модуля строки.

Вывод чисел и текста:

#include <iarduino_nLED.h>             // Подключаем библиотеку для работы с последовательными 7-сегментными дисплеями.
iarduino_nLED disp(4, 6, 7, 11);       // Создаём объект disp для работы с функциями и методами библиотеки iarduino_nLED, указав: КОЛИЧЕСТВО модулей, вывод SCL, вывод SDI [, вывод PWM].
                                       //
void setup(){                          //
     disp.clear();                     // Чистим весь экран.
}                                      //
                                       //
void loop(){                           //
     disp.light(255);                  // Устанавливаем максимальную яркость.
                                       //
     disp.align(nLED_LEFT, '_' );      // Выравнивание по левому краю, с указанием замещающего символа.
     disp.print( 123           );      // Выводим целое положительное число.
     delay     ( 2000          );      //
                                       //
     disp.align(nLED_RIGHT, ' ');      // Выравнивание по правому краю, с указанием замещающего символа.
     disp.print( -1.2 , 2      );      // Вывод отрицательного дробного числа "-1.2 " с двумя знаками после запятой.
     delay     ( 2000          );      //
                                       //
     disp.print( 31       , OCT);      // Вывод целого числа в восьмеричной системе.
     delay     ( 2000          );      //
                                       //
     disp.print( -31      , HEX);      // Вывод отрицательного целого числа в шестнадцатиричной системе.
     delay     ( 2000          );      //
                                       //
     disp.light(127);                  // Устанавливаем половину яркости.
     disp.print("abc"          );      // Вывод текста.
     delay     ( 2000          );      //
}                                      //

В данном скетче создаётся объект disp для работы со строкой из 4 модулей подключённых к выводам 6, 7 и 11 arduino (6-SCL, 7-SDI, 11-PWM).

После подачи питания, на строке из четырёх модулей, будут появляться данные:

Замещающий символ указанный вторым аргументом функции align() используется для заполнения всех модулей в которые не попали данные выводимые функцией print().

Примеры вывода данных в указанное место строки модулей:

Библиотека iarduino_nLED позволяет создать строку из нескольких модулей, но выводить данные не на всю строку стразу (как в предыдущих примерах), а в определённые места.

Вывод разных данных в разные места строки:

#include <iarduino_nLED.h>             // Подключаем библиотеку для работы с последовательными 7-сегментными дисплеями.
iarduino_nLED disp(5, 6, 7);           // Создаём объект disp для работы с функциями и методами библиотеки iarduino_nLED, указав: КОЛИЧЕСТВО модулей, вывод SCL, вывод SDI [, вывод PWM].
                                       // В данном примере вывод PWM не указан, значит он не используется.
create_place disp_val(disp, 1, 3);     // Создаём место для вывода чисел  (место от объекта disp, начинается с 1 модуля от левого края, занимает 3 модуля).
create_place disp_txt(disp, 4, 2);     // Создаём место для вывода текста (место от объекта disp, начинается с 4 модуля от левого края, занимает 2 модуля).
                                       //
void setup(){                          //
     disp.clear();                     // Чистим весь экран.
     disp_val.align(nLED_RIGHT, '0');  // Определяем выравнивание для чисел , с указанием замещающего символа.
     disp_txt.align(nLED_LEFT , ' ');  // Определяем выравнивание для текста, с указанием замещающего символа.
}                                      //
                                       //
void loop(){                           //
//   Выводим температуру:              //
     disp_val.print(7.5, 1);           // Выводим число 7.5 с одним знаком после запятой в место определённое объектом disp_val.
     disp_txt.print( "*C" );           // Выводим текст "°C" в место определённое объектом disp_txt.
     delay(5000);                      // Ждём 5 секунд.
//   Выводим освещённость:             //
     disp_val.print( 500  );           // Выводим число 500 в место определённое объектом disp_val.
     disp_txt.print( "L"  );           // Выводим текст "L" в место определённое объектом disp_txt.
     delay(5000);                      // Ждём 5 секунд.
}                                      //

В данном скетче создаётся объект disp для работы со строкой из 5 модулей подключённых к выводам 6 и 7 arduino (6-SCL, 7-SDI). Вывод модуля PWM не указан, значит он не используется.

Далее создаются два объекта (disp_val и disp_txt), которым выделяется определённое место на строке из модулей. Эти объекты используют те же функции что и объект disp, но выводят информацию не на всю строку модулей, а только в выделенное для них место.

После подачи питания, на строке из пяти модулей, будет отображаться температура и освещённость, чередуясь через каждые 5 секунд.

Функцией align() числа выравнены по правому краю выделенного им места, а текст по левому. Той же функцией указаны замещающие символы: для чисел '0', для текста ' ' (пробел).

Вывод времени прошедшего с начала старта скетча в формате ЧЧ.ММ.СС:

#include <iarduino_nLED.h>             // Подключаем библиотеку для работы с последовательными 7-сегментными дисплеями.
iarduino_nLED disp(6, 6, 7);           // Создаём объект disp для работы с функциями и методами библиотеки iarduino_nLED, указав: КОЛИЧЕСТВО модулей, вывод SCL, вывод SDI [, вывод PWM].
                                       // В данном примере вывод PWM не указан, значит он не используется.
create_place disp_H(disp, 1, 2);       // Создаём место для вывода часов  (место от объекта disp, начинается с 1 модуля от левого края, занимает 2 модуля).
create_place disp_M(disp, 3, 2);       // Создаём место для вывода минут  (место от объекта disp, начинается с 3 модуля от левого края, занимает 2 модуля).
create_place disp_S(disp, 5, 2);       // Создаём место для вывода секунд (место от объекта disp, начинается с 5 модуля от левого края, занимает 2 модуля).
                                       //
void setup(){                          //
     disp.clear();                     // Чистим весь экран.
     disp_H.align(nLED_RIGHT, '0');    // Определяем выравнивание для часов , с указанием замещающего символа.
     disp_M.align(nLED_RIGHT, '0');    // Определяем выравнивание для минут , с указанием замещающего символа.
     disp_S.align(nLED_RIGHT, '0');    // Определяем выравнивание для секунд, с указанием замещающего символа.
}                                      //
                                       //
void loop(){                           //
//   Определяем прошедшее время:       //
     int h=millis()/1000/60/60%24;     // Получаем часы    прошедшие с момента старта скетча.
     int m=millis()/1000/60%60;        // Получаем минуты  прошедшие с момента старта скетча.
     int s=millis()/1000%60;           // Получаем секунды прошедшие с момента старта скетча.
//   Выводим время:                    //
     disp_H.print(h);                  // Выводим часы    в место определённое объектом disp_H.
     disp_M.print(m);                  // Выводим минуты  в место определённое объектом disp_M.
     disp_S.print(s);                  // Выводим секунды в место определённое объектом disp_S.
//   Мигаем двумя точками:             //
     disp.point(2, millis()%1000<500); // Выводим точку на 2 модуль в течении первых 0,5 сек.
     disp.point(4, millis()%1000<500); // Выводим точку на 4 модуль в течении первых 0,5 сек.
}                                      //

В данном скетче создаётся объект disp для работы о строкой из 6 модулей подключённых к выводам 6 и 7 arduino (6-SCL, 7-SDI). Вывод модуля PWM не указан, значит он не используется.

Далее создаются три объекта (disp_H, disp_M, disp_S), которым выделяется определённое место на строке из модулей. Эти объекты используют те же функции что и объект disp, но выводят информацию не на всю строку модулей, а только в выделенное для них место.

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

Описание функций библиотеки:

Подключение библиотеки:

При создании объекта библиотеки указывается количество последовательно подключённых модулей (от 1 до 255) и номера выводов Arduino используемых для их подключения:

iarduino_nLED ОБЪЕКТ( количество модулей , вывод SCL , вывод SDI [, вывод PWM] );

#include <iarduino_nLED.h>           // Подключаем библиотеку iarduino_nLED.
iarduino_nLED disp1( 20, 3, 4     ); // Создаём объект disp1, указав что подключено 20 модулей, к выводам 3 (SCL) и 4 (SDI).
iarduino_nLED disp2( 10, 6, 7, 11 ); // Создаём объект disp2, указав что подключено 10 модулей, к выводам 6 (SCL) , 7 (SDI) и 11 (PWM).

Если вывод PWM не используется при подключении, то он и не указывается при создании объекта. При этом яркость дисплеев будет аппаратно установлена на 100%.

    В примере подключено две строки модулей:
  • Первая строка состоит из 20 модулей подключённых к выводам 3 (SCL) и 4 (SDI).
  • Вторая строка состоит из 10 модулей подключённых к выводам 6 (SCL), 7 (SDI), 11 (PWM).
  • Количество подключаемых строк ограничено количеством доступных выводов и памяти.
  • Каждая строка может содержать от 1 до 255 модулей.

Примечание: Если модули подключены к плате ESP32 и требуется регулировать их яркость, то вместо номера вывода PWM указывается номер канала ШИМ, который конфигурируется стандартными функциями ledcSetup() и ledcAttachPin() до или после создания объекта.

// ПРИМЕР ДЛЯ ESP32:                    //
#include <iarduino_nLED.h>              // Подключаем библиотеку iarduino_nLED.
iarduino_nLED disp( 5, 19, 18, КАНАЛ ); // Создаём объект disp, указав что подключено 5 модулей, к выводам 19 (SCL), 18 (SDI) и указываем какой канал ШИМ используется для управления яркостью.
ledcSetup         ( КАНАЛ, 1000, 8   ); // Настраиваем ШИМ указав: номер канала ШИМ, частоту ШИМ (1000 Гц) и разрешение ШИМ (8 бит).
ledcAttachPin     ( ВЫВОД, КАНАЛ     ); // Подключаем вывод к каналу ШИМ.
  • КАНАЛ - число определяющее номер канала ШИМ от 0 до 15.
  • ВЫВОД - номер вывода ESP32 подключённый к выводу PWM модуля.

Функция clear();

  • Назначение: Очистка дисплеев.
  • Синтаксис: clear();
  • Параметры: Нет.
  • Возвращаемые значения: Нет.
  • Примечание: Функция отключает все сегменты на всех модулях.
  • Пример:
disp.clear(); // Чистим все дисплеи (выключаем все светодиоды).

Функция light();

  • Назначение: Установка яркости свечения дисплеев.
  • Синтаксис: light ( ЯРКОСТЬ );
  • Параметры:
    • uint8_t ЯРКОСТЬ - представлена целым числом от 0 (0%) до 255 (100%).
  • Возвращаемые значения: Нет.
  • Примечание:
    • Значение по умолчанию 255 = 100%.
    • Функция не будет работать, если при подключении не использован вывод PWM.
    • Функция не будет работать, если при создании объекта не указан вывод PWM.
  • Пример:
disp.light(127); // Устанавливаем яркость свечения дисплеев на 50%.

Функция point();

  • Назначение: Установка точек.
  • Синтаксис: point ( ПОЗИЦИЯ , СОСТОЯНИЕ );
  • Параметры:
    • uint8_t ПОЗИЦИЯ - целое число от 1 (крайний левый модуль) до 255.
    • bool СОСТОЯНИЕ - флаг свечения точки: true (включить) или false (выключить).
  • Возвращаемые значения: Нет.
  • Примечание:
    • Если первый параметр ПОЗИЦИЯ представлен не числом, а значением nLED_ALL, то указанное СОСТОЯНИЕ применится к точкам на всех модулях.
    • Функция управляет только точками и не влияет на ранее установленные цифры.
  • Пример:
disp.point(1, true);        // Включить точку первого модуля.
disp.point(2, false);       // Выключить точку второго модуля.
disp.point(nLED_ALL, true); // Включить точки всех модулей.

Функция setLED();

  • Назначение: Установка светодиодов (сегментов) модуля по битам.
  • Синтаксис: setLED ( ПОЗИЦИЯ , СОСТОЯНИЕ );
  • Параметры:
    • uint8_t ПОЗИЦИЯ - целое число от 1 (крайний левый модуль) до 255.
    • uint8_t СОСТОЯНИЕ - целое число состоящее из 8 бит в следующем порядке: hgfedcba.
      Каждый бит состояния соответствует одному сегменту модуля.
      Младший бит состояния - «a» является флагом включения верхнего сегмента.
      Старший бит состояния - «h» является флагом включения сегмента точки.
  • Возвращаемые значения: Нет.
  • Примечание:
    • На картинке указано обозначение сегментов которыми управляют биты.
    • Если первый параметр ПОЗИЦИЯ представлен не числом, а значением nLED_ALL, то указанное СОСТОЯНИЕ применится к сегментам на всех модулях.
  • Пример:
disp.setLED(1, B01100011);        // На 1 модуле включить сегменты «g»«f»«b»«a» (как у символа градуса).
disp.setLED(2, B01011011);        // На 2 модуле включить сегменты «g»«e»«d»«b»«a» (как у символа '2').
disp.setLED(nLED_ALL, B00000110); // На всех модулях включить сегменты «c»«b» (как у символа '1').

Функция hide();

  • Назначение: Скрыть данные.
  • Синтаксис: hide ( [ ПОЗИЦИЯ , РАЗМЕР ,] СОСТОЯНИЕ );
  • Параметры:
    • uint8_t ПОЗИЦИЯ - целое число от 1 (крайний левый модуль) до 255.
    • uint8_t РАЗМЕР - количество модулей, от 1 до 255.
    • bool СОСТОЯНИЕ - флаг указывающий скрыть данные: true (скрыть) или false.
  • Возвращаемые значения: Нет.
  • Примечание:
    • Функция позволяет скрыть/отобразить выведенные ранее данные, не удаляя их.
    • Данную функцию удобно использовать для мигания определёнными разрядами.
    • Если параметры ПОЗИЦИЯ и РАЗМЕР не указаны, то действие функции будет применено на все модули.
  • Пример:
disp.hide(1, 3, true ); // Скрыть     данные 3 модуля, начиная от 1 слева.
disp.hide(6, 2, false); // Отобразить данные 2 модуля, начиная от 6 слева.
disp.hide(      true ); // Скрыть     данные всех модулей.
disp.hide(      false); // Отобразить данные всех модулей.

Функция align();

  • Назначение: Установка выравнивания данных.
  • Синтаксис: align ( КРАЙ [, СИМВОЛ ] );
  • Параметры:
    • uint8_t КРАЙ - может принимать значение: nLED_LEFT или nLED_RIGHT.
    • char СИМВОЛ - представлен одним из символов: 0123456789abcdefghijlnopstu .,*-_
  • Возвращаемые значения: Нет.
  • Примечание:
    • Указанные параметры используются при всех последующих обращениях к функции print().
    • Параметр КРАЙ - определяет по какому краю будут выравниваться выводимые данные.
    • По умолчанию данные выводятся с привязкой к правому краю: nLED_RIGHT.
    • Модули в которые не попали выводимые данные, будут принимать значение СИМВОЛ.
    • Если параметр СИМВОЛ не указан, то будет использоваться символ ' ' (пробел).
    • Если в качестве символа указать '\0', то модули в которые не попали выводимые данные, сохранят свои предыдущие значения (см. пример).
  • Пример:
disp.align(nLED_LEFT, ' ');  // Выравнивание по левому краю, замещающий символ ' ' (пробел).
disp.print(80);              // При использовании 6 модулей, получим: "80    ". Число 80 не попало на модули 3-6 и они получили значение замещающего символа ' ' (пробел).
disp.align(nLED_RIGHT, '0'); // Выравнивание по правому краю, замещающий символ '0'.
disp.print(9);               // При использовании 6 модулей, получим: "000009". Число 9 не попало на модули 1-5 и они получили значение замещающего символа '0'.
disp.align(nLED_LEFT, '\0'); // Выравнивание по левому краю, замещающий символ '\0' (можно заменить цифрой 0 без дроби и кавычек).
disp.print(27);              // При использовании 6 модулей, получим: "270009". Число 27 не попало на модули 3-6 и они сохранили свои предыдущие значения.

Функция print();

  • Назначение: Вывод чисел, символов или текста.
  • Синтаксис: print ( ДАННЫЕ [, ПАРАМЕТР ] );
  • Параметры:
    • ДАННЫЕ - которые требуется вывести на модули:
      • Целое число (как положительное, так и отрицательное).
      • Число с плавающей точкой (как положительное, так и отрицательное).
      • Текст (из следующих символов "0123456789abcdefghijlnopstu .,*-_").
      • Символ (указывается как текст, в двойных кавычках).
    • ПАРАМЕТР - необязательный аргумент:
      • Если выводится целое число, то в качестве параметра допускается указать систему счисления: BIN, OCT, DEC, HEX, в которой требуется вывести число.
        Значение по умолчанию: DEC.
      • Если выводится число с плавающей точкой, то в качестве параметра допускается указать количество выводимых знаков после запятой.
        Значение по умолчанию: 2
  • Возвращаемые значения: Нет.
  • Примечание:
    • Данные выводятся с выравниванием указанным функцией align().
    • Если данные не помещаются на все модули, то они урезаются.
  • Примеры:
disp.print(  12       ); // Вывести целое положительное число.
disp.print(  12 , HEX ); // Вывести целое положительное число в шестнадцатеричной системе счисления.
disp.print( -12       ); // Вывести целое отрицательное число.
disp.print( -12 , OCT ); // Вывести целое отрицательное число в восьмеричной системе счисления.
disp.print( 1.2       ); // Вывести положительное число с плавающей точкой.
disp.print( 1.2 , 1   ); // Вывести положительное число с плавающей точкой с 1 знаком после запятой.
disp.print(-1.2       ); // Вывести отрицательное число с плавающей точкой.
disp.print(-1.2 , 3   ); // Вывести отрицательное число с плавающей точкой с 3 знаками после запятой.
disp.print( "AbCdEfG" ); // Вывести текст.
disp.print( "a"       ); // Вывести символ (указывается в двойных кавычках, как текст).

Объект места на строке из модулей:

При создании некоторых проектов, может возникнуть необходимость вывода различной информации в разные места строки из последовательно соединённых модулей.

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

При создании объекта места указывается имя объекта библиотеки, позиция первого модуля выбранного места и количество модулей входящих в выбранное место:

create_place ОБЪЕКТ_МЕСТА( объект_библиотеки , позиция , размер );

#include <iarduino_nLED.h>         // Подключаем библиотеку iarduino_nLED.
iarduino_nLED disp( 19  ,  6, 7 ); // Создаём объект библиотеки disp, указав что подключено 19 модулей, к выводам 6 (SCL) и 7 (SDI).
create_place  date( disp,  1, 8 ); // Создаём объект места      date, указав что место предоставляет объект disp, место начинается с  1 модуля, размер места 8 модулей.
create_place  time( disp,  9, 6 ); // Создаём объект места      time, указав что место предоставляет объект disp, место начинается с  9 модуля, размер места 6 модулей.
create_place  temp( disp, 15, 5 ); // Создаём объект места      temp, указав что место предоставляет объект disp, место начинается с 15 модуля, размер места 5 модулей.

Каждый созданный объект места обладает тем же набором функций, что и объект библиотеки, но выводит данные не на всю строку последовательно подключённых модулей, а только в указанное при создании объекта место.

disp.clear();               // Чистим весю строку.
date.print( "31.12.2000" ); // Выводим текст с датой.
time.print( "23.59.59"   ); // Выводим текст с временем.
temp.print( "-10*С"      ); // Выводим текст с температурой.
                            // Результат: "31.12.200023.59.59-10*С"

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

Созданные объекты места не отменяют возможность вывода данных через объект библиотеки.

Примеры выравнивания данных:

Выравнивание данных задаётся функцией align(), а вывод осуществляется функцией print().

Последнее заданное функцией align() выравнивание, будет использоваться функцией print(), постоянно, пока оно не будет вновь изменено функцией align().

disp.align( nLED_LEFT, ' ' ); // Выравнивание слева.
disp.print( 123 ); // Вывод целого числа.
На остальные модули выведен символ ' ' (пробел).
disp.align( nLED_RIGHT, '0' ); // Выравнивание справа.
disp.print( 123 ); // Вывод целого числа.
На остальные модули выведен символ '0'.
disp.align( nLED_RIGHT, '_' ); // Выравнивание справа.
disp.print( -123 ); // Вывод отрицательного целого числа.
На остальные модули выведен символ '_'.
disp.align( nLED_RIGHT, ' ' ); // Выравнивание справа.
disp.print( 250 , HEX ); // Вывод числа в 16 системе.
На остальные модули выведен символ ' ' (пробел).
disp.align( nLED_RIGHT, ' ' ); // Выравнивание справа.
disp.print( -1.23 ); // Вывод числа с плавающей точкой.
На остальные модули выведен символ ' ' (пробел).
disp.align( nLED_LEFT, '0' ); // Выравнивание слева.
disp.print( -1.23 , 1 ); // Вывод с одним знаком после запятой.
На остальные модули выведен символ '0'.
disp.align( nLED_RIGHT, 'b' ); // Выравнивание справа.
dispLED.print( "123" ); // Вывод текста
На остальные модули выведен символ 'b'.
disp.align( nLED_RIGHT, ' ' ); // Выравнивание справа.
dispLED.print( "OFF" ); // Вывод текста
На остальные модули выведен символ ' ' (пробел).
disp.align( nLED_RIGHT, ' ' ); // Выравнивание справа.
dispLED.print( "12.3*C" ); // Вывод текста с точкой
На остальные модули выведен символ ' ' (пробел).
disp.align( nLED_LEFT, '\0' ); // Выравнивание слева.
disp.print( 123 ); // Вывод целого числа.
Остальные модули сохранили свои предыдущие данные.

Алгоритм передачи данных:

Модули подключаются по последовательной шине состоящей из двух линий:

  • SCL - (Serial CLock) вход тактирования.
  • SDI - (Serial Data Input) вход данных.
  • Нормальное состояние линии SCL - уровень логического «0».

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

Порядок следования битов в байте: abcdefgh.
Первый бит байта - флаг сегмента «a».
Последний бит байта - флаг сегмента «h».
Порядок следования байтов в пакете: обратный.
Первый байт пакета содержит данные для последнего (правого) модуля.
Последний байт пакета содержит данные для первого (левого) модуля.

Передача данных происходит по одному биту за один такт. Модуль загружает данные с линии SDI в сдвиговый регистр по фронту каждого импульса на линии SCL.

  • Длительность тактовых импульсов (кроме последнего в пакете) должна быть ниже 16,5 мкс.
  • Длительность последнего тактового импульса в пакете должна быть выше 32,6 мкс.
  • Последний тактовый импульс является сигналом для всех подключённых модулей о выгрузке данных из сдвиговых регистров в регистры-защёлки, что приводит к обновлению дисплеев.

Пример пакета состоящего из трёх байтов:

Данный пример демонстрирует отправку изображения "abc" в строку из 3 модулей.

  • Первый байт 10011100 (0x9C) загружается в сдвиговый регистр первого модуля.
  • Второй байт 00111110 (0x3E) загружается в сдвиговый регистр первого модуля,
    а данные находившиеся в первом модуле выгружаются в регистр второго модуля.
  • Третий байт 11101110 (0xEE) загружается в сдвиговый регистр первого модуля,
    так же выгружая предыдущие данные первого модуля во второй, а второго в третий.
  • После загрузки всего пакета:
    • Первый модуль содержит третий байт пакета: 11101110 - включить сегменты abcefg.
    • Второй модуль содержит второй байт пакета: 00111110 - включить сегменты cdefg.
    • Третий модуль содержит первый байт пакета: 10011100 - включить сегменты adef.
  • Последний импульс линии SCL указывает всем модулям обновить состояние их сегментов.

Пример отправки указанного пакета функцией digitalWrite():

uint8_t pinSCL = 6;                                        // Определяем вывод Arduino подключённый к выводу SCL модуля.
uint8_t pinSDI = 7;                                        // Определяем вывод Arduino подключённый к выводу SDI модуля.
byte    valBYTE;                                           // Объявляем  переменную для передачи байта.
                                                           //
void setup(){                                              //
//   Конфигурируем выводы:                                 //
     pinMode(pinSCL, OUTPUT); digitalWrite(pinSCL, 0);     // Конфигурируем вывод SCL и устанавливаем на нём уровень логического «0».
     pinMode(pinSDI, OUTPUT); digitalWrite(pinSDI, 0);     // Конфигурируем вывод SDI и устанавливаем на нём уровень логического «0».
//   Отправляем 1 байт:                                    //
     valBYTE = B10011100;                                  // Определяем значение передаваемого байта (0x9C).
     for(int i=0; i<8; i++){                               // Проходим по всем битам байта от младшего к старшему.
         digitalWrite(pinSDI, bitRead(valBYTE, i) );       // Устанавливаем на линии SDI уровень очередного бита.
         digitalWrite(pinSCL, 1); digitalWrite(pinSCL, 0); // Формируем короткий импульс на линии SCL.
     }                                                     //
//   Отправляем 2 байт:                                    //
     valBYTE = B00111110;                                  // Определяем значение передаваемого байта (0x3E).
     for(int i=0; i<8; i++){                               // Проходим по всем битам байта от младшего к старшему.
         digitalWrite(pinSDI, bitRead(valBYTE, i) );       // Устанавливаем на линии SDI уровень очередного бита.
         digitalWrite(pinSCL, 1); digitalWrite(pinSCL, 0); // Формируем короткий импульс на линии SCL.
     }                                                     //
//   Отправляем 3 байт:                                    //
     valBYTE = B11101110;                                  // Определяем значение передаваемого байта (0xEE).
     for(int i=0; i<7; i++){                               // Проходим по семи битам байта кроме старшего.
         digitalWrite(pinSDI, bitRead(valBYTE, i) );       // Устанавливаем на линии SDI уровень очередного бита.
         digitalWrite(pinSCL, 1); digitalWrite(pinSCL, 0); // Формируем короткий импульс на линии SCL.
     }                                                     //
     digitalWrite(pinSDI, bitRead(valBYTE, 7) );           // Устанавливаем на линии SDI уровень старшего бита.
     digitalWrite(pinSCL, 1);                              // Устанавливаем на линии SCL уровень «1».
     delayMicroseconds(50);                                // Длительность последнего импульса в пакете должна быть выше 32.6 мкс, берём с запасом.
     digitalWrite(pinSCL, 0);                              // Устанавливаем на линии SCL уровень «0».
}                                                          //
                                                           //
void loop(){}                                              //

Функция digitalWrite() в Arduino UNO выполняется за 4 мкс, той же длительность формируются короткие импульсы на линии SCL, что соответствует требованиям t<16,5 мкс.

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями