From 96e2480a5a4e627ca3836b55baf2302aff5cf05c Mon Sep 17 00:00:00 2001 From: Noah Tomkins Date: Fri, 17 Jul 2026 17:19:40 -0400 Subject: [PATCH] Display Write Text --- src/clock.cpp | 1 - src/clock.h | 0 src/display.c | 89 ++++++++++++++++++++++++++++++------------------- src/helpers.cpp | 20 +++++++++++ 4 files changed, 75 insertions(+), 35 deletions(-) delete mode 100644 src/clock.h create mode 100644 src/helpers.cpp diff --git a/src/clock.cpp b/src/clock.cpp index 8655cf9..c67f737 100644 --- a/src/clock.cpp +++ b/src/clock.cpp @@ -1,4 +1,3 @@ -#include "clock.h" #include #include "display.c" diff --git a/src/clock.h b/src/clock.h deleted file mode 100644 index e69de29..0000000 diff --git a/src/display.c b/src/display.c index 6d9adc0..8346918 100644 --- a/src/display.c +++ b/src/display.c @@ -1,17 +1,19 @@ #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 [] = { -// 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 index 0000000..f170698 --- /dev/null +++ b/src/helpers.cpp @@ -0,0 +1,20 @@ +#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); +} -- 2.25.1