From 925fd762397fae2ff0f79fecba6db9b60680adb8 Mon Sep 17 00:00:00 2001 From: sieja Date: Mon, 23 Jun 2025 21:19:07 +0200 Subject: [PATCH] Zabawa z neo pixels --- .../StadlerHomeKitUpgrade.ino | 59 +++++++++++++++++-- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/ESP32/StadlerHomeKitUpgrade/StadlerHomeKitUpgrade.ino b/ESP32/StadlerHomeKitUpgrade/StadlerHomeKitUpgrade.ino index 3662d43..cdcdadc 100644 --- a/ESP32/StadlerHomeKitUpgrade/StadlerHomeKitUpgrade.ino +++ b/ESP32/StadlerHomeKitUpgrade/StadlerHomeKitUpgrade.ino @@ -10,6 +10,9 @@ +#define LED_PIN 5 +#define LED_COUNT 9 +const uint8_t ledMap[LED_COUNT] = {3, 0, 1, 8, 2, 5, 4, 7, 6}; //2DO: //pomiary i dobor rezystorów dla ledów w zbiorniku @@ -124,6 +127,45 @@ void IRAM_ATTR hygrostatButtonFcn() { } +void rainbowCycle(uint8_t wait) { + uint16_t i, j; + for (j = 0; j < 256 * 3; j++) { // mniej cykli niż 5 — szybciej wraca + for (i = 0; i < LED_COUNT; i++) { + uint8_t physIndex = ledMap[i]; // mapowanie pozycji logicznej na fizyczną + pixels.setPixelColor(physIndex, Wheel((i * 256 / LED_COUNT + j) & 255)); + } + pixels.show(); + delay(wait); + } +} +uint32_t Wheel(byte pos) { + pos = 255 - pos; + uint8_t r, g, b; + + if (pos < 85) { + r = 255 - pos * 3; + g = 0; + b = pos * 3; + } else if (pos < 170) { + pos -= 85; + r = 0; + g = pos * 3; + b = 255 - pos * 3; + } else { + pos -= 170; + r = pos * 3; + g = 255 - pos * 3; + b = 0; + } + + // Ogranicz jasność do 30% + r = r * 30 / 100; + g = g * 30 / 100; + b = b * 30 / 100; + + return pixels.Color(r, g, b); +} + void setup() { Serial.begin(9600); if(!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) { @@ -234,8 +276,18 @@ void loop() { // ################################################################# pixels.clear(); - pixels.setPixelColor(ADR_NEOPXL_SPEED_2, pixels.Color(0, 50, 0)); - pixels.setPixelColor(ADR_NEOPXL_SPEED_1, pixels.Color(50, 0, 0)); + // pixels.setPixelColor(ADR_NEOPXL_SPEED_2, pixels.Color(0, 50, 0)); + // pixels.setPixelColor(ADR_NEOPXL_SPEED_1, pixels.Color(50, 0, 0)); + // pixels.setPixelColor(2, pixels.Color(50, 0, 0)); + // pixels.setPixelColor(3, pixels.Color(50, 0, 0)); + // pixels.setPixelColor(4, pixels.Color(50, 0, 0)); + // pixels.setPixelColor(5, pixels.Color(50, 0, 0)); + // pixels.setPixelColor(6, pixels.Color(50, 0, 0)); + // pixels.setPixelColor(7, pixels.Color(50, 0, 0)); + // pixels.setPixelColor(8, pixels.Color(50, 0, 0)); + + + rainbowCycle(10); // im mniejsza liczba, tym szybsza animacja // pixels.setPixelColor(ADR_NEOPXL_SPEED_1, pixels.Color(neoPixelRed*dimmVal*neoPixelSwitch*neoPixelSpeed_1, neoPixelGreen*dimmVal*neoPixelSwitch*neoPixelSpeed_1, neoPixelBlue*dimmVal*neoPixelSwitch*neoPixelSpeed_1)); @@ -249,8 +301,7 @@ void loop() { // pixels.setPixelColor(ADR_NEOPXL_WATERLVL, pixels.Color(neoPixelRed*dimmVal*neoPixelSwitch*neoPixelWaterLvl, neoPixelGreen*dimmVal*neoPixelSwitch*neoPixelWaterLvl, neoPixelBlue*dimmVal*neoPixelSwitch*neoPixelWaterLvl)); // pixels.setPixelColor(ADR_NEOPXL_TANK, pixels.Color(neoPixelRed*dimmVal*neoPixelSwitch*neoPixelTank, neoPixelGreen*dimmVal*neoPixelSwitch*neoPixelTank, neoPixelBlue*dimmVal*neoPixelSwitch*neoPixelTank)); - - pixels.show(); + // pixels.show(); if (digitalRead(BTN_RST) == HIGH) {