mirror of
https://github.com/gunner47/GyverLamp.git
synced 2025-08-07 09:00:30 +03:00
Исправлено выключение будильника, если он сработал при выключенной матрице
This commit is contained in:
@@ -11,6 +11,18 @@
|
|||||||
Версия 1.4:
|
Версия 1.4:
|
||||||
- Исправлен баг при смене режимов
|
- Исправлен баг при смене режимов
|
||||||
- Исправлены тормоза в режиме точки доступа
|
- Исправлены тормоза в режиме точки доступа
|
||||||
|
--- 08.07.2019
|
||||||
|
- Исправлены параметры и процесс подключения к WiFi сети (таймаут 7 секунд) и развёртываия WiFi точки доступа (параметры имени/пароля)
|
||||||
|
- Добавлено "#define USE_NTP" - позволяет запретить обращаться в интернет
|
||||||
|
- Добавлено "#define ESP_USE_BUTTON - позволяет собирать лампу без физической кнопки, иначе яркость эффектов самопроизвольно растёт до максимальной
|
||||||
|
- Переработаны параметры IP адресов, STA_STATIC_IP теперь пустой по умолчанию - избавляет от путаницы с IP адресами из неправильных диапазонов
|
||||||
|
- Добавлено "#define GENERAL_DEBUG" - выводит в Serial некоторые отладочные сообщения
|
||||||
|
- Добавлено "#define WIFIMAN_DEBUG (true)" - выводит в Serial отладочные сообщения библиотеки WiFiManager
|
||||||
|
- Добавлена таблица с тест кейсами
|
||||||
|
- Форматирование кода, комментарии
|
||||||
|
--- 11.07.2019
|
||||||
|
- Исправлена ошибка невыключения матрицы после срабатывания будильника, если до будильника матрица была выключенной
|
||||||
|
- Дополнена таблица с тест кейсами
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// Ссылка для менеджера плат:
|
// Ссылка для менеджера плат:
|
||||||
@@ -19,9 +31,9 @@
|
|||||||
|
|
||||||
// ============= НАСТРОЙКИ =============
|
// ============= НАСТРОЙКИ =============
|
||||||
// --- ВРЕМЯ ---------------------------
|
// --- ВРЕМЯ ---------------------------
|
||||||
#define USE_NTP // закомментировать или удалить эту строку, если не нужно, чтобы устройство не лезло в интернет
|
#define USE_NTP // закомментировать или удалить эту строку, если нужно, чтобы устройство не лезло в интернет
|
||||||
#define GMT (3) // часовой пояс (москва 3)
|
#define GMT (3) // часовой пояс (москва 3)
|
||||||
#define NTP_ADDRESS "europe.pool.ntp.org" // сервер времени
|
#define NTP_ADDRESS ("europe.pool.ntp.org") // сервер времени
|
||||||
|
|
||||||
// --- РАССВЕТ -------------------------
|
// --- РАССВЕТ -------------------------
|
||||||
#define DAWN_BRIGHT (200U) // максимальная яркость рассвета (0-255)
|
#define DAWN_BRIGHT (200U) // максимальная яркость рассвета (0-255)
|
||||||
|
@@ -16,16 +16,8 @@ void buttonTick()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (ONflag)
|
ONflag = !ONflag;
|
||||||
{
|
changePower();
|
||||||
ONflag = false;
|
|
||||||
changePower();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ONflag = true;
|
|
||||||
changePower();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -4,7 +4,7 @@ void effectsTick()
|
|||||||
{
|
{
|
||||||
if (!dawnFlag)
|
if (!dawnFlag)
|
||||||
{
|
{
|
||||||
if (ONflag && millis() - effTimer >= ((currentMode < 5 || currentMode > 13) ? modes[currentMode].speed : 50) )
|
if (ONflag && (millis() - effTimer >= ((currentMode < 5 || currentMode > 13) ? modes[currentMode].speed : 50)))
|
||||||
{
|
{
|
||||||
effTimer = millis();
|
effTimer = millis();
|
||||||
switch (currentMode)
|
switch (currentMode)
|
||||||
|
@@ -3,10 +3,10 @@
|
|||||||
// ------------- конфетти --------------
|
// ------------- конфетти --------------
|
||||||
void sparklesRoutine()
|
void sparklesRoutine()
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < modes[0].scale; i++)
|
for (uint8_t i = 0; i < modes[0].scale; i++)
|
||||||
{
|
{
|
||||||
byte x = random(0, WIDTH);
|
uint8_t x = random(0, WIDTH);
|
||||||
byte y = random(0, HEIGHT);
|
uint8_t y = random(0, HEIGHT);
|
||||||
if (getPixColorXY(x, y) == 0)
|
if (getPixColorXY(x, y) == 0)
|
||||||
leds[getPixelNumber(x, y)] = CHSV(random(0, 255), 255, 255);
|
leds[getPixelNumber(x, y)] = CHSV(random(0, 255), 255, 255);
|
||||||
}
|
}
|
||||||
@@ -14,18 +14,18 @@ void sparklesRoutine()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// функция плавного угасания цвета для всех пикселей
|
// функция плавного угасания цвета для всех пикселей
|
||||||
void fader(byte step)
|
void fader(uint8_t step)
|
||||||
{
|
{
|
||||||
for (byte i = 0; i < WIDTH; i++)
|
for (uint8_t i = 0; i < WIDTH; i++)
|
||||||
{
|
{
|
||||||
for (byte j = 0; j < HEIGHT; j++)
|
for (uint8_t j = 0; j < HEIGHT; j++)
|
||||||
{
|
{
|
||||||
fadePixel(i, j, step);
|
fadePixel(i, j, step);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void fadePixel(byte i, byte j, byte step) // новый фейдер
|
void fadePixel(uint8_t i, uint8_t j, uint8_t step) // новый фейдер
|
||||||
{
|
{
|
||||||
int32_t pixelNum = getPixelNumber(i, j);
|
int32_t pixelNum = getPixelNumber(i, j);
|
||||||
if (getPixColor(pixelNum) == 0) return;
|
if (getPixColor(pixelNum) == 0) return;
|
||||||
@@ -180,15 +180,15 @@ void drawFrame(int32_t pcnt)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
byte hue;
|
uint8_t hue;
|
||||||
// ------------- радуга ----------------
|
// ------------- радуга ----------------
|
||||||
void rainbowVertical()
|
void rainbowVertical()
|
||||||
{
|
{
|
||||||
hue += 2;
|
hue += 2;
|
||||||
for (byte j = 0; j < HEIGHT; j++)
|
for (uint8_t j = 0; j < HEIGHT; j++)
|
||||||
{
|
{
|
||||||
CHSV thisColor = CHSV((byte)(hue + j * modes[2].scale), 255, 255);
|
CHSV thisColor = CHSV((uint8_t)(hue + j * modes[2].scale), 255, 255);
|
||||||
for (byte i = 0; i < WIDTH; i++)
|
for (uint8_t i = 0; i < WIDTH; i++)
|
||||||
drawPixelXY(i, j, thisColor);
|
drawPixelXY(i, j, thisColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -196,10 +196,10 @@ void rainbowVertical()
|
|||||||
void rainbowHorizontal()
|
void rainbowHorizontal()
|
||||||
{
|
{
|
||||||
hue += 2;
|
hue += 2;
|
||||||
for (byte i = 0; i < WIDTH; i++)
|
for (uint8_t i = 0; i < WIDTH; i++)
|
||||||
{
|
{
|
||||||
CHSV thisColor = CHSV((byte)(hue + i * modes[3].scale), 255, 255);
|
CHSV thisColor = CHSV((uint8_t)(hue + i * modes[3].scale), 255, 255);
|
||||||
for (byte j = 0; j < HEIGHT; j++)
|
for (uint8_t j = 0; j < HEIGHT; j++)
|
||||||
drawPixelXY(i, j, thisColor); //leds[getPixelNumber(i, j)] = thisColor;
|
drawPixelXY(i, j, thisColor); //leds[getPixelNumber(i, j)] = thisColor;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -227,19 +227,19 @@ void colorRoutine()
|
|||||||
void snowRoutine()
|
void snowRoutine()
|
||||||
{
|
{
|
||||||
// сдвигаем всё вниз
|
// сдвигаем всё вниз
|
||||||
for (byte x = 0; x < WIDTH; x++)
|
for (uint8_t x = 0; x < WIDTH; x++)
|
||||||
{
|
{
|
||||||
for (byte y = 0; y < HEIGHT - 1; y++)
|
for (uint8_t y = 0; y < HEIGHT - 1; y++)
|
||||||
{
|
{
|
||||||
drawPixelXY(x, y, getPixColorXY(x, y + 1));
|
drawPixelXY(x, y, getPixColorXY(x, y + 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (byte x = 0; x < WIDTH; x++)
|
for (uint8_t x = 0; x < WIDTH; x++)
|
||||||
{
|
{
|
||||||
// заполняем случайно верхнюю строку
|
// заполняем случайно верхнюю строку
|
||||||
// а также не даём двум блокам по вертикали вместе быть
|
// а также не даём двум блокам по вертикали вместе быть
|
||||||
if (getPixColorXY(x, HEIGHT - 2) == 0 && (random(0, modes[15].scale) == 0))
|
if (getPixColorXY(x, HEIGHT - 2) == 0 && (random(0, 100 - modes[15].scale) == 0))
|
||||||
drawPixelXY(x, HEIGHT - 1, 0xE0FFFF - 0x101010 * random(0, 4));
|
drawPixelXY(x, HEIGHT - 1, 0xE0FFFF - 0x101010 * random(0, 4));
|
||||||
else
|
else
|
||||||
drawPixelXY(x, HEIGHT - 1, 0x000000);
|
drawPixelXY(x, HEIGHT - 1, 0x000000);
|
||||||
@@ -249,12 +249,12 @@ void snowRoutine()
|
|||||||
// ------------- матрица ---------------
|
// ------------- матрица ---------------
|
||||||
void matrixRoutine()
|
void matrixRoutine()
|
||||||
{
|
{
|
||||||
for (byte x = 0; x < WIDTH; x++)
|
for (uint8_t x = 0; x < WIDTH; x++)
|
||||||
{
|
{
|
||||||
// заполняем случайно верхнюю строку
|
// заполняем случайно верхнюю строку
|
||||||
uint32_t thisColor = getPixColorXY(x, HEIGHT - 1);
|
uint32_t thisColor = getPixColorXY(x, HEIGHT - 1);
|
||||||
if (thisColor == 0)
|
if (thisColor == 0)
|
||||||
drawPixelXY(x, HEIGHT - 1, 0x00FF00 * (random(0, modes[16].scale) == 0));
|
drawPixelXY(x, HEIGHT - 1, 0x00FF00 * (random(0, 100 - modes[16].scale) == 0));
|
||||||
else if (thisColor < 0x002000)
|
else if (thisColor < 0x002000)
|
||||||
drawPixelXY(x, HEIGHT - 1, 0);
|
drawPixelXY(x, HEIGHT - 1, 0);
|
||||||
else
|
else
|
||||||
@@ -262,9 +262,9 @@ void matrixRoutine()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// сдвигаем всё вниз
|
// сдвигаем всё вниз
|
||||||
for (byte x = 0; x < WIDTH; x++)
|
for (uint8_t x = 0; x < WIDTH; x++)
|
||||||
{
|
{
|
||||||
for (byte y = 0; y < HEIGHT - 1; y++)
|
for (uint8_t y = 0; y < HEIGHT - 1; y++)
|
||||||
{
|
{
|
||||||
drawPixelXY(x, y, getPixColorXY(x, y + 1));
|
drawPixelXY(x, y, getPixColorXY(x, y + 1));
|
||||||
}
|
}
|
||||||
@@ -276,7 +276,7 @@ void matrixRoutine()
|
|||||||
int32_t lightersPos[2][LIGHTERS_AM];
|
int32_t lightersPos[2][LIGHTERS_AM];
|
||||||
int8_t lightersSpeed[2][LIGHTERS_AM];
|
int8_t lightersSpeed[2][LIGHTERS_AM];
|
||||||
CHSV lightersColor[LIGHTERS_AM];
|
CHSV lightersColor[LIGHTERS_AM];
|
||||||
byte loopCounter;
|
uint8_t loopCounter;
|
||||||
|
|
||||||
int32_t angle[LIGHTERS_AM];
|
int32_t angle[LIGHTERS_AM];
|
||||||
int32_t speedV[LIGHTERS_AM];
|
int32_t speedV[LIGHTERS_AM];
|
||||||
@@ -288,7 +288,7 @@ void lightersRoutine()
|
|||||||
{
|
{
|
||||||
loadingFlag = false;
|
loadingFlag = false;
|
||||||
randomSeed(millis());
|
randomSeed(millis());
|
||||||
for (byte i = 0; i < LIGHTERS_AM; i++)
|
for (uint8_t i = 0; i < LIGHTERS_AM; i++)
|
||||||
{
|
{
|
||||||
lightersPos[0][i] = random(0, WIDTH * 10);
|
lightersPos[0][i] = random(0, WIDTH * 10);
|
||||||
lightersPos[1][i] = random(0, HEIGHT * 10);
|
lightersPos[1][i] = random(0, HEIGHT * 10);
|
||||||
@@ -299,7 +299,7 @@ void lightersRoutine()
|
|||||||
}
|
}
|
||||||
FastLED.clear();
|
FastLED.clear();
|
||||||
if (++loopCounter > 20) loopCounter = 0;
|
if (++loopCounter > 20) loopCounter = 0;
|
||||||
for (byte i = 0; i < modes[17].scale; i++)
|
for (uint8_t i = 0; i < modes[17].scale; i++)
|
||||||
{
|
{
|
||||||
if (loopCounter == 0) // меняем скорость каждые 255 отрисовок
|
if (loopCounter == 0) // меняем скорость каждые 255 отрисовок
|
||||||
{
|
{
|
||||||
@@ -336,7 +336,7 @@ void lightersRoutine()
|
|||||||
{
|
{
|
||||||
loadingFlag = false;
|
loadingFlag = false;
|
||||||
randomSeed(millis());
|
randomSeed(millis());
|
||||||
for (byte i = 0; i < LIGHTERS_AM; i++)
|
for (uint8_t i = 0; i < LIGHTERS_AM; i++)
|
||||||
{
|
{
|
||||||
lightersPos[0][i] = random(0, WIDTH * 10);
|
lightersPos[0][i] = random(0, WIDTH * 10);
|
||||||
lightersPos[1][i] = random(0, HEIGHT * 10);
|
lightersPos[1][i] = random(0, HEIGHT * 10);
|
||||||
@@ -351,7 +351,7 @@ void lightersRoutine()
|
|||||||
FastLED.clear();
|
FastLED.clear();
|
||||||
if (++loopCounter > 20) loopCounter = 0;
|
if (++loopCounter > 20) loopCounter = 0;
|
||||||
|
|
||||||
for (byte i = 0; i < modes[17].scale; i++)
|
for (uint8_t i = 0; i < modes[17].scale; i++)
|
||||||
{
|
{
|
||||||
if (loopCounter == 0) // меняем скорость каждые 255 отрисовок
|
if (loopCounter == 0) // меняем скорость каждые 255 отрисовок
|
||||||
{
|
{
|
||||||
|
@@ -167,7 +167,7 @@ void lavaNoise()
|
|||||||
void fillNoiseLED()
|
void fillNoiseLED()
|
||||||
{
|
{
|
||||||
uint8_t dataSmoothing = 0;
|
uint8_t dataSmoothing = 0;
|
||||||
if ( speed < 50)
|
if (speed < 50)
|
||||||
{
|
{
|
||||||
dataSmoothing = 200 - (speed * 4);
|
dataSmoothing = 200 - (speed * 4);
|
||||||
}
|
}
|
||||||
|
@@ -45,7 +45,7 @@ void parseUDP()
|
|||||||
Serial.printf("New brightness value: %d\n", inputBuffer.substring(3).toInt());
|
Serial.printf("New brightness value: %d\n", inputBuffer.substring(3).toInt());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
modes[currentMode].brightness = constrain(inputBuffer.substring(3).toInt(), 0, 255);
|
modes[currentMode].brightness = constrain(inputBuffer.substring(3).toInt(), 1, 255);
|
||||||
FastLED.setBrightness(modes[currentMode].brightness);
|
FastLED.setBrightness(modes[currentMode].brightness);
|
||||||
settChanged = true;
|
settChanged = true;
|
||||||
eepromTimer = millis();
|
eepromTimer = millis();
|
||||||
|
@@ -16,7 +16,7 @@ void timeTick()
|
|||||||
thisTime >= (alarm[thisDay].time - dawnOffsets[dawnMode]) && // позже начала
|
thisTime >= (alarm[thisDay].time - dawnOffsets[dawnMode]) && // позже начала
|
||||||
thisTime < (alarm[thisDay].time + DAWN_TIMEOUT)) // раньше конца + минута
|
thisTime < (alarm[thisDay].time + DAWN_TIMEOUT)) // раньше конца + минута
|
||||||
{
|
{
|
||||||
if (!manualOff)
|
if (!manualOff) // будильник не был выключен вручную (из приложения или кнопкой)
|
||||||
{
|
{
|
||||||
// величина рассвета 0-255
|
// величина рассвета 0-255
|
||||||
int32_t dawnPosition = 255 * ((float)(thisTime - (alarm[thisDay].time - dawnOffsets[dawnMode])) / dawnOffsets[dawnMode]);
|
int32_t dawnPosition = 255 * ((float)(thisTime - (alarm[thisDay].time - dawnOffsets[dawnMode])) / dawnOffsets[dawnMode]);
|
||||||
@@ -26,6 +26,7 @@ void timeTick()
|
|||||||
map(dawnPosition, 0, 255, 10, DAWN_BRIGHT));
|
map(dawnPosition, 0, 255, 10, DAWN_BRIGHT));
|
||||||
fill_solid(leds, NUM_LEDS, dawnColor);
|
fill_solid(leds, NUM_LEDS, dawnColor);
|
||||||
FastLED.setBrightness(255);
|
FastLED.setBrightness(255);
|
||||||
|
delay(1);
|
||||||
FastLED.show();
|
FastLED.show();
|
||||||
dawnFlag = true;
|
dawnFlag = true;
|
||||||
}
|
}
|
||||||
@@ -36,7 +37,7 @@ void timeTick()
|
|||||||
{
|
{
|
||||||
dawnFlag = false;
|
dawnFlag = false;
|
||||||
manualOff = false;
|
manualOff = false;
|
||||||
FastLED.setBrightness(modes[currentMode].brightness);
|
changePower(); // выключение матрицы или установка яркости текущего эффекта в засисимости от того, была ли включена лампа до срабатывания будильника
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
Reference in New Issue
Block a user