Исправлено выключение будильника, если он сработал при выключенной матрице

This commit is contained in:
gunner47
2019-07-16 22:54:03 +03:00
parent 70c7fdc82f
commit e1c537c971
8 changed files with 49 additions and 44 deletions

View File

@@ -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)

View File

@@ -16,16 +16,8 @@ void buttonTick()
} }
else else
{ {
if (ONflag) ONflag = !ONflag;
{ changePower();
ONflag = false;
changePower();
}
else
{
ONflag = true;
changePower();
}
} }
} }

View File

@@ -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)

View File

@@ -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 отрисовок
{ {

View File

@@ -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);
} }

View File

@@ -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();

View File

@@ -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.