#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
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,
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)
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)