]> git.friedersdorff.com Git - max/timer_test.git/blob - timer_test.ino
Write quick test script for testing clock accuracy
[max/timer_test.git] / timer_test.ino
1 #include <LightChrono.h>
2 #include <Chrono.h>
3
4 const int digits[] = {9, 10, 11, 12};
5 const int segments[] = {2, 8, 4, 5, 6, 7, 3};
6
7 const bool one[7] = {false, true, true, false, false, false, false};
8 const bool two[7] = {true, true, false, true, true, false, true};
9 const bool three[7] = {true, true, true, true, false, false, true};
10 const bool four[7] = {false, true, true, false, false, true, true};
11 const bool five[7] = {true, false, true, true, false, true, true};
12 const bool six[7] = {true, false, true, true, true, true, true};
13 const bool seven[7] = {true, true, true, false, false, false, false};
14 const bool eight[7] = {true, true, true, true, true, true, true};
15 const bool nine[7] = {true, true, true, true, false, true, true};
16 const bool zero[7] = {true, true, true, true, true, true, false};
17
18 Chrono timer;
19
20 void writeDigit(char d, char val, bool dec) {
21     const bool *segs;
22     switch (val) {
23         case 0:
24             segs = zero;
25             break;
26         case 1:
27             segs = one;
28             break;
29         case 2:
30             segs = two;
31             break;
32         case 3:
33             segs = three;
34             break;
35         case 4:
36             segs = four;
37             break;
38         case 5:
39             segs = five;
40             break;
41         case 6:
42             segs = six;
43             break;
44         case 7:
45             segs = seven;
46             break;
47         case 8:
48             segs = eight;
49             break;
50         case 9:
51             segs = nine;
52             break;
53     }
54     for (int i = 0; i < 7; ++i) {
55         if (segs[i]) {
56             digitalWrite(segments[i], HIGH);
57         } else {
58             digitalWrite(segments[i], LOW);
59         }
60     }
61     if (dec) {
62       digitalWrite(segments[7], HIGH);
63     }
64     digitalWrite(digits[d], LOW);
65     delay(1);
66     digitalWrite(digits[d], HIGH);
67     digitalWrite(segments[7], LOW);
68 }
69
70 void showNumber(float number) {
71     int n = number;
72     writeDigit(0, (n/1000U) % 10, false);
73     writeDigit(1, (n/100U) % 10, false);
74     writeDigit(2, (n/10U) % 10, false);
75     writeDigit(3, n % 10, false);
76 }
77
78 void setup() {
79     for (int i = 0; i < 4; ++i) {
80         pinMode(digits[i], OUTPUT);
81         digitalWrite(digits[i], HIGH);
82     }
83     for (int i = 0; i < 7; ++i) {
84         pinMode(segments[i], OUTPUT);
85         digitalWrite(segments[i], LOW);
86     }
87     timer.restart();
88 }
89
90 void loop() {
91   showNumber(timer.elapsed()/1000);
92 }