//******************************************************************** //* //* Часы na LED 8s4r - DeepSeek //* 2026.03.28 - 2026.03.29 //* v.003 //* //* DEC - HEX //* A - пусто //* B - минус //* C - градус //* //******************************************************************** #include #include #include "RTClib.h" RTC_DS3231 rtc; #include 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(); } }