Początek menu zmiany interwału rejestrowania

This commit is contained in:
Kamil Siejka
2025-06-19 09:37:31 +02:00
parent 536b203cb7
commit 90d98bf848

View File

@@ -1,3 +1,4 @@
//Płytka: "FireBeetle-ESP32"
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
@@ -9,7 +10,7 @@
#include "SD.h"
#include "SPI.h"
#define Version "0.46"
#define Version "0.47"
#define WIRE Wire
#define DHTTYPE DHT22
#define DHTPIN 4 //GPIO04 D4
@@ -34,7 +35,7 @@
//MISO //GPIO19 D19
//SCK //GPIO18 D18
const float voltageDividerFactor = 1.51;//1.56;
const float voltageDividerFactor = 1.51; //1.56;
const float adcMaxVoltage = 3.3;
const int adcResolution = 4095;
@@ -80,7 +81,9 @@ int dayss;
int months;
int years;
int intervalTempWrite = 1;
//##########################################################################################################################
int intervalTempIdx = 3;
int intervalTempWrite = 0;
int minsToSet = -1;
int hoursToSet = -1;
@@ -109,7 +112,7 @@ const unsigned long interval = 1000;
unsigned long currentMillis = millis();
String formatNumber(float number, int decimalPlaces = 1 ) {
String formatNumber(float number, int decimalPlaces = 1) {
String str = String(number, decimalPlaces);
str.replace('.', ',');
if (number < 10) {
@@ -134,9 +137,9 @@ float voltageToPercentage(float voltage) {
// Reprezentatywne punkty (wolt, procent)
const int nPoints = 9;
// Napięcia uporządkowane malejąco
float vPoints[nPoints] = {4.06, 4.00, 3.95, 3.90, 3.85, 3.80, 3.70, 3.45, 2.75};
float vPoints[nPoints] = { 4.06, 4.00, 3.95, 3.90, 3.85, 3.80, 3.70, 3.45, 2.75 };
// Odpowiednie poziomy naładowania
float pPoints[nPoints] = {100, 95, 90, 80, 70, 60, 50, 10, 0};
float pPoints[nPoints] = { 100, 95, 90, 80, 70, 60, 50, 10, 0 };
if (voltage >= vPoints[0])
return pPoints[0];
if (voltage <= vPoints[nPoints - 1])
@@ -215,7 +218,8 @@ void setup() {
if (!rtc.begin()) {
Serial.println("Nie znaleziono DS3231 RTC!");
while (1); // Zatrzymaj program, jeśli RTC nie jest dostępny
while (1)
; // Zatrzymaj program, jeśli RTC nie jest dostępny
}
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Address 0x3C for 128x32
display.setTextSize(1);
@@ -226,10 +230,21 @@ void setup() {
display.setCursor(60, 0);
display.println(Version);
display.setCursor(0, 8);
if (intervalTempIdx = 1) {
intervalTempWrite = 1;
} else if (intervalTempIdx = 2) {
intervalTempWrite = 5;
} else if (intervalTempIdx = 3) {
intervalTempWrite = 15;
} else if (intervalTempIdx = 4) {
intervalTempWrite = 60;
} else {
intervalTempWrite = 360;
}
display.println("Interval:");
display.setCursor(60, 8);
display.setCursor(80, 8);
display.println(intervalTempWrite);
display.setCursor(70, 8);
display.setCursor(90, 8);
display.println("min");
display.setCursor(0, 16);
@@ -239,7 +254,7 @@ void setup() {
display.setCursor(0, 24);
display.println("Battery: ");
display.setCursor(55, 24);
display.println(int(floor(float(battLifeMins)/60)));
display.println(int(floor(float(battLifeMins) / 60)));
display.setCursor(70, 24);
display.println("h");
display.display();
@@ -248,9 +263,9 @@ void setup() {
dhtL.begin();
dhtM.begin();
dhtH.begin();
pinMode(BTN_UP, INPUT_PULLDOWN );
pinMode(BTN_ENTER, INPUT_PULLDOWN );
pinMode(BTN_DOWN, INPUT_PULLDOWN );
pinMode(BTN_UP, INPUT_PULLDOWN);
pinMode(BTN_ENTER, INPUT_PULLDOWN);
pinMode(BTN_DOWN, INPUT_PULLDOWN);
rtc.now();
DateTime now = rtc.now();
years = now.year();
@@ -261,15 +276,15 @@ void setup() {
secs = now.second();
display.clearDisplay();
display.setCursor(0,0);
display.setCursor(0, 0);
if (!SD.begin(SD_CS)) {
display.println("Blad inicjaliz SD!");
display.display();
delay(1000);
}else {
} else {
Serial.println("Karta SD wykryta!");
}
display.setCursor(0,16);
display.setCursor(0, 16);
if (SD.exists("/TempHumLog.txt")) {
@@ -277,7 +292,6 @@ void setup() {
File file = SD.open("/TempHumLog.txt", FILE_APPEND);
file.println("Data; Godzina; Temp; Humi; Feel,TempH,HumH, TempM, HumM, TempL, HumL");
file.close();
}
sprintf(dateString, "%02d/%02d/%4d %02d:%02d:%02d", now.day(), now.month(), now.year(), now.hour(), now.minute(), now.second());
if (SD.exists("/GeneralLog.txt")) {
@@ -303,44 +317,50 @@ void setup() {
adcVoltValue = analogRead(VOLT_IN); // Odczyt wartości ADC z GPIO36
measuredVoltage = (adcVoltValue * adcMaxVoltage) / adcResolution;
batteryVoltage = (measuredVoltage * voltageDividerFactor)+0.1;
batteryVoltage = (measuredVoltage * voltageDividerFactor) + 0.1;
currentBatteryVoltage = batteryVoltage;
quickBatteryVoltage = batteryVoltage;
quickBatteryVoltage2 = batteryVoltage;
quickBatteryVoltage3 = batteryVoltage;
quickBatteryVoltage4 = batteryVoltage;
tempH = (dhtH.readTemperature()-0.16);
tempH = (dhtH.readTemperature() - 0.16);
lastTempH = tempH;
tempM = (dhtM.readTemperature()+0.08);
lastTempM = tempM ;
tempL = (dhtL.readTemperature()+0.0);
tempM = (dhtM.readTemperature() + 0.08);
lastTempM = tempM;
tempL = (dhtL.readTemperature() + 0.0);
lastTempL = tempL;
tempHCalc = ( tempH + lastTempH )/2;
tempMCalc = ( tempM + lastTempM )/2;
tempLCalc = ( tempL + lastTempL )/2;
humHCalc = ( humH + lastHumH )/2;
humMCalc = ( humM + lastHumM )/2;
humLCalc = ( humL + lastHumL )/2;
tempHCalc = (tempH + lastTempH) / 2;
tempMCalc = (tempM + lastTempM) / 2;
tempLCalc = (tempL + lastTempL) / 2;
humHCalc = (humH + lastHumH) / 2;
humMCalc = (humM + lastHumM) / 2;
humLCalc = (humL + lastHumL) / 2;
if (isnan(tempH)) {
lastTempH = 0.0;
tempH = lastTempH; }
tempH = lastTempH;
}
if (isnan(tempM)) {
lastTempM = 0.0;
tempM = lastTempM;}
tempM = lastTempM;
}
if (isnan(tempL)) {
lastTempL = 0.0;
tempL = lastTempL;}
tempL = lastTempL;
}
if (isnan(humH)) {
lastHumH = 0.0;
humH = lastHumH;}
humH = lastHumH;
}
if (isnan(humM)) {
lastHumM = 0.0;
humM = lastHumM;}
humM = lastHumM;
}
if (isnan(humL)) {
lastHumL = 0.0;
humL = lastHumL;}
humL = lastHumL;
}
//setup END
//######################
}
@@ -348,30 +368,41 @@ void setup() {
void loop() {
currentMillis = millis();
display.clearDisplay();
////DIAGNOSTIC menu nr diag
// display.setCursor(75, 16);
// display.println(menuL0);
// display.setCursor(90, 16);
// display.println(menuL1);
// display.setCursor(105, 16);
// display.println(menuL2);
////DIAGNOSTIC menu nr diag
// display.setCursor(75, 16);
// display.println(menuL0);
// display.setCursor(90, 16);
// display.println(menuL1);
// display.setCursor(105, 16);
// display.println(menuL2);
temp = dht.readTemperature();
tempH = (dhtH.readTemperature()-0.16); //kalibracja
if (isnan(tempH)) { tempH = lastTempH;}
tempM = (dhtM.readTemperature()+0.08); //kalibracja
if (isnan(tempM)) { tempM = lastTempM;}
tempL = (dhtL.readTemperature()+0.0);
if (isnan(tempL)) { tempL = lastTempL;}
tempH = (dhtH.readTemperature() - 0.16); //kalibracja
if (isnan(tempH)) { tempH = lastTempH; }
tempM = (dhtM.readTemperature() + 0.08); //kalibracja
if (isnan(tempM)) { tempM = lastTempM; }
tempL = (dhtL.readTemperature() + 0.0);
if (isnan(tempL)) { tempL = lastTempL; }
hum = dht.readHumidity();
humH = (dhtH.readHumidity()+0.0);
if (isnan(humH)) { humH = lastHumH;}
humM = (dhtM.readHumidity()-3.2); //kalibracja
if (isnan(humM)) { humM = lastHumM;}
humL = (dhtL.readHumidity()+1.7); //kalibracja
if (isnan(humL)) { humL = lastHumL;}
humH = (dhtH.readHumidity() + 0.0);
if (isnan(humH)) { humH = lastHumH; }
humM = (dhtM.readHumidity() - 3.2); //kalibracja
if (isnan(humM)) { humM = lastHumM; }
humL = (dhtL.readHumidity() + 1.7); //kalibracja
if (isnan(humL)) { humL = lastHumL; }
//##########################################################################################################################
if (intervalTempIdx = 1) {
intervalTempWrite = 1;
} else if (intervalTempIdx = 2) {
intervalTempWrite = 5;
} else if (intervalTempIdx = 3) {
intervalTempWrite = 15;
} else if (intervalTempIdx = 4) {
intervalTempWrite = 60;
} else {
intervalTempWrite = 360;
}
// Compute heat index in Celsius (isFahreheit = false)
heat_idx = dht.computeHeatIndex(temp, hum, false);
@@ -388,7 +419,7 @@ void loop() {
if (menuL0 == 10 ) {
if (menuL0 == 10) {
// ############# MENU TEMP
display.setCursor(0, 0);
@@ -407,14 +438,14 @@ void loop() {
display.println("Temperatura:");
display.setCursor(85, 16);
display.println(temp);
display.setCursor(120,16);
display.setCursor(120, 16);
display.println("C");
display.setCursor(0, 24);
display.println("Odczuwalna:");
display.setCursor(85, 24);
display.println(heat_idx);
display.setCursor(120,24);
display.setCursor(120, 24);
display.println("C");
}
@@ -428,7 +459,7 @@ void loop() {
if (menuL0 == 9 ) {
if (menuL0 == 9) {
if (digitalRead(BTN_ENTER) == HIGH and menuL1 == 10) {
menuL1 = 9;
}
@@ -438,22 +469,52 @@ void loop() {
if (menuL1 == 10) {
display.setCursor(0, 8);
display.print("Enter edycja czasu");
display.setCursor(0, 16);
display.print("Intwerwal: ");
//##########################################################################################################################
display.print(intervalTempIdx);
if (intervalTempWrite >= 60) {
display.setCursor(60, 16);
display.print((intervalTempIdx / 60));
display.setCursor(80, 16);
display.print("godz");
} else {
display.setCursor(60, 16);
display.print((intervalTempIdx));
display.setCursor(80, 16);
display.print("godz");
}
}
if (menuL1 == 9) {
display.setCursor(0, 8);
delay(100);
display.print("Ustaw godziny");
delay(150);
display.print("Interwal:");
delay(100);
if (digitalRead(BTN_ENTER) == HIGH and menuL2 == 10) {
menuL2 = 9;
}
//##########################################################################################################################
if (menuL2 == 9) {
display.setCursor(0, 16);
display.print("Ustaw godziny");
display.setCursor(45, 16);
display.print(hoursToSet);
delay(100);
if (menuL2 == 9){
display.setCursor(0,16);
if (digitalRead(BTN_ENTER) == HIGH) {
intervalTempWrite++;
if (intervalTempWrite >= 6) {
intervalTempWrite = 1;
}
}
}
if (menuL2 == 8) {
display.setCursor(0, 16);
display.print("Godzina:");
display.setCursor(45,16);
if (hoursToSet == -1){
display.setCursor(45, 16);
if (hoursToSet == -1) {
hoursToSet = now.hour();
}
display.print(hoursToSet);
@@ -467,7 +528,7 @@ void loop() {
}
}
}
if (menuL1 == 8) {
if (menuL1 == 7) {
display.setCursor(0, 8);
display.print("Ustaw minuty");
@@ -475,11 +536,11 @@ void loop() {
menuL2 = 9;
}
if (menuL2 == 9){
display.setCursor(0,16);
if (menuL2 == 9) {
display.setCursor(0, 16);
display.print("Minuta:");
display.setCursor(45,16);
if (minsToSet == -1){
display.setCursor(45, 16);
if (minsToSet == -1) {
minsToSet = now.minute();
}
display.print(minsToSet);
@@ -493,15 +554,15 @@ void loop() {
}
}
if (menuL2 == 6){
display.setCursor(0,24);
if (menuL2 == 6) {
display.setCursor(0, 24);
display.print("Wyjdz");
if (digitalRead(BTN_ENTER) == HIGH) {
menuL2 = 10;
}
}
}
if (menuL1 == 7 ) {
if (menuL1 == 36) {
display.setCursor(0, 8);
display.print("Ustaw sekundy na 0");
@@ -510,13 +571,13 @@ void loop() {
menuL2 = 9;
}
if (menuL2 == 9){
display.setCursor(0,16);
if (menuL2 == 9) {
display.setCursor(0, 16);
display.print("Sekundy = 0");
delay(250);
if (digitalRead(BTN_ENTER) == HIGH) {
menuL2 = 10;
rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), now.minute(),0));
rtc.adjust(DateTime(now.year(), now.month(), now.day(), now.hour(), now.minute(), 0));
minsToSet = -1;
}
}
@@ -532,7 +593,7 @@ void loop() {
}
if (menuL0 == 8 ) {
if (menuL0 == 8) {
display.setCursor(0, 0);
display.println(dateString);
display.setCursor(0, 8);
@@ -541,19 +602,19 @@ void loop() {
display.print(batteryPercent);
display.setCursor(70, 8);
display.print("%");
display.setCursor(80,8);
display.setCursor(80, 8);
display.print("V:");
display.setCursor(95, 8);
display.print(batteryVoltage);
display.setCursor(0, 24);
if (currentBatteryVoltage >= 4.20 ){
if (currentBatteryVoltage >= 4.20) {
display.print("Full");
chrgState = "FUL";
} else if ((lastBatteryVoltage < currentBatteryVoltage && currentBatteryVoltage >= 2.0&& currentBatteryVoltage >= 4.0 ) || currentBatteryVoltage >= 4.10 ){
} else if ((lastBatteryVoltage < currentBatteryVoltage && currentBatteryVoltage >= 2.0 && currentBatteryVoltage >= 4.0) || currentBatteryVoltage >= 4.10) {
display.print("Charging");
chrgState = "CHR";
} else if (lastBatteryVoltage >=currentBatteryVoltage && currentBatteryVoltage >= 2.0 ) {
} else if (lastBatteryVoltage >= currentBatteryVoltage && currentBatteryVoltage >= 2.0) {
display.print("Discharge");
chrgState = "DSG";
} else {
@@ -569,27 +630,27 @@ void loop() {
display.setCursor(60, 24);
display.print("Est:");
estHours = int(floor( ((float(batteryPercent)/100) * battLifeMins) /60) );
estHours = int(floor(((float(batteryPercent) / 100) * battLifeMins) / 60));
display.setCursor(85, 24);
display.print(leadZero(estHours));
display.setCursor(99, 24);
display.print("h");
estMins = ((float(batteryPercent)/100) * battLifeMins) - (estHours * 60);
estMins = ((float(batteryPercent) / 100) * battLifeMins) - (estHours * 60);
display.setCursor(107, 24);
display.print(leadZero(estMins));
display.setCursor(120, 24);
display.print("m");
display.drawRect(0,16, 124, 7, SSD1306_WHITE);
display.drawRect(0, 16, 124, 7, SSD1306_WHITE);
display.fillRect(124, 17, 5, 5, SSD1306_WHITE);
batteryBarWidth = int(((float(batteryPercent)/100)*122));
if (batteryBarWidth >122){
batteryBarWidth = int(((float(batteryPercent) / 100) * 122));
if (batteryBarWidth > 122) {
batteryBarWidth = 122;
}
display.fillRect(1, 17, batteryBarWidth, 6, SSD1306_WHITE);
if (batteryVoltage < 2 ){
display.setCursor(60,15 );
if (batteryVoltage < 2) {
display.setCursor(60, 15);
display.print("xxx");
}
@@ -606,52 +667,51 @@ void loop() {
display.print("DOWN");
}
}
if (menuL0 == 7 ) {
if (menuL0 == 7) {
display.setCursor(0, 0);
display.println(dateString);
display.setCursor(0, 8);
display.println("TemH");
display.setCursor(30, 8);
display.println(tempH,1);
display.println(tempH, 1);
display.setCursor(55, 8);
display.println("C");
display.setCursor(65, 8);
display.println("HumH");
display.setCursor(95, 8);
display.println(humH,1);
display.setCursor(120,8);
display.println(humH, 1);
display.setCursor(120, 8);
display.println("%");
display.setCursor(0, 16);
display.println("TemM");
display.setCursor(30, 16);
display.println(tempM,1);
display.println(tempM, 1);
display.setCursor(55, 16);
display.println("C");
display.setCursor(65, 16);
display.println("HumM");
display.setCursor(95, 16);
display.println(humM,1);
display.setCursor(120,16);
display.println(humM, 1);
display.setCursor(120, 16);
display.println("%");
display.setCursor(0, 24);
display.println("TemL");
display.setCursor(30, 24);
display.println(tempL,1);
display.println(tempL, 1);
display.setCursor(55, 24);
display.println("C");
display.setCursor(65, 24);
display.println("HumL");
display.setCursor(95, 24);
display.println(humL,1);
display.setCursor(120,24);
display.println(humL, 1);
display.setCursor(120, 24);
display.println("%");
}
if (digitalRead(BTN_UP) == HIGH and menuL0 <10 ) {
if ( menuL0 < 10 && menuL1 == 10 ) {
if (digitalRead(BTN_UP) == HIGH and menuL0 < 10) {
if (menuL0 < 10 && menuL1 == 10) {
menuL0 = menuL0 + 1;
}
if (menuL1 < 9 && menuL2 == 10) {
@@ -660,32 +720,28 @@ void loop() {
if (menuL2 < 9 and menuL0 != 10 and menuL1 != 10) {
menuL2 = menuL2 + 1;
}
if (menuL2 == 9 and minsToSet <59)
{
if (menuL2 == 9 and minsToSet < 59) {
minsToSet = minsToSet + 1;
}
if (menuL2 == 9 and hoursToSet < 23)
{
if (menuL2 == 9 and hoursToSet < 23) {
hoursToSet = hoursToSet + 1;
}
}
if (digitalRead(BTN_DOWN) == HIGH and menuL0 >= 7) {
if (menuL0 > 7 && menuL1 == 10 ) {
if (menuL0 > 7 && menuL1 == 10) {
menuL0 = menuL0 - 1;
}
if (menuL1 > 6 and menuL1 <= 9 && menuL2 == 10) {
menuL1 = menuL1 - 1;
}
if (menuL2 > 6 and menuL2 < 9 and menuL0 != 10 and menuL1 != 10 ) {
if (menuL2 > 6 and menuL2 < 9 and menuL0 != 10 and menuL1 != 10) {
menuL2 = menuL2 - 1;
}
if (menuL2 == 9 and minsToSet > 1)
{
if (menuL2 == 9 and minsToSet > 1) {
minsToSet = minsToSet - 1;
}
if (menuL2 == 9 and hoursToSet > 1)
{
if (menuL2 == 9 and hoursToSet > 1) {
hoursToSet = hoursToSet - 1;
}
}
@@ -698,13 +754,13 @@ void loop() {
quickBatteryVoltage4 = quickBatteryVoltage3;
quickBatteryVoltage3 = quickBatteryVoltage2;
quickBatteryVoltage2 = quickBatteryVoltage;
quickBatteryVoltage = (measuredVoltage * voltageDividerFactor)+0.1;
batteryVoltage = (quickBatteryVoltage + quickBatteryVoltage2 + quickBatteryVoltage3 + quickBatteryVoltage4)/4;
quickBatteryVoltage = (measuredVoltage * voltageDividerFactor) + 0.1;
batteryVoltage = (quickBatteryVoltage + quickBatteryVoltage2 + quickBatteryVoltage3 + quickBatteryVoltage4) / 4;
}
// Log napiećia docelowoe procent baterii
// kiedy zaden przycisk nie jest wcisniety
if (abs (batteryVoltage - currentBatteryVoltage) >= 0.14 && digitalRead(BTN_DOWN) == LOW && digitalRead(BTN_UP) == LOW && digitalRead(BTN_ENTER) == LOW ) {
// Log napiećia docelowoe procent baterii
// kiedy zaden przycisk nie jest wcisniety
if (abs(batteryVoltage - currentBatteryVoltage) >= 0.14 && digitalRead(BTN_DOWN) == LOW && digitalRead(BTN_UP) == LOW && digitalRead(BTN_ENTER) == LOW) {
lastBatteryVoltage = currentBatteryVoltage;
currentBatteryVoltage = batteryVoltage;
}
@@ -713,7 +769,6 @@ void loop() {
lastBatteryVoltage = currentBatteryVoltage;
currentBatteryVoltage = batteryVoltage;
delay(500);
}
//zapis na SD poziom baterii
if (mins % 1 == 0 && secs == 0) {
@@ -724,7 +779,7 @@ void loop() {
file.print(" Battery %: ");
file.print(batteryPercent);
file.print(" V: ");
file.println(formatNumber(currentBatteryVoltage,2));
file.println(formatNumber(currentBatteryVoltage, 2));
file.close();
}
}
@@ -734,12 +789,12 @@ void loop() {
File file = SD.open("/TempHumLog.txt", FILE_APPEND);
if (file) {
display.fillRect(0, 0, 124, 64, SSD1306_WHITE);
tempHCalc = ( tempH + lastTempH )/2;
tempMCalc = ( tempM + lastTempM )/2;
tempLCalc = ( tempL + lastTempL )/2;
humHCalc = ( humH + lastHumH )/2;
humMCalc = ( humM + lastHumM )/2;
humLCalc = ( humL + lastHumL )/2;
tempHCalc = (tempH + lastTempH) / 2;
tempMCalc = (tempM + lastTempM) / 2;
tempLCalc = (tempL + lastTempL) / 2;
humHCalc = (humH + lastHumH) / 2;
humMCalc = (humM + lastHumM) / 2;
humLCalc = (humL + lastHumL) / 2;
lastTempH = tempH;
lastTempM = tempM;
lastTempL = tempL;