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 <Adafruit_NeoPixel.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
// 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
@@ -77,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;
@@ -103,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;
@@ -118,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) {
@@ -179,6 +201,20 @@ uint32_t Wheel(byte pos) {
void setup() {
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"));
}
@@ -192,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);
@@ -222,6 +246,7 @@ void setup() {
} else {
dimmVal = 24;
}
} //setup end
void loop() {
// ###################################################
// WYŚWIETLACZ
@@ -340,11 +365,11 @@ 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
@@ -424,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;
@@ -432,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;
@@ -439,7 +466,7 @@ void loop() {
neoPixelWaterLvlB = neoPixelBlue;
analogWrite(LED_WHT_TANK, 0);
analogWrite(LED_RED_TANK, dimmVal * 8);
// tu set fan
wtrLvlOff = 0;
}
@@ -451,6 +478,12 @@ void loop() {
neoPixelFilter = 1;
}
if ( lux < 0.5 ) {
dimmVal = 0;
nightMode = 1;
} else {
nightMode = 0;
}
//NEOPIXELS