Compare commits

...

3 Commits

Author SHA1 Message Date
sieja
33d8d9938e UStawienie anyklikania
Automatyczne yłączenie ledów przy braku oświetlenia
Automatyczne wyłączenie wiatraka gdy brakuje wody
2025-09-19 21:14:26 +02:00
sieja
27d0dd7a68 Merge branch 'master' of https://gitea.kaczor.it/sieja/Arduino 2025-09-19 18:47:04 +02:00
sieja
5fd8c3be40 Rollback homekita 2025-09-19 18:46:31 +02:00

View File

@@ -5,10 +5,7 @@
#include "DHT.h"
#include <Adafruit_NeoPixel.h>
#include <BH1750.h>
#include "HomeSpan.h"
#include "DEV_LED.h"
#define Version "0.3.3"
#define Version "0.3.4"
@@ -45,7 +42,7 @@ const uint8_t ledMap[LED_COUNT] = { 3, 0, 1, 8, 2, 5, 4, 7, 6 };
#define WTR_LVL 33 //GPIO33 D33
// SDA D21
// SCL D22
#define DIMM_MAX_VALUE 3 // docelowo 4, tylko na testy
#define DIMM_MAX_VALUE 4 //
//NEO PIXEL ARDESES:
#define NEOPXL_MULTIPLIER 25
@@ -80,8 +77,8 @@ bool turnOnFlag = true;
int8_t resetVal = 0;
int8_t fanSpeedVal = 1;
int8_t hygrostatVal = 55;
int8_t dimmStep = 1;
int8_t dimmVal = 1;
int8_t dimmStep = 3;
int8_t dimmVal ;
int8_t waterLvlVal = 0;
int8_t photoVal = 0;
float temp = 0.0;
@@ -106,6 +103,11 @@ int8_t neoPixelWaterLvlR = 1;
int8_t neoPixelWaterLvlG = 1;
int8_t neoPixelWaterLvlB = 1;
int8_t neoPixelTank = 1;
uint8_t LastSpdInpt = 0;
unsigned long spdInptTimeStamp = 0;
int changeSpdDelay = 30000; //interwał zmiany predkości - nie mniej niż wartość milisekund
int8_t wtrLvlOff = 0;
int8_t nightMode = 0;
@@ -121,28 +123,45 @@ void IRAM_ATTR speedButtonFcn() {
if (fanSpeedVal >= 3) {
fanSpeedVal = 1;
}
spdInptTimeStamp = millis() - changeSpdDelay;
}
void IRAM_ATTR hygrostatButtonFcn() {
hygrostatVal = hygrostatVal + 5;
if (hygrostatVal > 65) {
hygrostatVal = 45;
}
spdInptTimeStamp = millis() - changeSpdDelay;
}
void setFanSpeed(uint8_t spdInpt) {
if (spdInpt == 1) {
digitalWrite(PIN_SPEED_2, LOW);
delay(300);
digitalWrite(PIN_SPEED_1, HIGH);
} else if (spdInpt == 2) {
digitalWrite(PIN_SPEED_1, LOW);
delay(300);
digitalWrite(PIN_SPEED_2, HIGH);
} else {
digitalWrite(PIN_SPEED_1, LOW);
delay(300);
digitalWrite(PIN_SPEED_2, LOW);
// if (wtrLvlOff == 1) { dokomentować do testów wody
// spdInpt = 0;
// }
if (nightMode == 1 && spdInpt == 2 ){
spdInpt = 1;
}
if ( millis() > (spdInptTimeStamp + changeSpdDelay)) {
if (LastSpdInpt != spdInpt) {
if (spdInpt == 1) {
digitalWrite(PIN_SPEED_2, LOW);
digitalWrite(PIN_SPEED_1, HIGH);
LastSpdInpt = spdInpt;
spdInptTimeStamp = millis();
} else if (spdInpt == 2) {
digitalWrite(PIN_SPEED_1, LOW);
digitalWrite(PIN_SPEED_2, HIGH);
LastSpdInpt = spdInpt;
spdInptTimeStamp = millis();
} else {
digitalWrite(PIN_SPEED_1, LOW);
digitalWrite(PIN_SPEED_2, LOW);
LastSpdInpt = spdInpt;
spdInptTimeStamp = millis();
}
}
}
}
void rainbowCycle(uint8_t wait) {
@@ -181,7 +200,21 @@ uint32_t Wheel(byte pos) {
}
void setup() {
Serial.begin(115200);
Serial.begin(9600);
pinMode(BTN_RST, INPUT);
pinMode(BTN_DIMM, INPUT);
pinMode(BTN_SPEED, INPUT);
pinMode(BTN_HYGRSTT, INPUT);
pinMode(PIN_SPEED_1, OUTPUT);
pinMode(PIN_SPEED_2, OUTPUT);
digitalWrite(PIN_SPEED_1, LOW);
digitalWrite(PIN_SPEED_2, LOW);
pinMode(LED_RED_TANK, OUTPUT);
pinMode(LED_WHT_TANK, OUTPUT);
pinMode(IN_PHOTOTRA, INPUT_PULLDOWN);
pinMode(WTR_LVL, INPUT);
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed"));
}
@@ -195,18 +228,6 @@ void setup() {
display.println(Version);
display.display();
// delay(500);
pinMode(BTN_RST, INPUT);
pinMode(BTN_DIMM, INPUT);
pinMode(BTN_SPEED, INPUT);
pinMode(BTN_HYGRSTT, INPUT);
pinMode(PIN_SPEED_1, OUTPUT);
pinMode(PIN_SPEED_2, OUTPUT);
pinMode(LED_RED_TANK, OUTPUT);
pinMode(LED_WHT_TANK, OUTPUT);
pinMode(IN_PHOTOTRA, INPUT_PULLDOWN);
pinMode(WTR_LVL, INPUT);
attachInterrupt(digitalPinToInterrupt(BTN_DIMM), dimmButtonFcn, FALLING);
attachInterrupt(digitalPinToInterrupt(BTN_SPEED), speedButtonFcn, FALLING);
attachInterrupt(digitalPinToInterrupt(BTN_HYGRSTT), hygrostatButtonFcn, FALLING);
@@ -225,31 +246,8 @@ void setup() {
} else {
dimmVal = 24;
}
// ##### HOME SPAN
homeSpan.setPairingCode("11122333");
homeSpan.setQRID("111-22-333");
// konfiguracja WIFI przez port szerefowy "W<returm"
// 1.Płytka ESP32 Dev Module
// 2 Partycja: Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS)
// 3. konfiguracja WIFI przez port szerefowy komenda "W", U - unpair
homeSpan.begin(Category::Bridges,"HomeSpan Bridge");
new SpanAccessory();
new Service::AccessoryInformation();
new Characteristic::Identify();
new SpanAccessory();
new Service::AccessoryInformation();
new Characteristic::Identify();
new Characteristic::Name("RGB LED");
new DEV_RgbLED();
// ##### HOME SPAN END
} //setup end
void loop() {
neoPixelRed = int(RedHomeKit/10);
neoPixelGreen = int(GreenHomeKit/10);
neoPixelBlue = int(BlueHomeKit/10);
// ###################################################
// WYŚWIETLACZ
display.clearDisplay();
@@ -367,14 +365,14 @@ void loop() {
} else if (dimmStep == 1) {
dimmVal = 1;
} else if (dimmStep == 2) {
dimmVal = 6;
dimmVal = 2;
} else if (dimmStep == 3) {
dimmVal = 12;
dimmVal = 4;
} else {
dimmVal = 24;
dimmVal = 8;
}
// Ustawianie LED docelowych wartości
// Ustawianie LED docelowych wartości
if (hygrostatVal >= 65) {
neoPixelLvl_1 = 1;
neoPixelLvl_2 = 1;
@@ -420,21 +418,21 @@ void loop() {
neoPixelLvl_5 = 1;
}
// Ustawianie LED osiągniętych wartości
if (hum >= 65 && hygrostatVal >= 65 ) {
// Ustawianie LED osiągniętych wartości
if (hum >= 65 && hygrostatVal >= 65) {
neoPixelLvl_5 = 8;
}
if (hum >= 60 && hygrostatVal >= 60) {
neoPixelLvl_4 = 8;
neoPixelLvl_4 = 8;
}
if (hum >= 55 && hygrostatVal >= 55) {
neoPixelLvl_3 = 8;
neoPixelLvl_3 = 8;
}
if (hum >= 50 && hygrostatVal >= 50) {
neoPixelLvl_2 = 8;
if (hum >= 50 && hygrostatVal >= 50) {
neoPixelLvl_2 = 8;
}
if (hum >= 45 && hygrostatVal >= 45) {
neoPixelLvl_1 = 8;
neoPixelLvl_1 = 8;
}
// wartości zależne od sposobu zasilania PC/Powerbank/Ładowarka
@@ -451,7 +449,7 @@ void loop() {
neoPixelWaterLvlB = 0;
analogWrite(LED_WHT_TANK, dimmVal * 8);
analogWrite(LED_RED_TANK, 0);
// tu set fan
wtrLvlOff = 1;
}
if (waterLvlVal < 40 && waterLvlVal >= 25) { //a bit of water TANK
neoPixelWaterLvlR = 10;
@@ -459,6 +457,8 @@ void loop() {
neoPixelWaterLvlB = 0;
analogWrite(LED_WHT_TANK, 0);
analogWrite(LED_RED_TANK, dimmVal * 8);
wtrLvlOff = 0;
}
if (waterLvlVal <= 24) { // FULL TANK
neoPixelWaterLvlR = neoPixelRed;
@@ -466,7 +466,7 @@ void loop() {
neoPixelWaterLvlB = neoPixelBlue;
analogWrite(LED_WHT_TANK, 0);
analogWrite(LED_RED_TANK, dimmVal * 8);
// tu set fan
wtrLvlOff = 0;
}
@@ -478,6 +478,13 @@ void loop() {
neoPixelFilter = 1;
}
if ( lux < 0.5 ) {
dimmVal = 0;
nightMode = 1;
} else {
nightMode = 0;
}
//NEOPIXELS
// #################################################################
@@ -487,28 +494,13 @@ void loop() {
pixels.setPixelColor(ADR_NEOPXL_SPEED_1, pixels.Color(int((neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelSpeed_1) / NON_ACTIVE_LED_DIVIDER), int((neoPixelRed * dimmVal * neoPixelSwitch * neoPixelSpeed_1) / NON_ACTIVE_LED_DIVIDER), int((neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelSpeed_1) / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_SPEED_2, pixels.Color(int((neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelSpeed_2) / NON_ACTIVE_LED_DIVIDER), int((neoPixelRed * dimmVal * neoPixelSwitch * neoPixelSpeed_2) / NON_ACTIVE_LED_DIVIDER), int((neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelSpeed_2) / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_FILTER, pixels.Color(neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelFilter, neoPixelRed * dimmVal * neoPixelSwitch * neoPixelFilter, neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelFilter));
pixels.setPixelColor(ADR_NEOPXL_L1, pixels.Color(int(neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelLvl_1/ NON_ACTIVE_LED_DIVIDER), int(neoPixelRed * dimmVal * neoPixelSwitch * neoPixelLvl_1/ NON_ACTIVE_LED_DIVIDER), int(neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelLvl_1 / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_L2, pixels.Color(int(neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelLvl_2/ NON_ACTIVE_LED_DIVIDER), int(neoPixelRed * dimmVal * neoPixelSwitch * neoPixelLvl_2/ NON_ACTIVE_LED_DIVIDER), int(neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelLvl_2 / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_L3, pixels.Color(int(neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelLvl_3/ NON_ACTIVE_LED_DIVIDER), int(neoPixelRed * dimmVal * neoPixelSwitch * neoPixelLvl_3/ NON_ACTIVE_LED_DIVIDER), int(neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelLvl_3 / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_L4, pixels.Color(int(neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelLvl_4/ NON_ACTIVE_LED_DIVIDER), int(neoPixelRed * dimmVal * neoPixelSwitch * neoPixelLvl_4/ NON_ACTIVE_LED_DIVIDER), int(neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelLvl_4 / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_L5, pixels.Color(int(neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelLvl_5/ NON_ACTIVE_LED_DIVIDER), int(neoPixelRed * dimmVal * neoPixelSwitch * neoPixelLvl_5/ NON_ACTIVE_LED_DIVIDER), int(neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelLvl_5 / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_L1, pixels.Color(int(neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelLvl_1 / NON_ACTIVE_LED_DIVIDER), int(neoPixelRed * dimmVal * neoPixelSwitch * neoPixelLvl_1 / NON_ACTIVE_LED_DIVIDER), int(neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelLvl_1 / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_L2, pixels.Color(int(neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelLvl_2 / NON_ACTIVE_LED_DIVIDER), int(neoPixelRed * dimmVal * neoPixelSwitch * neoPixelLvl_2 / NON_ACTIVE_LED_DIVIDER), int(neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelLvl_2 / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_L3, pixels.Color(int(neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelLvl_3 / NON_ACTIVE_LED_DIVIDER), int(neoPixelRed * dimmVal * neoPixelSwitch * neoPixelLvl_3 / NON_ACTIVE_LED_DIVIDER), int(neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelLvl_3 / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_L4, pixels.Color(int(neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelLvl_4 / NON_ACTIVE_LED_DIVIDER), int(neoPixelRed * dimmVal * neoPixelSwitch * neoPixelLvl_4 / NON_ACTIVE_LED_DIVIDER), int(neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelLvl_4 / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_L5, pixels.Color(int(neoPixelGreen * dimmVal * neoPixelSwitch * neoPixelLvl_5 / NON_ACTIVE_LED_DIVIDER), int(neoPixelRed * dimmVal * neoPixelSwitch * neoPixelLvl_5 / NON_ACTIVE_LED_DIVIDER), int(neoPixelBlue * dimmVal * neoPixelSwitch * neoPixelLvl_5 / NON_ACTIVE_LED_DIVIDER)));
pixels.setPixelColor(ADR_NEOPXL_WATERLVL, pixels.Color(dimmVal * neoPixelSwitch * neoPixelWaterLvlG, dimmVal * neoPixelSwitch * neoPixelWaterLvlR, dimmVal * neoPixelSwitch * neoPixelWaterLvlB));
// pixels.setPixelColor(ADR_NEOPXL_TANK, pixels.Color(neoPixelGreen*dimmVal*neoPixelSwitch*neoPixelTank, neoPixelRed*dimmVal*neoPixelSwitch*neoPixelTank, neoPixelBlue*dimmVal*neoPixelSwitch*neoPixelTank));
pixels.show();
// rainbowCycle(10); // im mniejsza liczba, tym szybsza animacja
homeSpan.poll();
Serial.println("---------------------------");
Serial.print("R: ");
Serial.println(RedHomeKit);
Serial.print("G: ");
Serial.println(GreenHomeKit);
Serial.print("B: ");
Serial.println(BlueHomeKit);
Serial.print("turnOnFlag: ");
Serial.println(turnOnFlag);
delay(500);
}