#pragma GCC push_options #pragma GCC optimize ("O1") // I2C #include // RTC #include // Display #include // Init TM1637 Module #define CLK 3 // clock #define DIO 2 // data TM1637Display display(CLK, DIO); // Init DS3231 RTC DS3231 rtc; bool h12; bool hPM; void setup() { // Buttons for(int i = 8; i < 11; i++) pinMode(i,INPUT); // Display display.setBrightness(7); display.clear(); // RTC Wire.begin(); rtc.setClockMode(false); // 24 hour // Check RTC for problems if(!rtc.oscillatorCheck()) { // RTC NOT OK, set values to known ones rtc.setMinute(0); rtc.setHour(12); } } byte minute, hour, decTemp; float temp; // Create degree Celsius symbol const uint8_t celsius[] = { SEG_A | SEG_B | SEG_F | SEG_G, // Circle SEG_A | SEG_D | SEG_E | SEG_F // C }; void loop() { minute = rtc.getMinute(); hour = rtc.getHour(h12, hPM); display.showNumberDecEx(hour * 100 + minute, 0b01000000, true); // Hour up if(digitalRead(10)) { if(rtc.getHour(h12, hPM) == 23) { rtc.setHour(0); } else { rtc.setHour(rtc.getHour(h12, hPM) + 1); } while(digitalRead(10)); } // Minute up, set seconds to 0 if(digitalRead(9)) { if(rtc.getMinute() == 59) { rtc.setMinute(0); } rtc.setSecond(0); rtc.setMinute(rtc.getMinute() + 1); while(digitalRead(9)); } // Show temperature reading from RTC while(digitalRead(8)) { temp = rtc.getTemperature(); decTemp = (int)temp; if(temp > -9999) { // OK display.showNumberDec(decTemp, false, 2); } else { display.showNumberDec(99, false, 2); } display.setSegments(celsius, 2, 2); } } #pragma GCC pop_options