Created
July 26, 2020 23:09
-
-
Save mzero/c2c501a0334610a8d998c7aa34b40f40 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "RTClib.h" | |
#include <Adafruit_MCP23017.h> | |
#define NUM_ONES_LEDS 4 | |
RTC_DS3231 rtc; | |
Adafruit_MCP23017 mcpMinutes; | |
Adafruit_MCP23017 mcpHours; | |
Adafruit_MCP23017 mcpMonths; | |
Adafruit_MCP23017 mcpDayLow; | |
Adafruit_MCP23017 mcpDayHigh; | |
enum { | |
pinMinute4 = 0, | |
pinMinute3, | |
pinMinute2, | |
pinMinute1, | |
pinMinute55, | |
pinMinute50, | |
pinMinute45, | |
pinMinute40, | |
pinMinute35, | |
pinMinute30, | |
pinMinute25, | |
pinMinute20, | |
pinMinute15, | |
pinMinute10, | |
pinMinute5, | |
pinMinuteFirst = pinMinute4, | |
pinMinuteLast = pinMinute5, | |
pinHour12 = 0, | |
pinHour11, | |
pinHour10, | |
pinHour9, | |
pinHour8, | |
pinHour7, | |
pinHour6, | |
pinHour5, | |
pinHour4, | |
pinHour3, | |
pinHour2, | |
pinHour1, | |
pinHourFirst = pinHour12, | |
pinHourLast = pinHour1, | |
pinMonthJAN = 0, | |
pinMonthFEB, | |
pinMonthMAR, | |
pinMonthAPR, | |
pinMonthMAY, | |
pinMonthJUN, | |
pinMonthJUL, | |
pinMonthAUG, | |
pinMonthSEP, | |
pinMonthOCT, | |
pinMonthNOV, | |
pinMonthDEC, | |
pinMonthFirst = pinMonthJAN, | |
pinMonthLast = pinMonthDEC, | |
pinDayLowFirst = 0, | |
pinDayLowLast = 14, | |
pinDayHighFirst = 0, | |
pinDayHighLast = 15, | |
}; | |
void setupMCP( | |
Adafruit_MCP23017& mcp, uint8_t addr, uint8_t pinFirst, uint8_t pinLast) | |
{ | |
mcp.begin(addr); | |
for (uint8_t pin = pinFirst; pin <= pinLast; ++pin) { | |
mcp.pinMode(pin, OUTPUT); | |
mcp.digitalWrite(pin, LOW); | |
} | |
} | |
void range( | |
uint8_t value, | |
Adafruit_MCP23017& mcp, | |
uint8_t pintFirstValue, | |
uint8_t pinFirst, uint8_t pinLast) | |
// Set all the pins from first to last: HIGH if the pin's value is less than | |
// or equal to the given value, LOW otherwise. | |
// The value of the first pin is given by pinFirstValue. | |
// Note that pinFirst may be less than or greater than pinLast, depending | |
// on the direction of the indicators. | |
{ | |
uint8_t direction = pinFirst < pinLast ? 1 : -1; | |
uint8_t pin = pinFirst; | |
uint8_t pinValue = pintFirstValue; | |
while (pin != pinLast) { | |
mcp.digitalWrite(pin, pinValue <= value ? HIGH : LOW); | |
pin += direction; | |
pinValue += 1; | |
} | |
} | |
const char* daysOfTheWeek[] = { | |
"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" | |
}; | |
void setup () { | |
setupMCP(mcpMinutes, B000, pinMinuteFirst, pinMinuteLast); | |
setupMCP(mcpHours, B001, pinHourFirst, pinHourLast); | |
setupMCP(mcpMonths, B010, pinMonthFirst, pinMonthLast); | |
setupMCP(mcpDayLow, B100, pinDayLowFirst, pinDayLowLast); | |
setupMCP(mcpDayHigh, B011, pinDayHighFirst,pinDayHighLast); | |
Serial.begin(115200); | |
while (!Serial); // comment this out if you don't want to wait for the IDE | |
if (! rtc.begin()) { | |
Serial.println("Couldn't find RTC"); | |
while (1); | |
} | |
if (rtc.lostPower()) { | |
Serial.println("RTC lost power, lets set the time!"); | |
//rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); | |
} | |
} | |
void loop () { | |
//rtc | |
DateTime now = rtc.now(); | |
Serial.print(now.year(), DEC); | |
Serial.print('/'); | |
Serial.print(now.month(), DEC); | |
Serial.print('/'); | |
Serial.print(now.day(), DEC); | |
Serial.print(" ("); | |
Serial.print(daysOfTheWeek[now.dayOfTheWeek()]); | |
Serial.print(") "); | |
Serial.print(now.hour(), DEC); | |
Serial.print(':'); | |
Serial.print(now.minute(), DEC); | |
Serial.print(':'); | |
Serial.print(now.second(), DEC); | |
Serial.println(); | |
Serial.print("Temperature: "); | |
Serial.print(rtc.getTemperature()); | |
Serial.println(" C"); | |
Serial.println(); | |
range(now.minute() % 5, mcpMinutes, 1, pinMinute1, pinMinute4); | |
range(now.minute() / 5, mcpMinutes, 1, pinMinute5, pinMinute55); | |
range((now.hour() - 1) % 12 + 1, | |
mcpHours, 1, pinHour1, pinHour12); | |
range(now.month(), mcpMonths, 1, pinMonthJAN, pinMonthDEC); | |
range(now.day(), mcpDayLow, 1, pinDayLowFirst, pinDayLowLast); | |
range(now.day(), mcpDayHigh, 16, pinDayHighFirst, pinDayHighLast); | |
delay(1000); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment