UStawienie anyklikania

Automatyczne yłączenie ledów przy braku oświetlenia
Automatyczne wyłączenie wiatraka gdy brakuje wody
This commit is contained in:
sieja
2025-09-19 21:14:26 +02:00
parent 27d0dd7a68
commit 33d8d9938e

View File

@@ -5,7 +5,7 @@
#include "DHT.h" #include "DHT.h"
#include <Adafruit_NeoPixel.h> #include <Adafruit_NeoPixel.h>
#include <BH1750.h> #include <BH1750.h>
#define Version "0.3.3" #define Version "0.3.4"
@@ -42,7 +42,7 @@ const uint8_t ledMap[LED_COUNT] = { 3, 0, 1, 8, 2, 5, 4, 7, 6 };
#define WTR_LVL 33 //GPIO33 D33 #define WTR_LVL 33 //GPIO33 D33
// SDA D21 // SDA D21
// SCL D22 // SCL D22
#define DIMM_MAX_VALUE 3 // docelowo 4, tylko na testy #define DIMM_MAX_VALUE 4 //
//NEO PIXEL ARDESES: //NEO PIXEL ARDESES:
#define NEOPXL_MULTIPLIER 25 #define NEOPXL_MULTIPLIER 25
@@ -77,8 +77,8 @@ bool turnOnFlag = true;
int8_t resetVal = 0; int8_t resetVal = 0;
int8_t fanSpeedVal = 1; int8_t fanSpeedVal = 1;
int8_t hygrostatVal = 55; int8_t hygrostatVal = 55;
int8_t dimmStep = 1; int8_t dimmStep = 3;
int8_t dimmVal = 1; int8_t dimmVal ;
int8_t waterLvlVal = 0; int8_t waterLvlVal = 0;
int8_t photoVal = 0; int8_t photoVal = 0;
float temp = 0.0; float temp = 0.0;
@@ -103,6 +103,11 @@ int8_t neoPixelWaterLvlR = 1;
int8_t neoPixelWaterLvlG = 1; int8_t neoPixelWaterLvlG = 1;
int8_t neoPixelWaterLvlB = 1; int8_t neoPixelWaterLvlB = 1;
int8_t neoPixelTank = 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;
@@ -118,28 +123,45 @@ void IRAM_ATTR speedButtonFcn() {
if (fanSpeedVal >= 3) { if (fanSpeedVal >= 3) {
fanSpeedVal = 1; fanSpeedVal = 1;
} }
spdInptTimeStamp = millis() - changeSpdDelay;
} }
void IRAM_ATTR hygrostatButtonFcn() { void IRAM_ATTR hygrostatButtonFcn() {
hygrostatVal = hygrostatVal + 5; hygrostatVal = hygrostatVal + 5;
if (hygrostatVal > 65) { if (hygrostatVal > 65) {
hygrostatVal = 45; hygrostatVal = 45;
} }
spdInptTimeStamp = millis() - changeSpdDelay;
} }
void setFanSpeed(uint8_t spdInpt) { void setFanSpeed(uint8_t spdInpt) {
if (spdInpt == 1) { // if (wtrLvlOff == 1) { dokomentować do testów wody
digitalWrite(PIN_SPEED_2, LOW); // spdInpt = 0;
delay(300); // }
digitalWrite(PIN_SPEED_1, HIGH);
} else if (spdInpt == 2) { if (nightMode == 1 && spdInpt == 2 ){
digitalWrite(PIN_SPEED_1, LOW); spdInpt = 1;
delay(300);
digitalWrite(PIN_SPEED_2, HIGH);
} else {
digitalWrite(PIN_SPEED_1, LOW);
delay(300);
digitalWrite(PIN_SPEED_2, LOW);
} }
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) { void rainbowCycle(uint8_t wait) {
@@ -179,6 +201,20 @@ uint32_t Wheel(byte pos) {
void setup() { void setup() {
Serial.begin(9600); 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)) { if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
Serial.println(F("SSD1306 allocation failed")); Serial.println(F("SSD1306 allocation failed"));
} }
@@ -192,18 +228,6 @@ void setup() {
display.println(Version); display.println(Version);
display.display(); 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_DIMM), dimmButtonFcn, FALLING);
attachInterrupt(digitalPinToInterrupt(BTN_SPEED), speedButtonFcn, FALLING); attachInterrupt(digitalPinToInterrupt(BTN_SPEED), speedButtonFcn, FALLING);
attachInterrupt(digitalPinToInterrupt(BTN_HYGRSTT), hygrostatButtonFcn, FALLING); attachInterrupt(digitalPinToInterrupt(BTN_HYGRSTT), hygrostatButtonFcn, FALLING);
@@ -222,6 +246,7 @@ void setup() {
} else { } else {
dimmVal = 24; dimmVal = 24;
} }
} //setup end
void loop() { void loop() {
// ################################################### // ###################################################
// WYŚWIETLACZ // WYŚWIETLACZ
@@ -340,11 +365,11 @@ void loop() {
} else if (dimmStep == 1) { } else if (dimmStep == 1) {
dimmVal = 1; dimmVal = 1;
} else if (dimmStep == 2) { } else if (dimmStep == 2) {
dimmVal = 6; dimmVal = 2;
} else if (dimmStep == 3) { } else if (dimmStep == 3) {
dimmVal = 12; dimmVal = 4;
} else { } else {
dimmVal = 24; dimmVal = 8;
} }
// Ustawianie LED docelowych wartości // Ustawianie LED docelowych wartości
@@ -424,7 +449,7 @@ void loop() {
neoPixelWaterLvlB = 0; neoPixelWaterLvlB = 0;
analogWrite(LED_WHT_TANK, dimmVal * 8); analogWrite(LED_WHT_TANK, dimmVal * 8);
analogWrite(LED_RED_TANK, 0); analogWrite(LED_RED_TANK, 0);
// tu set fan wtrLvlOff = 1;
} }
if (waterLvlVal < 40 && waterLvlVal >= 25) { //a bit of water TANK if (waterLvlVal < 40 && waterLvlVal >= 25) { //a bit of water TANK
neoPixelWaterLvlR = 10; neoPixelWaterLvlR = 10;
@@ -432,6 +457,8 @@ void loop() {
neoPixelWaterLvlB = 0; neoPixelWaterLvlB = 0;
analogWrite(LED_WHT_TANK, 0); analogWrite(LED_WHT_TANK, 0);
analogWrite(LED_RED_TANK, dimmVal * 8); analogWrite(LED_RED_TANK, dimmVal * 8);
wtrLvlOff = 0;
} }
if (waterLvlVal <= 24) { // FULL TANK if (waterLvlVal <= 24) { // FULL TANK
neoPixelWaterLvlR = neoPixelRed; neoPixelWaterLvlR = neoPixelRed;
@@ -439,7 +466,7 @@ void loop() {
neoPixelWaterLvlB = neoPixelBlue; neoPixelWaterLvlB = neoPixelBlue;
analogWrite(LED_WHT_TANK, 0); analogWrite(LED_WHT_TANK, 0);
analogWrite(LED_RED_TANK, dimmVal * 8); analogWrite(LED_RED_TANK, dimmVal * 8);
// tu set fan wtrLvlOff = 0;
} }
@@ -451,6 +478,12 @@ void loop() {
neoPixelFilter = 1; neoPixelFilter = 1;
} }
if ( lux < 0.5 ) {
dimmVal = 0;
nightMode = 1;
} else {
nightMode = 0;
}
//NEOPIXELS //NEOPIXELS