86 lines
2.1 KiB
C++
86 lines
2.1 KiB
C++
#include <Adafruit_LEDBackpack.h> // Support for the Backpack FeatherWing
|
|
#include <Adafruit_GFX.h> // Adafruit's graphics library
|
|
#include <Adafruit_I2CDevice.h>
|
|
#include <SPI.h>
|
|
#include "ntp_time.h"
|
|
|
|
#define DISPLAY_ADDRESS 0x70
|
|
#define BRIGHTNESS 0
|
|
#define BRIGHTNESS_STEP 1
|
|
|
|
namespace Display {
|
|
|
|
uint8_t brightness = BRIGHTNESS;
|
|
int currentHour = -1;
|
|
int currentMin = -1;
|
|
|
|
// Create display object
|
|
Adafruit_7segment clockDisplay = Adafruit_7segment();
|
|
|
|
void displayTime() {
|
|
int displayHour = hour();
|
|
int displayMinute = minute();
|
|
int displayValue = displayHour * 100 + displayMinute;
|
|
|
|
// Print the time on the display
|
|
clockDisplay.print(displayValue, DEC);
|
|
|
|
// Add zero padding when in 24 hour mode and it's midnight.
|
|
// In this case the print function above won't have leading 0's
|
|
// which can look confusing. Go in and explicitly add these zeros.
|
|
if (displayHour == 0) {
|
|
clockDisplay.writeDigitNum(1, 0);
|
|
if (displayMinute < 10) {
|
|
clockDisplay.writeDigitNum(3, 0);
|
|
}
|
|
}
|
|
}
|
|
|
|
void changeBrightness(bool increase) {
|
|
increase ? brightness = (brightness + BRIGHTNESS_STEP) % 15 : brightness = (brightness - BRIGHTNESS_STEP) % 15;
|
|
clockDisplay.setBrightness(brightness);
|
|
}
|
|
|
|
void adjustBrightness() {
|
|
if (currentHour > 8 && currentHour < 17) {
|
|
brightness = 11;
|
|
} else {
|
|
brightness = BRIGHTNESS;
|
|
}
|
|
clockDisplay.setBrightness(brightness);
|
|
}
|
|
|
|
void displayColon() {
|
|
static bool colonOn = false;
|
|
|
|
if (colonOn) {
|
|
if (currentHour != hour()) {
|
|
currentHour = hour();
|
|
Display::adjustBrightness();
|
|
hourChanged.signal();
|
|
if (currentHour == 8) dayChanged.signal();
|
|
}
|
|
if (currentMin != minute()) {
|
|
currentMin = minute();
|
|
displayTime();
|
|
}
|
|
}
|
|
clockDisplay.drawColon(colonOn);
|
|
clockDisplay.writeDisplay();
|
|
|
|
colonOn = !colonOn;
|
|
}
|
|
|
|
void displayValue(int value) {
|
|
clockDisplay.print(value, HEX);
|
|
clockDisplay.writeDisplay();
|
|
}
|
|
|
|
void setup() {
|
|
clockDisplay.begin(DISPLAY_ADDRESS);
|
|
clockDisplay.setBrightness(brightness);
|
|
displayTime();
|
|
displayColon();
|
|
}
|
|
}
|