#include "RTClib.h"
#include "OneWire.h"
#include "DallasTemperature.h"
#include "SevSeg.h"
OneWire oneWire(A1);
DallasTemperature sensor(&oneWire);
RTC_DS1307 rtc;
SevSeg sevseg;
static const unsigned long interval = 5000;
byte mode = 0;
void setup() {
Serial.begin(115200);
pinMode(A0, OUTPUT);
byte numDigits = 4;
byte digitPins[] = {2, 3, 4, 5}; //1,2,3,4
byte segmentPins[] = {6, 7, 8, 9, 10, 11, 12, 13}; //A,B,C,D,E,F,G,DP
bool resistorsOnSegments = false; // 'false' means resistors are on digit pins
byte hardwareConfig = COMMON_CATHODE; // COMMON_ANODE/COMMON_CATHODE
bool updateWithDelays = false; // Default 'false' is Recommended
bool leadingZeros = false; // Use 'true' if you'd like to keep the leading zeros
bool disableDecPoint = false; // Use 'true' if your decimal point doesn't exist or isn't connected
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments,
updateWithDelays, leadingZeros, disableDecPoint);
sevseg.setBrightness(90); //value between -200 and 200. 0 to 100 is the standard range
rtc.begin();
//set time
if (!rtc.isrunning()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
//show time
DateTime now = rtc.now();
sevseg.setNumber((now.hour() * 100) + now.minute());
digitalWrite(A0, HIGH);
}
void loop() {
static unsigned long time = millis();
if (millis() - time >= interval && mode == 0) {
time += interval;
digitalWrite(A0, LOW);
//show temp
sensor.requestTemperatures();
float tempC = sensor.getTempCByIndex(0);
sevseg.setNumberF(tempC, 1);
Serial.print(tempC);
Serial.println("°C");
mode = 1;
}
if (millis() - time >= interval && mode == 1) {
time += interval;
//show time
DateTime now = rtc.now();
sevseg.setNumber((now.hour() * 100) + now.minute());
digitalWrite(A0, HIGH);
Serial.print(now.hour(), DEC);
Serial.print(":");
if (now.minute() < 10) Serial.print("0");
Serial.print(now.minute(), DEC);
Serial.print(":");
if (now.second() < 10) Serial.print("0");
Serial.println(now.second(), DEC);
mode = 0;
}
sevseg.refreshDisplay(); // Must run repeatedly
}