#include #include const int digits[] = {9, 10, 11, 12}; const int segments[] = {2, 8, 4, 5, 6, 7, 3}; const bool one[7] = {false, true, true, false, false, false, false}; const bool two[7] = {true, true, false, true, true, false, true}; const bool three[7] = {true, true, true, true, false, false, true}; const bool four[7] = {false, true, true, false, false, true, true}; const bool five[7] = {true, false, true, true, false, true, true}; const bool six[7] = {true, false, true, true, true, true, true}; const bool seven[7] = {true, true, true, false, false, false, false}; const bool eight[7] = {true, true, true, true, true, true, true}; const bool nine[7] = {true, true, true, true, false, true, true}; const bool zero[7] = {true, true, true, true, true, true, false}; Chrono timer; void writeDigit(char d, char val, bool dec) { const bool *segs; switch (val) { case 0: segs = zero; break; case 1: segs = one; break; case 2: segs = two; break; case 3: segs = three; break; case 4: segs = four; break; case 5: segs = five; break; case 6: segs = six; break; case 7: segs = seven; break; case 8: segs = eight; break; case 9: segs = nine; break; } for (int i = 0; i < 7; ++i) { if (segs[i]) { digitalWrite(segments[i], HIGH); } else { digitalWrite(segments[i], LOW); } } if (dec) { digitalWrite(segments[7], HIGH); } digitalWrite(digits[d], LOW); delay(1); digitalWrite(digits[d], HIGH); digitalWrite(segments[7], LOW); } void showNumber(float number) { int n = number; writeDigit(0, (n/1000U) % 10, false); writeDigit(1, (n/100U) % 10, false); writeDigit(2, (n/10U) % 10, false); writeDigit(3, n % 10, false); } void setup() { for (int i = 0; i < 4; ++i) { pinMode(digits[i], OUTPUT); digitalWrite(digits[i], HIGH); } for (int i = 0; i < 7; ++i) { pinMode(segments[i], OUTPUT); digitalWrite(segments[i], LOW); } timer.restart(); } void loop() { showNumber(timer.elapsed()/1000); }