]> git.tnoah.ca Git - clock.git/commitdiff
Working Clock Time on Display master
authorNoah Tomkins <noah@tnoah.ca>
Sun, 19 Jul 2026 18:25:35 +0000 (14:25 -0400)
committerNoah Tomkins <noah@tnoah.ca>
Sun, 19 Jul 2026 18:25:35 +0000 (14:25 -0400)
build.sh
buildrun.sh [new file with mode: 0755]
src/clock.cpp
src/display.c
src/helpers.c [new file with mode: 0644]
src/helpers.cpp [deleted file]

index 3719497372b918cff7d5090557fd02dd27143e8c..7f1578cbdd2ff669c4e9f4fed74f4ca011a1aa12 100755 (executable)
--- a/build.sh
+++ b/build.sh
@@ -1,4 +1,3 @@
 #!/bin/bash
 
-gcc -o clock ./src/clock.cpp -l wiringPi
-./clock
\ No newline at end of file
+gcc -v -o clock ./src/clock.cpp -l wiringPi
\ No newline at end of file
diff --git a/buildrun.sh b/buildrun.sh
new file mode 100755 (executable)
index 0000000..12f96e8
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+gcc -v -o clock ./src/clock.cpp -l wiringPi
+./clock
\ No newline at end of file
index c67f737a9b8aea5f1117b8dcc814de7ca623c8e0..f49bec8326c80b6f732b7e95d3d128c2131b44fd 100644 (file)
@@ -1,13 +1,20 @@
 #include <wiringPi.h>
+#include <time.h>
 #include "display.c"
+#include "helpers.c"
 
 int main (void) 
 {
     wiringPiSetupGpio();
     setupDisplay();
 
+    display.Mode = CLOCK;
+
     for (;;)
     {
-        testDisplay();
+        now = time(NULL);         // Get current time
+        tm *t = localtime(&now);  // Convert to local time structure
+
+        updateTime(t);
     } 
 }
\ No newline at end of file
index 83469189e1fb81118aa77aa2f23da50d717e9b89..6a197140a383c175f8fe38b6aa5807e947d56d3c 100644 (file)
@@ -1,38 +1,17 @@
 #include <cstdio>
 #include <stdint.h>
 #include <cstring>
+#include <ctype.h>
 #include <stdio.h>
 #include <wiringPi.h>
+#include <time.h>
+#include <math.h>
 
 int binWriteDisplay (uint8_t digit, uint8_t segment);
-void printBinary (int num);
 
 const int digits   [3] = { 17, 27, 22 };
 const int segments [3] = { 23, 24, 25 };
 
-const int segmentDigits [] =
-{
-//  g  f  e  d  c  b  a
-//  0  1  2  3  4  5  6
-   1, 1, 1, 1, 1, 1, 0,        // 0
-   0, 1, 1, 0, 0, 0, 0,        // 1
-   1, 1, 0, 1, 1, 0, 1,        // 2
-   1, 1, 1, 1, 0, 0, 1,        // 3
-   0, 1, 1, 0, 0, 1, 1,        // 4
-   1, 0, 1, 1, 0, 1, 1,        // 5
-   1, 0, 1, 1, 1, 1, 1,        // 6
-   1, 1, 1, 0, 0, 0, 0,        // 7
-   1, 1, 1, 1, 1, 1, 1,        // 8
-   1, 1, 1, 1, 0, 1, 1,        // 9
-   1, 1, 1, 0, 1, 1, 1,        // A
-   0, 0, 1, 1, 1, 1, 1,        // b
-   1, 0, 0, 1, 1, 1, 0,        // C
-   0, 1, 1, 1, 1, 0, 1,        // d
-   1, 0, 0, 1, 1, 1, 1,        // E
-   1, 0, 0, 0, 1, 1, 1,        // F
-   0, 0, 0, 0, 0, 0, 0,        // blank
-};
-
 const uint8_t segDigits[] = 
 {
     0b01111110, // 0
@@ -45,6 +24,31 @@ const uint8_t segDigits[] =
     0b01110000, // 7
     0b01111111, // 8
     0b01111011, // 9
+    0b01110111, // A
+    0b00011111, // b
+    0b01001110, // C
+    0b01001111, // E
+    0b01000111, // F
+    0b01011110, // G
+    0b00010111, // h
+    0b00000110, // I
+    0b00111100, // J
+    0b01010111, // K
+    0b00001110, // L
+    0b01010100, // M
+    0b01110110, // N
+    0b01111110, // O
+    0b01100111, // P
+    0b01110011, // Q
+    0b01100110, // R
+    0b01011011, // S
+    0b00001111, // t
+    0b00111110, // U
+    0b00111010, // V
+    0b00101010, // W
+    0b00110111, // X
+    0b00111011, // Y
+    0b01101001, // Z
     0b00000000, // blank
 };
 
@@ -67,6 +71,25 @@ enum Symbol
     REC     = 0b1110
 };
 
+enum Mode
+{
+    CLOCK,
+    TEXT
+};
+
+struct displayState {
+    enum Mode Mode;
+    char text[6];
+    uint16_t symbols;
+    int delay = 100;
+};
+
+displayState display;
+
+// Time
+time_t now;
+struct tm *t;
+
 int binWriteDisplay (uint8_t digit, uint8_t segment) 
 {
     if (digit > 0b111 || segment > 0b111) 
@@ -86,9 +109,10 @@ int binWriteDisplay (uint8_t digit, uint8_t segment)
     return 0;
 }
 
-void writeSymbol (enum Symbol symbol)
+void writeSymbol (enum Symbol symbol, int delay = 100)
 {
     binWriteDisplay(symbol >> 3, symbol & 0b0111);
+    delayMicroseconds(delay);
 }
 
 void binWriteSegments (uint8_t digit, uint8_t segments, int delay = 100)
@@ -133,15 +157,72 @@ void write (char str[], int delay = 100)
     
     for (int i = 0; i < length; i++)
     {
-        binWriteSegments(i + 2, segDigits[str[length - i - 1] - 48]);
+        char c = str[length - i - 1];
+        char index; 
+
+        c = toupper(c);
+
+        if (c >= '0' && c <= '9')
+            index =  c - '0';
+        else if (c >= 'A' && c <= 'Z')
+            index = c - 'A' + 10;
+        else
+            index = sizeof(segDigits);
+
+        binWriteSegments(i + 2, segDigits[index]);
     }
 }
 
+bool getSymbolState(Symbol symbol)
+{
+    int mask = 2 ^ symbol;
+
+    return false;
+}
+
+void setSymbolState(Symbol symbol, bool state)
+{
+
+}
+
 void testDisplay (void)
 {
-    char str[] = "123456";
-    write(str);
-    //binWriteSegments(2, segDigits[2]);
+
+}
+
+void updateTime(tm *t) 
+{
+    int hour = t->tm_hour;
+    int min = t->tm_min;
+    int sec = t->tm_sec;
+
+    if (hour > 12)
+        hour -= 12;
+
+    sprintf (display.text, "%d%02d%02d", hour, min, sec);
+
+    if (t->tm_sec % 2)
+    {
+
+    }
+}
+
+PI_THREAD (dispalyDigits)
+{
+    piHiPri(50);
+
+    for (;;) 
+    {
+        write(display.text);
+
+        /*if (t->tm_sec % 2 == 0) 
+        {
+            writeSymbol(COL1);
+            writeSymbol(COL2);
+        }*/
+    } 
+    
+    return 0;
 }
 
 void setupDisplay (void)
@@ -156,5 +237,9 @@ void setupDisplay (void)
     }
 
     displayOff();
+
+    
+    piThreadCreate(dispalyDigits);
+    delay(10);
 }
 
diff --git a/src/helpers.c b/src/helpers.c
new file mode 100644 (file)
index 0000000..d4223cc
--- /dev/null
@@ -0,0 +1,24 @@
+#include <cstdio>
+#include <stdint.h>
+
+void printBinary (int num) 
+{
+    for (int i = 8; i >= 0; i--) 
+    {
+        printf("%d", (num >> i) & 1);
+    }
+    printf("\n");
+}
+
+int nthDigit (int x, int n)
+{
+    while (n--)
+    {
+       x /= 10;
+    }
+    return (x % 10);
+}
+
+struct string6 {
+    char val[6];
+};
\ No newline at end of file
diff --git a/src/helpers.cpp b/src/helpers.cpp
deleted file mode 100644 (file)
index f170698..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-#include <cstdio>
-#include <stdint.h>
-
-void printBinary (int num) 
-{
-    for (int i = 8; i >= 0; i--) 
-    {
-        printf("%d", (num >> i) & 1);
-    }
-    printf("\n");
-}
-
-int nthDigit (int x, int n)
-{
-    while (n--)
-    {
-       x /= 10;
-    }
-    return (x % 10);
-}