diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.cpp | 175 |
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 |
