Browse Source

Condensed some code logic

Kevin Lee 5 years ago
parent
commit
521a8dc93f
1 changed files with 36 additions and 68 deletions
  1. 36 68
      Nixie_Firmware_Mbed/main.cpp

+ 36 - 68
Nixie_Firmware_Mbed/main.cpp

@@ -27,15 +27,14 @@ typedef struct {
     bool RefreshActive;
 } TUBE;
 
-TUBE Tube[NUM_TUBES] = {0};  // Active per-tube digit setting
+TUBE Tube[NUM_TUBES] = {0};  // Active per-tube configuration
 
 ushort DotValue = PCA9685_Min_Brightness;
 bool DotUpdated = false;
 bool DotIncrement = true;
 
-Ticker StartupUpdateTicker, RuntimeUpdateTicker, RngUpdateTicker;
-int StartupTickerIter, RuntimeTickerIter, RngTickerIter;
-
+Ticker RuntimeUpdateTicker, RngUpdateTicker;
+int RuntimeTickerIter, RngTickerIter;
 
 void RtcTickCallback(void) {
     RtcTick = true;
@@ -52,21 +51,15 @@ void RngTickCallback(void) {
 void RuntimeTickerUpdate(void) {
 
     for (int i = 0; i < NUM_TUBES; i++) {
-
         if(!Tube[i].RefreshActive) {
-
             for (int j = 0; j < MAX_FADE_DIGITS; j++) {
-
                 DIGIT *digit = &Tube[i].Digits[j];
-
                 if (digit->Active) {
-
                     if (digit->Increment && digit->Reg < PCA9685_Max_Brightness) {
                         digit->Reg += FADE_TICK_STEP;
                     } else if (digit->Reg > PCA9685_Min_Brightness) {
                         digit->Reg -= FADE_TICK_STEP;
                     }
-
                     Tube[i].Updated = true;
                 }
             }
@@ -148,11 +141,10 @@ int main() {
         // Animate_Cycle_Fast();
         // Animate_Cycle_Fast_Random();
 
+        // On every refresh tick, update the display with new values
         if (RefreshTick) {
             RefreshTick = false;
 
-            // On refresh, update the display with new values
-
             for (int i = 0; i < NUM_TUBES; i++) {
                 if (Tube[i].Updated) {
                     Tube[i].Updated = false;
@@ -175,82 +167,58 @@ int main() {
             }
         }
 
+        // On every RTC tick, read and process the current time
         if (RtcTick) {
             RtcTick = false;
 
+            // Save the previous time to check if digit(s) has changed
             prevMinute = nextMinute;
             prevHour = nextHour;
 
             DS3231_GetTime(&nextSecond, &nextMinute, &nextHour);
 
-            if (startup) {
-                startup = false;
-
-                for (int i = 0; i < NUM_TUBES; i++) {
+            // Update the display configuration based on the new/previous time
+            for (int i = 0; i < NUM_TUBES; i++) {
 
-                    bool Update = false;
-                    if (i == 0 && nextHour / 10 != 0) {
+                bool Update = false;
+                if (i == 0 && (startup || prevHour / 10 != nextHour / 10)) {
+                    if (nextHour / 10 != 0) {
                         Tube[i].NextDigit->Value = nextHour / 10;
-                        Update = true;
-                    } else if (i == 1) {
-                        Tube[i].NextDigit->Value = nextHour % 10;
-                        Update = true;
-                    } else if (i == 2) {
-                        Tube[i].NextDigit->Value = nextMinute / 10;
-                        Update = true;
-                    } else if (i == 3) {
-                        Tube[i].NextDigit->Value = nextMinute % 10;
-                        Update = true;
-                    }
-
-                    if (Update) {
-
                         Tube[i].NextDigit->Increment = true;
                         Tube[i].NextDigit->Active = true;
-                        Tube[i].PrevDigit = Tube[i].NextDigit;
-                        Tube[i].NextDigit = (Tube[i].NextDigit == &Tube[i].Digits[0]) ? 
-                            &Tube[i].Digits[1] : &Tube[i].Digits[0];
                     }
+                    Update = true; // ?
+                } else if (i == 1 && (startup || prevHour % 10 != nextHour % 10)) {
+                    Tube[i].NextDigit->Value = nextHour % 10;
+                    Tube[i].NextDigit->Increment = true;
+                    Tube[i].NextDigit->Active = true;
+                    Update = true;
+                } else if (i == 2 && (startup || prevMinute / 10 != nextMinute / 10)) {
+                    Tube[i].NextDigit->Value = nextMinute / 10;
+                    Tube[i].NextDigit->Increment = true;
+                    Tube[i].NextDigit->Active = true;
+                    Update = true;
+                } else if (i == 3 && (startup || prevMinute % 10 != nextMinute % 10)) {
+                    Tube[i].NextDigit->Value = nextMinute % 10;
+                    Tube[i].NextDigit->Increment = true;
+                    Tube[i].NextDigit->Active = true;
+                    Update = true;
                 }
 
-            } else {
-
-                for (int i = 0; i < NUM_TUBES; i++) {
-
-                    bool Update = false;
-                    if (i == 0 && ((prevHour / 10) != (nextHour / 10))) {
-                        if (nextHour / 10 != 0) {
-                            Tube[i].NextDigit->Value = nextHour / 10;
-                            Tube[i].NextDigit->Increment = true;
-                            Tube[i].NextDigit->Active = true;
-                        }
-                        Update = true;
-                    } else if (i == 1 && ((prevHour % 10) != (nextHour % 10))) {
-                        Tube[i].NextDigit->Value = nextHour % 10;
-                        Tube[i].NextDigit->Increment = true;
-                        Tube[i].NextDigit->Active = true;
-                        Update = true;
-                    } else if (i == 2 && ((prevMinute / 10) != (nextMinute / 10))) {
-                        Tube[i].NextDigit->Value = nextMinute / 10;
-                        Tube[i].NextDigit->Increment = true;
-                        Tube[i].NextDigit->Active = true;
-                        Update = true;
-                    } else if (i == 3 && ((prevMinute % 10) != (nextMinute % 10))) {
-                        Tube[i].NextDigit->Value = nextMinute % 10;
-                        Tube[i].NextDigit->Increment = true;
-                        Tube[i].NextDigit->Active = true;
-                        Update = true;
-                    }
-
-                    if (Update) {
+                // Handle display configuration changes for the given tube
+                if (Update) {
+                    if (!startup) {
                         Tube[i].PrevDigit->Increment = false;
-                        Tube[i].PrevDigit = Tube[i].NextDigit;
-                        Tube[i].NextDigit = (Tube[i].NextDigit == &Tube[i].Digits[0]) ? 
-                            &Tube[i].Digits[1] : &Tube[i].Digits[0];
                     }
+                    Tube[i].PrevDigit = Tube[i].NextDigit;
+                    Tube[i].NextDigit = Tube[i].NextDigit == &Tube[i].Digits[0] ? 
+                        &Tube[i].Digits[1] : &Tube[i].Digits[0];
                 }
             }
 
+            // Clear the startup run-once flag after the first iteration
+            startup = false;
+
             // Fade in the new time
             RuntimeTickerIter = FADE_TICKS;
             RuntimeUpdateTicker.attach(RuntimeTickerUpdate, (float)(DIGIT_REFRESH_RATE_US / 1000) / RuntimeTickerIter);