summaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp175
1 files changed, 175 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
new file mode 100644
index 0000000..fba6581
--- /dev/null
+++ b/src/main.cpp
@@ -0,0 +1,175 @@
+//********************************************************************
+//*
+//* Часы na LED 8s4r - DeepSeek
+//* 2026.03.28 - 2026.03.29
+//* v.003
+//*
+//* DEC - HEX
+//* A - пусто
+//* B - минус
+//* C - градус
+//*
+//********************************************************************
+#include <Arduino.h>
+#include <Wire.h>
+
+#include "RTClib.h"
+RTC_DS3231 rtc;
+
+#include <Adafruit_BME280.h>
+Adafruit_BME280 bme;
+
+uint8_t timeVis[] = {8, 3, 2, 2};
+
+struct
+{
+ uint8_t rtc_hour = 0;
+ uint8_t rtc_min = 0;
+ uint8_t bme_temp = 0;
+ uint8_t bme_pres = 0;
+ uint8_t bme_hum = 0;
+} dataOut;
+
+uint32_t timeOld = 0;
+uint32_t timeOldSec = 0;
+bool flagSec = true;
+String outData = "";
+
+//**************************************************
+void getTime()
+{
+ DateTime now = rtc.now();
+
+ dataOut.rtc_hour = now.hour();
+ dataOut.rtc_min = now.minute();
+}
+
+//**************************************************
+void getTemp()
+{
+ dataOut.bme_temp = bme.readTemperature();
+}
+
+void getPres()
+{
+ dataOut.bme_pres = bme.readPressure() / 133.3224 - 700;
+}
+
+void getHum()
+{
+ dataOut.bme_hum = bme.readHumidity();
+}
+
+//**************************************************
+void setup()
+{
+ Serial.begin(9600);
+ Serial.println();
+
+ Wire.begin();
+
+ if (!rtc.begin())
+ {
+ dataOut.rtc_hour = 0xBB;
+ dataOut.rtc_min = 0xBB;
+ }
+ else if (rtc.lostPower())
+ {
+ rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
+ }
+ // rtc.adjust(DateTime(2026, 3, 29, 1, 51, 0));
+
+ if (!bme.begin(0x76, &Wire))
+ {
+ dataOut.bme_temp = 0xBB;
+ dataOut.bme_pres = 0xBB;
+ dataOut.bme_hum = 0xBB;
+ }
+
+ timeOld = millis();
+ timeOldSec = millis();
+}
+
+//**************************************************
+void loop()
+{
+ static uint8_t countVis = 0;
+ outData = "";
+
+ switch (countVis)
+ {
+ case 0:
+ getTime();
+ break;
+
+ case 1:
+ getTemp();
+ outData += "A";
+ outData += dataOut.bme_temp / 10;
+ outData += "A";
+ outData += dataOut.bme_temp % 10;
+ outData += "C";
+ break;
+
+ case 2:
+ getPres();
+ outData += "A7A";
+ outData += dataOut.bme_pres / 10;
+ outData += dataOut.bme_pres % 10;
+ break;
+
+ case 3:
+ getHum();
+ outData += "AAA";
+ outData += dataOut.bme_hum / 10;
+ outData += dataOut.bme_hum % 10;
+ break;
+
+ default:
+ break;
+ }
+
+ if (countVis > 0)
+ {
+ Serial.println(outData);
+ delay(timeVis[countVis] * 1000);
+ }
+ else
+ {
+ while ((millis() - timeOld) < (timeVis[0] * 1000))
+ {
+ if (millis() - timeOldSec >= 500)
+ {
+ outData = "";
+ if (dataOut.rtc_hour < 10)
+ {
+ outData += "A";
+ outData += dataOut.rtc_hour;
+ }
+ else
+ {
+ outData += dataOut.rtc_hour / 10;
+ outData += dataOut.rtc_hour % 10;
+ }
+
+ (flagSec) ? outData += "D" : outData += "A";
+
+ outData += dataOut.rtc_min / 10;
+ outData += dataOut.rtc_min % 10;
+ flagSec = !flagSec;
+ Serial.println(outData);
+ timeOldSec = millis();
+ }
+ }
+ }
+
+ if (countVis < (sizeof(timeVis) - 1))
+ {
+ countVis++;
+ }
+ else
+ {
+ countVis = 0;
+ timeOld = millis();
+ }
+} \ No newline at end of file