Skip to content
This repository has been archived by the owner on Dec 18, 2024. It is now read-only.

Commit

Permalink
GyverLamp - Версия 1.5.83 эффекта в 1 - Custom
Browse files Browse the repository at this point in the history
- Функция вывода сообщения MSG
- Вывод времени по запросу с кнопки - белым цветом
- Формат вывода времени * ЧЧ:ММ *
  • Loading branch information
andrewjswan committed Dec 4, 2020
1 parent 953cce5 commit faecdd9
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 43 deletions.
22 changes: 12 additions & 10 deletions firmware/GyverLamp/Constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ const uint8_t STA_STATIC_IP[] = {}; // статичес
// SSID WiFi сети и пароль будут запрошены WiFi Manager'ом в режиме WiFi точки доступа, нет способа захардкодить их в прошивке
// --- AP (WiFi точка доступа) ---
#define AP_NAME ("LedLamp") // имя WiFi точки доступа, используется как при запросе SSID и пароля WiFi сети роутера, так и при работе в режиме ESP_MODE = 0
#define AP_PASS ("31415926") // пароль WiFi точки доступа
#define AP_PASS ("12341234") // пароль WiFi точки доступа
const uint8_t AP_STATIC_IP[] = {192, 168, 4, 1}; // статический IP точки доступа (лучше не менять!)

// --- ВРЕМЯ ---------------------------
Expand All @@ -46,12 +46,14 @@ const uint8_t AP_STATIC_IP[] = {192, 168, 4, 1}; // статичес
// например, time=07:25 4 - означает, что время будет установлено на 7 часов 25 минут, четверг
// время установится в момент нажатия кнопки "НАЗАД", секунды будут по нулям. лампа мигнёт голубым цветом при удачной установке
#define USE_NTP // закомментировать или удалить эту строку, если нужно, чтобы устройство не лезло в интернет
#define NTP_ADDRESS ("ru.pool.ntp.org") // сервер времени
#define NTP_ADDRESS ("ua.pool.ntp.org") // сервер времени Украина
//#define NTP_ADDRESS ("ru.pool.ntp.org") // сервер времени
//#define NTP_ADDRESS ("time.windows.com") // запасной
//#define NTP_ADDRESS ("ntp1.colocall.net") // ещё один запасной
//#define NTP_ADDRESS ("ntp3.stratum2.ru") // ещё один запасной

#define NTP_INTERVAL (59 * 60UL * 1000UL) // интервал синхронизации времени (59 минут)
//#define SUMMER_WINTER_TIME // для тех, кому нужен переход на зимнее/летнее время - оставить строку, остальным - закомментировать или удалить
#define SUMMER_WINTER_TIME // для тех, кому нужен переход на зимнее/летнее время - оставить строку, остальным - закомментировать или удалить
#if !defined(SUMMER_WINTER_TIME) // ЕСЛИ НЕТ ПЕРЕХОДА НА ЛЕТНЕЕ ВРЕМЯ (см. строчку выше)
#define LOCAL_OFFSET (3 * 60U) // смещение локального времени относительно универсального координированного времени UTC в минутах
#else // ЕСЛИ ЕСТЬ ПЕРЕХОД НА ЛЕТНЕЕ ВРЕМЯ
Expand All @@ -60,25 +62,25 @@ const uint8_t AP_STATIC_IP[] = {192, 168, 4, 1}; // статичес
#endif

// --- ВЫВОД ВРЕМЕНИ БЕГУЩЕЙ СТРОКОЙ ---
#define PRINT_TIME (0U) // 0U - не выводить время бегущей строкой; 1U - вывод времени каждый час; 2U - каждый час + каждые 30 минут; 3U - каждый час + каждые 15 минут
#define PRINT_TIME (2U) // 0U - не выводить время бегущей строкой; 1U - вывод времени каждый час; 2U - каждый час + каждые 30 минут; 3U - каждый час + каждые 15 минут
// 4U - каждый час + каждые 10 минут; 5U - каждый час + каждые 5 минут; 6U - каждый час + каждую минуту
#define NIGHT_HOURS_START (23 * 60U + 00) // начало действия "ночного времени" (в минутах от начала суток, 23:00), текущее время бегущей строкой будет выводиться с яркостью NIGHT_HOURS_BRIGHTNESS
#define NIGHT_HOURS_START (21 * 60U + 00) // начало действия "ночного времени" (в минутах от начала суток, 21:00), текущее время бегущей строкой будет выводиться с яркостью NIGHT_HOURS_BRIGHTNESS
#define NIGHT_HOURS_STOP ( 7 * 60U + 59) // конец действия "ночного времени" (в минутах от начала суток, 7:59)
#define DAY_HOURS_BRIGHTNESS (255) // яркость для вывода текущего времени бегущей строкой днём; если -1, будет использована яркость текущего эффекта (она известна, даже когда матрица выключена)
#define NIGHT_HOURS_BRIGHTNESS (5) // яркость для вывода текущего времени бегущей строкой ночью; если -1, будет использована яркость текущего эффекта (она известна, даже когда матрица выключена)
// константы DAY_HOURS_BRIGHTNESS и NIGHT_HOURS_BRIGHTNESS используются только, когда матрица выключена, иначе будет использована яркость текущего эффекта

// --- МАТРИЦА -------------------------
#define CURRENT_LIMIT (2000U) // лимит по току в миллиамперах, автоматически управляет яркостью (пожалей свой блок питания!) 0 - выключить лимит
#define CURRENT_LIMIT (1000U) // лимит по току в миллиамперах, автоматически управляет яркостью (пожалей свой блок питания!) 0 - выключить лимит

#define WIDTH (16U) // ширина матрицы
#define HEIGHT (16U) // высота матрицы

#define COLOR_ORDER (GRB) // порядок цветов на ленте. Если цвет отображается некорректно - меняйте. Начать можно с RGB

#define MATRIX_TYPE (0U) // тип матрицы: 0 - зигзаг, 1 - параллельная
#define CONNECTION_ANGLE (0U) // угол подключения: 0 - левый нижний, 1 - левый верхний, 2 - правый верхний, 3 - правый нижний
#define STRIP_DIRECTION (0U) // направление ленты из угла: 0 - вправо, 1 - вверх, 2 - влево, 3 - вниз
#define CONNECTION_ANGLE (1U) // угол подключения: 0 - левый нижний, 1 - левый верхний, 2 - правый верхний, 3 - правый нижний
#define STRIP_DIRECTION (3U) // направление ленты из угла: 0 - вправо, 1 - вверх, 2 - влево, 3 - вниз
// при неправильной настройке матрицы вы получите предупреждение "Wrong matrix parameters! Set to default"
// шпаргалка по настройке матрицы здесь! https://alexgyver.ru/matrix_guide/

Expand Down Expand Up @@ -406,7 +408,7 @@ uint8_t espMode = ESP_MODE; // ESP_MODE може
#define LOCAL_WEEKDAY (dow_t::Sun) // для стран, где нет перехода на зимнее/летнее время это технический параметр, не нужно его изменять
#define LOCAL_MONTH (month_t::Mar) // для стран, где нет перехода на зимнее/летнее время это технический параметр, не нужно его изменять
#define LOCAL_HOUR (1U) // для стран, где нет перехода на зимнее/летнее время это технический параметр, не нужно его изменять
#define LOCAL_TIMEZONE_NAME ("") //* было "MSK" обозначение локального часового пояса; до 5 символов; может быть использовано, если понадобится его вывести после вывода времени
#define LOCAL_TIMEZONE_NAME ("") //* было "MSK" обозначение локального часового пояса; до 5 символов; может быть использовано, если понадобится его вывести после вывода времени
#else
#define SUMMER_HOUR (3U) // час (по зимнему времени!), когда заканчивается зимнее время и начинается летнее; [0..23]
#define SUMMER_WEEK_NUM (week_t::Last) // номер недели в месяце, когда происходит переход на летнее время (возможные варианты: First - первая, Second - вторая, Third - третья, Fourth - четвёртая, Last - последняя)
Expand All @@ -428,7 +430,7 @@ uint8_t espMode = ESP_MODE; // ESP_MODE може

// --- РАССВЕТ -------------------------
#define DAWN_BRIGHT (200U) // максимальная яркость рассвета (0-255)
#define DAWN_TIMEOUT (1U) // сколько рассвет светит после времени будильника, минут
#define DAWN_TIMEOUT (3U) // сколько рассвет светит после времени будильника, минут


//#define MAX_UDP_BUFFER_SIZE (UDP_TX_PACKET_MAX_SIZE + 1)
Expand Down
15 changes: 15 additions & 0 deletions firmware/GyverLamp/parsing.ino
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,7 @@ void processInputBuffer(char *inputBuffer, char *outputBuffer, bool generateOutp
}
#endif
}

else if (!strncmp_P(inputBuffer, PSTR("GBR"), 3)) // выставляем общую яркость для всех эффектов без сохранения в EEPROM, если приложение присылает такую строку
{
memcpy(buff, &inputBuffer[3], strlen(inputBuffer)); // взять подстроку, состоящую последних символов строки inputBuffer, начиная с символа 4
Expand All @@ -354,6 +355,7 @@ void processInputBuffer(char *inputBuffer, char *outputBuffer, bool generateOutp
FastLED.setBrightness(ALLbri);
loadingFlag = true;
}

else if (!strncmp_P(inputBuffer, PSTR("LIST"), 4)) // передача списка эффектов по запросу от приложения (если поддерживается приложением)
{
memcpy(buff, &inputBuffer[4], strlen(inputBuffer)); // взять подстроку, состоящую последних символов строки inputBuffer, начиная с символа 5
Expand Down Expand Up @@ -395,6 +397,7 @@ void processInputBuffer(char *inputBuffer, char *outputBuffer, bool generateOutp
}
}
}

else if (!strncmp_P(inputBuffer, PSTR("TXT"), 3)){ // Принимаем текст для бегущей строки
#if defined(USE_SECRET_COMMANDS) || defined(USE_MANUAL_TIME_SETTING) // вкорячиваем ручную синхранизацию времени пока что сюда. пока нет другой функции в приложении...
if (!strncmp_P(inputBuffer, PSTR("TXT-time="), 9) && (BUFF.length() > 15)){
Expand Down Expand Up @@ -577,21 +580,31 @@ void processInputBuffer(char *inputBuffer, char *outputBuffer, bool generateOutp
str.toCharArray(TextTicker, str.length() + 1);
#endif // defined(USE_SECRET_COMMANDS) || defined(USE_MANUAL_TIME_SETTING)
}

else if (!strncmp_P(inputBuffer, PSTR("MSG"), 3)) {
String str = (BUFF.length() > 4) ? BUFF.substring(4, BUFF.length()) : "";
str.toCharArray(TextTicker, str.length() + 1);
printMessage();
}

else if (!strncmp_P(inputBuffer, PSTR("DRW"), 3)) {
drawPixelXY((int8_t)getValue(BUFF, ';', 1).toInt(), (int8_t)getValue(BUFF, ';', 2).toInt(), DriwingColor);
FastLED.show();
}

else if (!strncmp_P(inputBuffer, PSTR("CLR"), 3)) {
FastLED.clear();
FastLED.show();
}

else if (!strncmp_P(inputBuffer, PSTR("COL"), 3)) {
#ifdef USE_OLD_APP_FROM_KOTEYKA
DriwingColor = CRGB(getValue(BUFF, ';', 1).toInt(), getValue(BUFF, ';', 3).toInt(), getValue(BUFF, ';', 2).toInt());
#else
DriwingColor = CRGB(getValue(BUFF, ';', 1).toInt(), getValue(BUFF, ';', 2).toInt(), getValue(BUFF, ';', 3).toInt());
#endif
}

else if (!strncmp_P(inputBuffer, PSTR("DRAWO"), 5)) { // сокращаем OFF и ON для ускорения регулярного цикла
if (!strncmp_P(inputBuffer, PSTR("DRAWON"), 6))
Painting = 1;
Expand All @@ -600,6 +613,7 @@ void processInputBuffer(char *inputBuffer, char *outputBuffer, bool generateOutp
FastLED.clear();
FastLED.show();
}

#ifndef USE_OLD_APP_FROM_KOTEYKA
else if (!strncmp_P(inputBuffer, PSTR("RESET"), 5)) { // сброс настроек WIFI по запросу от приложения
wifiManager.resetSettings();
Expand Down Expand Up @@ -632,6 +646,7 @@ void processInputBuffer(char *inputBuffer, char *outputBuffer, bool generateOutp
}
}
#endif

else
{
inputBuffer[0] = '\0';
Expand Down
32 changes: 23 additions & 9 deletions firmware/GyverLamp/runningText.ino
Original file line number Diff line number Diff line change
Expand Up @@ -74,47 +74,47 @@ void printTime(uint32_t thisTime, bool onDemand, bool ONflag) // периоди
CRGB letterColor = CRGB::Black;
bool needToPrint = false;

#if (PRINT_TIME >= 1U) // вывод только каждый час (красным цветом)
#if (PRINT_TIME >= 1U) // вывод только каждый час (белым цветом)
if (thisTime % 60U == 0U)
{
needToPrint = true;
letterColor = CRGB::Red;
letterColor = CRGB::White;
}
#endif

#if (PRINT_TIME == 2U) // вывод каждый час (красным цветом) + каждые 30 минут (синим цветом)
#if (PRINT_TIME == 2U) // вывод каждый час (белым цветом) + каждые 30 минут (синим цветом)
if (thisTime % 60U != 0U && thisTime % 30U == 0U)
{
needToPrint = true;
letterColor = CRGB::Blue;
}
#endif

#if (PRINT_TIME == 3U) // вывод каждый час (красным цветом) + каждые 15 минут (синим цветом)
#if (PRINT_TIME == 3U) // вывод каждый час (белым цветом) + каждые 15 минут (синим цветом)
if (thisTime % 60U != 0U && thisTime % 15U == 0U)
{
needToPrint = true;
letterColor = CRGB::Blue;
}
#endif

#if (PRINT_TIME == 4U) // вывод каждый час (красным цветом) + каждые 10 минут (синим цветом)
#if (PRINT_TIME == 4U) // вывод каждый час (белым цветом) + каждые 10 минут (синим цветом)
if (thisTime % 60U != 0U && thisTime % 10U == 0U)
{
needToPrint = true;
letterColor = CRGB::Blue;
}
#endif

#if (PRINT_TIME == 5U) // вывод каждый час (красным цветом) + каждые 5 минут (синим цветом)
#if (PRINT_TIME == 5U) // вывод каждый час (белым цветом) + каждые 5 минут (синим цветом)
if (thisTime % 60U != 0U && thisTime % 5U == 0U)
{
needToPrint = true;
letterColor = CRGB::Blue;
}
#endif

#if (PRINT_TIME == 6U) // вывод каждый час (красным цветом) + каждую минуту (синим цветом)
#if (PRINT_TIME == 6U) // вывод каждый час (белым цветом) + каждую минуту (синим цветом)
if (thisTime % 60U != 0U)
{
needToPrint = true;
Expand All @@ -124,14 +124,14 @@ void printTime(uint32_t thisTime, bool onDemand, bool ONflag) // периоди

if (onDemand)
{
letterColor = CRGB::White;
letterColor = CRGB::White; // вывод по запросу с кнопки (белым цветом)
}

if ((needToPrint && thisTime != lastTimePrinted) || onDemand)
{
lastTimePrinted = thisTime;
char stringTime[10U]; // буффер для выводимого текста, его длина должна быть НЕ МЕНЬШЕ, чем длина текста + 1
sprintf_P(stringTime, PSTR("-> %u:%02u"), (uint8_t)((thisTime - thisTime % 60U) / 60U), (uint8_t)(thisTime % 60U));
sprintf_P(stringTime, PSTR("* %u:%02u *"), (uint8_t)((thisTime - thisTime % 60U) / 60U), (uint8_t)(thisTime % 60U));
loadingFlag = true;
FastLED.setBrightness(getBrightnessForPrintTime(thisTime, ONflag));
delay(1);
Expand All @@ -152,6 +152,20 @@ void printTime(uint32_t thisTime, bool onDemand, bool ONflag) // периоди
#endif
}

void printMessage() // вывести полученное сообщение
{
if (currentMode == EFF_TEXT) // если эффект - вывод строки то уходим
{
return;
}

loadingFlag = true;
FastLED.setBrightness(getBrightnessForPrintTime(thisTime, ONflag));
delay(1);

while (!fillString(TextTicker, CRGB::White, true)) { delay(1); ESP.wdtFeed(); }
loadingFlag = true;
}

uint8_t getBrightnessForPrintTime(uint32_t thisTime, bool ONflag) // определение яркости для вывода времени бегущей строкой в зависимости от ESP_MODE, USE_NTP, успешности синхронизации времени,
// текущего времени суток, настроек дневного/ночного времени и того, включена ли сейчас матрица
Expand Down
Loading

0 comments on commit faecdd9

Please sign in to comment.