|
@@ -10,21 +10,13 @@
|
|
|
I2C i2c(PA_10, PA_9);
|
|
|
|
|
|
|
|
|
-bool RtcTick = false;
|
|
|
-bool RefreshTick = false;
|
|
|
-
|
|
|
-void RtcCallback(void) {
|
|
|
- RtcTick = true;
|
|
|
-}
|
|
|
-
|
|
|
-void RefreshCallback(void) {
|
|
|
- RefreshTick = true;
|
|
|
-}
|
|
|
+bool RtcTick, RefreshTick;
|
|
|
+bool StartupFlag, RuntimeFlag;
|
|
|
|
|
|
typedef struct {
|
|
|
- char Prev;
|
|
|
+ char PrevDigit;
|
|
|
ushort PrevValue;
|
|
|
- char Next;
|
|
|
+ char NextDigit;
|
|
|
ushort NextValue;
|
|
|
} Digit;
|
|
|
|
|
@@ -33,47 +25,51 @@ Digit Digits[NUM_DIGITS] = {0};
|
|
|
int DotNextValue, DotPrevValue;
|
|
|
bool DotIncrement = false;
|
|
|
|
|
|
-bool StartupFlag = true;
|
|
|
-bool RuntimeFlag = false;
|
|
|
+Ticker StartupTicker, RuntimeTicker;
|
|
|
+int StartupTickerIter, RuntimeTickerIter;
|
|
|
+
|
|
|
+void RtcCallback(void) {
|
|
|
+ RtcTick = true;
|
|
|
+}
|
|
|
|
|
|
-Ticker StartupTicker;
|
|
|
-int StartupTickerIter = 1024;
|
|
|
+void RefreshCallback(void) {
|
|
|
+ RefreshTick = true;
|
|
|
+}
|
|
|
|
|
|
void StartupTickerCallback(void) {
|
|
|
|
|
|
for (int i = 0; i < NUM_DIGITS; i++) {
|
|
|
- Digits[i].NextValue = (i == 0 && Digits[i].Next == 0) ? 0 : Digits[i].NextValue + 4;
|
|
|
+ Digits[i].NextValue = (i == 0 && Digits[i].NextDigit == 0) ? 0 : Digits[i].NextValue + FADE_TICK_STEP;
|
|
|
}
|
|
|
|
|
|
- DotNextValue += 4;
|
|
|
+ DotNextValue += FADE_TICK_STEP;
|
|
|
|
|
|
if (--StartupTickerIter == 0) {
|
|
|
StartupTicker.detach();
|
|
|
for (int i = 0; i < NUM_DIGITS; i++) {
|
|
|
- Digits[i].Prev = Digits[i].Next;
|
|
|
+ Digits[i].PrevDigit = Digits[i].NextDigit;
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
RuntimeFlag = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-Ticker RuntimeTicker;
|
|
|
-int RuntimeTickerIter = 1024;
|
|
|
-
|
|
|
void RuntimeTickerCallback(void) {
|
|
|
|
|
|
for (int i = 0; i < NUM_DIGITS; i++) {
|
|
|
- if(Digits[i].Prev != Digits[i].Next) {
|
|
|
- Digits[i].PrevValue -= 4;
|
|
|
- Digits[i].NextValue = (i == 0 && Digits[i].Next == 0) ? 0 : Digits[i].NextValue + 4;
|
|
|
+ if(Digits[i].PrevDigit != Digits[i].NextDigit) {
|
|
|
+ Digits[i].PrevValue -= FADE_TICK_STEP;
|
|
|
+ Digits[i].NextValue = (i == 0 && Digits[i].NextDigit == 0) ? 0 : Digits[i].NextValue + FADE_TICK_STEP;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- DotNextValue = DotIncrement ? DotNextValue + 4 : DotNextValue - 4;
|
|
|
+ DotNextValue = DotIncrement ? DotNextValue + FADE_TICK_STEP: DotNextValue - FADE_TICK_STEP;
|
|
|
|
|
|
if (--RuntimeTickerIter == 0) {
|
|
|
RuntimeTicker.detach();
|
|
|
for (int i = 0; i < NUM_DIGITS; i++) {
|
|
|
- Digits[i].Prev = Digits[i].Next;
|
|
|
+ Digits[i].PrevDigit = Digits[i].NextDigit;
|
|
|
}
|
|
|
DotIncrement = !DotIncrement;
|
|
|
}
|
|
@@ -81,6 +77,11 @@ void RuntimeTickerCallback(void) {
|
|
|
|
|
|
int main() {
|
|
|
|
|
|
+ RtcTick = false;
|
|
|
+ RefreshTick = false;
|
|
|
+ StartupFlag = true;
|
|
|
+ RuntimeFlag = false;
|
|
|
+
|
|
|
|
|
|
i2c.frequency(400000);
|
|
|
|
|
@@ -129,8 +130,8 @@ int main() {
|
|
|
|
|
|
for (int i = 0; i < NUM_DIGITS; i++) {
|
|
|
if (Digits[i].NextValue != Digits[i].PrevValue) {
|
|
|
- PCA9685_SetDigit(i, Digits[i].Prev, Digits[i].PrevValue);
|
|
|
- PCA9685_SetDigit(i, Digits[i].Next, Digits[i].NextValue);
|
|
|
+ PCA9685_SetDigit(i, Digits[i].PrevDigit, Digits[i].PrevValue);
|
|
|
+ PCA9685_SetDigit(i, Digits[i].NextDigit, Digits[i].NextValue);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -155,23 +156,24 @@ int main() {
|
|
|
int nextSecond, nextMinute, nextHour;
|
|
|
DS3231_GetTime(&nextSecond, &nextMinute, &nextHour);
|
|
|
|
|
|
- Digits[3].Next = nextMinute % 10;
|
|
|
- Digits[2].Next = nextMinute / 10;
|
|
|
- Digits[1].Next = nextHour % 10;
|
|
|
- Digits[0].Next = nextHour / 10;
|
|
|
+ Digits[3].NextDigit = nextMinute % 10;
|
|
|
+ Digits[2].NextDigit = nextMinute / 10;
|
|
|
+ Digits[1].NextDigit = nextHour % 10;
|
|
|
+ Digits[0].NextDigit = nextHour / 10;
|
|
|
|
|
|
if (StartupFlag) {
|
|
|
|
|
|
|
|
|
- StartupTicker.attach_us(StartupTickerCallback, 900);
|
|
|
+ StartupTickerIter = FADE_TICKS;
|
|
|
+ StartupTicker.attach(StartupTickerCallback, 1/FADE_TICKS);
|
|
|
StartupFlag = false;
|
|
|
}
|
|
|
|
|
|
if (RuntimeFlag) {
|
|
|
|
|
|
|
|
|
- RuntimeTickerIter = 1024;
|
|
|
- RuntimeTicker.attach_us(RuntimeTickerCallback, 900);
|
|
|
+ RuntimeTickerIter = FADE_TICKS;
|
|
|
+ RuntimeTicker.attach(RuntimeTickerCallback, 1/FADE_TICKS);
|
|
|
}
|
|
|
}
|
|
|
}
|