]> git.tnoah.ca Git - clock.git/commitdiff
Display Write Text
authorNoah Tomkins <noah@tnoah.ca>
Fri, 17 Jul 2026 21:19:40 +0000 (17:19 -0400)
committerNoah Tomkins <noah@tnoah.ca>
Fri, 17 Jul 2026 21:19:40 +0000 (17:19 -0400)
src/clock.cpp
src/clock.h [deleted file]
src/display.c
src/helpers.cpp [new file with mode: 0644]

index 8655cf9669f643a302af8a0b7fdeebb8451b8f67..c67f737a9b8aea5f1117b8dcc814de7ca623c8e0 100644 (file)
@@ -1,4 +1,3 @@
-#include "clock.h"
 #include <wiringPi.h>
 #include "display.c"
 
diff --git a/src/clock.h b/src/clock.h
deleted file mode 100644 (file)
index e69de29..0000000
index 6d9adc06ed4caebffe1d55de4170245f10b1d4e5..83469189e1fb81118aa77aa2f23da50d717e9b89 100644 (file)
@@ -1,17 +1,19 @@
 #include <cstdio>
 #include <stdint.h>
+#include <cstring>
+#include <stdio.h>
 #include <wiringPi.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 [] =
 {
-// a  b  c  d  e  f  g     Segments
-// 6  5  4  3  2  1  0,        // wiringPi pin No.
-
+//  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
@@ -31,6 +33,21 @@ const int segmentDigits [] =
    0, 0, 0, 0, 0, 0, 0,        // blank
 };
 
+const uint8_t segDigits[] = 
+{
+    0b01111110, // 0
+    0b00110000, // 1
+    0b01101101, // 2
+    0b01111001, // 3
+    0b00110011, // 4
+    0b01011011, // 5
+    0b01011111, // 6
+    0b01110000, // 7
+    0b01111111, // 8
+    0b01111011, // 9
+    0b00000000, // blank
+};
+
 enum Symbol 
 {
     V       = 0b0000,
@@ -74,22 +91,16 @@ void writeSymbol (enum Symbol symbol)
     binWriteDisplay(symbol >> 3, symbol & 0b0111);
 }
 
-int writeDigit (uint8_t digit, uint8_t value)
+void binWriteSegments (uint8_t digit, uint8_t segments, int delay = 100)
 {
-    if (digit > 4)
-    {
-        printf("Digit must be between 0 and 4");
-        return 1;
-    }
-
-    for (uint8_t i = 0; i < 7; i++) 
-    {
-        
+    for (uint8_t i = 0; i < 7; i++) {
+        if (segments & 0b1 == 1) 
+        {
+            binWriteDisplay(digit, i);
+            delayMicroseconds(delay);
+        }
+        segments >>= 1;
     }
-
-    //binWriteDisplay(digit + 2, )
-
-    return 0;
 }
 
 void displayOff (void) 
@@ -97,30 +108,40 @@ void displayOff (void)
     binWriteDisplay(0b111, 0b111);
 }
 
-void printBinary (int num
+void write (char str[], int delay = 100
 {
-    for (int i = 3; i >= 0; i--) 
+    int8_t length = strlen(str);
+
+    if (length > 6) 
     {
-        printf("%d", (num >> i) & 1);
+        printf("Cannot write string greater length than 6\n");
+        return;
+    }
+    else if (length > 5) 
+    {
+        if (str[0] == '1')
+        {
+            writeSymbol(ONE);
+            delayMicroseconds(delay * 2);
+        }
+        else
+        {
+            printf("Cannot write string greater length than 5 where str[5] != '1'\n");
+            return;
+        }
+    }
+    
+    for (int i = 0; i < length; i++)
+    {
+        binWriteSegments(i + 2, segDigits[str[length - i - 1] - 48]);
     }
-    printf("\n");
 }
 
 void testDisplay (void)
 {
-    /*for (int i = 0; i < 0b111; i++)
-    {
-        for (int j = 0; j < 0b111; j++)
-        {
-            printBinary(i);
-            printBinary(j);
-            printf("\n");
-            binWriteDisplay(i, j);
-            delayMicroseconds(100000);
-        }
-    }*/
-    writeSymbol(ANT);
-    writeSymbol(REC);
+    char str[] = "123456";
+    write(str);
+    //binWriteSegments(2, segDigits[2]);
 }
 
 void setupDisplay (void)
diff --git a/src/helpers.cpp b/src/helpers.cpp
new file mode 100644 (file)
index 0000000..f170698
--- /dev/null
@@ -0,0 +1,20 @@
+#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);
+}