From: Noah Tomkins Date: Sun, 19 Jul 2026 18:25:35 +0000 (-0400) Subject: Working Clock Time on Display X-Git-Url: https://git.tnoah.ca/?a=commitdiff_plain;h=HEAD;p=clock.git Working Clock Time on Display --- diff --git a/build.sh b/build.sh index 3719497..7f1578c 100755 --- 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 index 0000000..12f96e8 --- /dev/null +++ b/buildrun.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +gcc -v -o clock ./src/clock.cpp -l wiringPi +./clock \ No newline at end of file diff --git a/src/clock.cpp b/src/clock.cpp index c67f737..f49bec8 100644 --- a/src/clock.cpp +++ b/src/clock.cpp @@ -1,13 +1,20 @@ #include +#include #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 diff --git a/src/display.c b/src/display.c index 8346918..6a19714 100644 --- a/src/display.c +++ b/src/display.c @@ -1,38 +1,17 @@ #include #include #include +#include #include #include +#include +#include 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 index 0000000..d4223cc --- /dev/null +++ b/src/helpers.c @@ -0,0 +1,24 @@ +#include +#include + +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 index f170698..0000000 --- a/src/helpers.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include - -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); -}