Для упрощения работы с 4-разрядным 7-сегментным индикатором был создан данный модуль. На плате с одной стороны размещается дисплей, с другой стороны находится чип для работы с дисплеем - TM1637. Модуль имеет 4 вывода - что значительно упрощает работу с дисплеем, избавляя от большого количества проводов, дополнительных радиоэлектронных компонентов, делая легче подключение к контроллеру.
На практике, модуль также работает от напряжения в 3,3 В. Однако, данный режим работы не представлен в документации производителя чипа, поэтому подключение к 3,3 В электронике осуществляется Вами на свой страх и риск!
В примере демонстрируется подключение дисплея к контроллеру, вывод различных надписей, а также чисел от 0 до 1000. Примеры тестировались на контроллере Smart UNO.
Для этого нам понадобится:
Что нужно: | Кол-во, шт |
---|---|
Контроллер | 1 |
Модуль 4 - разрядного индикатора (красный) | 1 |
Провода мама-мама | 4 |
Подключение:
Пример кода:
#include "SevenSegmentTM1637.h" //подключение библиотеки для работы с дисплеем
const byte PIN_CLK = 4; // подключение контакта CLK
const byte PIN_DIO = 5; // подключение контакта DIO
SevenSegmentTM1637 display(PIN_CLK, PIN_DIO); //создание объекта дисплея
void setup() {
display.begin(); // инициализация дисплея
display.setBacklight(100); // установка яркости в 100%
display.print("INIT"); // отображение надписи INIT (инициализация) на дисплее
delay(1000); // задержка в 1 секунду
};
void loop() {
display.print("LOOP"); // отображение надписи LOOP (цикл)
delay(1000); // задержка 1 секунда
display.print("COUNTING SOME DIGITS");// написать "COUNTING SOME DIGITS" - подсчёт нескольких цифр
display.clear(); // очистка дисплея
for (uint8_t i=0; i < 1000; i++) { // цикл от 0 до 1000
display.print(i); // вывод текущего числа на дисплей
delay(100); // задержка в 100 мс
};
display.clear(); // очистить дисплей
display.print("SUCC"); // вывести надпись SUCC (успешно)
display.blink(); // помигать надписью SUCC
delay(1000); // задержка в 1 секунду
display.clear(); // очистить дисплей
display.print("SMARTELEMENTS.RU - OFFICIAL STORE"); // вывести надпись
display.clear(); // очистить дисплей
};
В примере демонстрируется подключение дисплея к контроллеру, вывод различных надписей, а также подключения режима игрового табло и часов. Примеры тестировались на контроллере Smart UNO.
Для этого нам понадобится:
Что нужно: | Кол-во, шт |
---|---|
Контроллер | 1 |
Модуль 4 - разрядного индикатора (красный) | 1 |
Провода папа-мама | 4 |
Подключение:
Пример кода:
#include "SevenSegmentTM1637.h" //подключение библиотеки для работы с дисплеем
#include "SevenSegmentExtended.h" // библиотека для подключения доп функций (например отображение времени)
const byte PIN_CLK = 4; // подключение контакта CLK
const byte PIN_DIO = 5; // подключение контакта DIO
SevenSegmentExtended display(PIN_CLK, PIN_DIO); //создание объекта дисплея
void setup() {
display.begin(); // инициализация дисплея
display.setBacklight(100); // установка яркости в 100%
display.print("INIT"); // отображение надписи INIT (инициализация) на дисплее
delay(1000); // задержка в 1 секунду
};
void loop() {
display.clear(); //очистка дисплея
//вывод очков игры "Семёрочка" из набора Смарт 30
//предположим что у игрока 1 - 1 очко, у игррока 2 после очередной партии - 3 победных очка
//и необходимо на дисплей вывести результат игры
byte player1Score = 1; //количество очков игрока 1
byte player2Score = 3; //количество очков игрока 3
display.print("THE GAME IS OVER, SCORE IS"); //вывод надписи
display.printDualCounter(player1Score, player2Score); // вывот счёта "1:3" на дисплей
display.blink(); //помигать дисплеем
delay(1500); //задержка в полторы секунды
display.clear(); //очистка дисплея
display.print("NOW IS CLOCK TIME"); //вывод надписи
display.clear(); //очистка дисплея
for (byte hours = 0 ; hours < 24; hours++) { // подсчёт часов с 0 до 23
for (byte minutes = 0 ; minutes < 60; minutes++) { // минуты с 0 до 59
display.printTime(hours, minutes, true); // display time
delay(10); // задержка перед увеличением минуты (реально - 60 секунд, но для демонстрации - 10 мс)
};
};
}
В данном примере формируется минипроект - часы с будильником. Часы показывают время на черырёхразрядном индикаторе. У устройства имеется кнопка - которая переводит контроллер в режим сна до следующей минуты, устанавливая на часах будильник на следующую за текущей минуту. Индикацией установки будильника служит появление на индикаторе надписи «ALAR» - от английского alarm (будильник). Для демонстрации того, что устройство находится в режиме сна, на дисплей выводится информация в виде четырёх тире (- - - -). По пробуждению, дисплей снова отображает время.
Библиотеки
Помимо библиотеки для работы с индикатором, понадобятся библиотеки для режимов сна и модуля часов. Их можно загрузить со страниц в Базе Знаний: Режимы сна и энергосбережение и Модуль часов PCF8563
Что нужно | Кол-во, шт |
---|---|
Контроллер Smart UNO | 1 |
Sensor Shield | 1 |
Модуль часов PCF8563 | 1 |
Модуль 4-разрядного индикатора | 1 |
Модуль кнопки | 1 |
Шлейф "мама-мама" х4 | 1 |
Шлейф "мама-мама" х3 | 1 |
Провода мама-мама | 5 |
Схема подключения
Скетч для загрузки
#include "SevenSegmentTM1637.h" //подключение библиотеки для работы с дисплеем
#include "SevenSegmentExtended.h" //подключение расширенных функций дисплея
#include <Wire.h> //библиотека для работы с I2C
#include <Rtc_Pcf8563.h> //библиотека для работы с часами
#include <Sleep_n0m1.h> //подключение библиотеки для режимов сна
const int wakeUpPin = 3; //вывод прерывания
const int button = 6; //вывод подключения кнопки
Rtc_Pcf8563 rtc; //инициализация часов
SevenSegmentExtended display(13, 12); //создание объекта дисплея
Sleep sleep; //объект для ввода контроллера в сон
void setup() {
display.begin(); //инициализация дисплея
display.setBacklight(100); //установка яркости в 100%
display.print("INIT"); //отображение надписи INIT (инициализация) на дисплее
delay(1000); //задержка в 1 секунду
pinMode(button, INPUT); //режим вывода кнопки
}
void loop() {
rtc.getTime(); //получение времени с часов
byte hour = rtc.getHour(); //запись в переменную количество часов
byte minute = rtc.getMinute(); //запись в переменную количество минут
display.printTime(hour, minute, false); //вывод времени
if (digitalRead(button)) { //была нажата кнопка
set_alarm(minute); //установить будильник
display.print("----"); //вывести четыре тире, означающие что контроллер спит
sleep.pwrDownMode(); //установка режима сна PWR_DOWN
//сон будет продолжаться пока на выводе wakeUpPin не поменяется уровень сигнала
//в данном случае с "HIGH" на "LOW"
sleep.sleepPinInterrupt(wakeUpPin, FALLING); //(номер вывода прерывания, состояние прерывания)
//очистка будильника
clr_alarm();
}
}
/* Процедура очищает регистры будильника на часах.
* Требуется для корректной работы модуля часов.
*/
void clr_alarm() {
detachInterrupt(1); //отключить прерывание номер 1 (вывод контроллера - 3)
rtc.clearAlarm(); //очистить будильник
delay(1000); //секундная задержка
}
/* Процедура устанавливает будильник на часах на одну минуту больше.
* Здесь можно устанавливать будильник на любое время методом setAlarm(),
* который принимает четыре параметра:
* - минуты будильника
* - часы будильника
* - день будильника
* - день недели будильника
* Если любое из значений равно 99 - значит берется значение текущего времени.
*/
void set_alarm(const int& minute) {
rtc.setAlarm(minute + 1, 99, 99, 99); //установка будильника на одну минуту
display.clear(); //очистить дисплей
display.print("ALAR"); //вывести надпись ALAR (ALARM)
delay(1000); //подождать секунду
display.clear(); //очистить дисплей
}