Mercurial > voter
changeset 1:1928b20a7094
Basic counter and display code
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Mon, 24 Aug 2015 23:33:02 +0200 |
| parents | 1c847afac1cd |
| children | 13a554ba5332 |
| files | voter.ino |
| diffstat | 1 files changed, 87 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voter.ino Mon Aug 24 23:33:02 2015 +0200 @@ -0,0 +1,87 @@ +const int GND_PINS[] = {9, 11, 12, A1}; +const int VCC_PINS[] = {A0, 10, 7, 5, 4, 13, 8, 6}; +const unsigned char DIGITS[] = { + 0b00111111, + 0b00000110, + 0b01011011, + 0b01001111, + 0b01100110, + 0b01101101, + 0b01111101, + 0b00000111, + 0b01111111, + 0b01101111, +}; +const unsigned char SYMBOLS[] = { + 0b01011111, + 0b01111100, + 0b01011000, +}; +const int BUTTON_PINS[] = {2, 3, A2}; + + +int counts[] = {0, 0, 0}; + + +void show7seg(int number, int symbol) { + unsigned char digit; + div_t result; + + for (int d = 0; d < 3; ++d) { + result = div(number, 10); + digit = DIGITS[result.rem % 10]; + number = result.quot; + for (int s = 0; s < 8; ++s) { + digitalWrite(VCC_PINS[s], digit & (1 << s)); + } + pinMode(GND_PINS[d], OUTPUT); + digitalWrite(GND_PINS[d], LOW); + delay(2); + pinMode(GND_PINS[d], INPUT); + } + for (int s = 0; s < 8; ++s) { + digitalWrite(VCC_PINS[s], SYMBOLS[symbol] & (1 << s)); + } + pinMode(GND_PINS[3], OUTPUT); + digitalWrite(GND_PINS[3], LOW); + delay(2); + pinMode(GND_PINS[3], INPUT); +} + + +void handle_buttons() { + static long int last = 0; + long int now = millis(); + + if (now - last < 300) { + // Debouncing. + return; + } + last = now; + + for (int b = 0; b < 3; ++b) { + if (!digitalRead(BUTTON_PINS[b])) { + counts[b] += 1; + } + } +} + + +void setup() { + for (int s = 0; s < 8; ++s) { + pinMode(VCC_PINS[s], OUTPUT); + } + for (int d = 0; d < 4; ++d) { + pinMode(GND_PINS[d], INPUT); + } + for (int b = 0; b < 3; ++b) { + pinMode(BUTTON_PINS[b], INPUT_PULLUP); + } +} + + +void loop() { + int counter = (millis() / 2000) % 3; + show7seg(counts[counter], counter); + handle_buttons(); +}
