#include "funshield.h" constexpr int digit_positions = sizeof(digit_muxpos) / sizeof(digit_muxpos[0]); void writeGlyphBitmask( byte glyph, byte pos_bitmask) { digitalWrite( latch_pin, LOW); shiftOut( data_pin, clock_pin, MSBFIRST, glyph); shiftOut( data_pin, clock_pin, MSBFIRST, pos_bitmask); digitalWrite( latch_pin, HIGH); } void writeGlyphR(byte glyph, int pos) { writeGlyphBitmask(glyph, digit_muxpos[digit_positions - pos - 1]); } void writeGlyphL(byte glyph, int pos) { writeGlyphBitmask(glyph, digit_muxpos[pos]); } void writeDigit(int n, int pos) { writeGlyphR(digits[n], pos); } void setup() { pinMode(latch_pin, OUTPUT); pinMode(data_pin, OUTPUT); pinMode(clock_pin, OUTPUT); } void loop() { // put your main code here, to run repeatedly: writeDigit(1, 0); writeDigit(2, 1); writeDigit(3, 2); writeDigit(4, 3); delay(5); //ODKOMENTUJ A VYSKUSAJ ZNOVA } ################################################################ #include "funshield.h" constexpr int digit_positions = sizeof(digit_muxpos) / sizeof(digit_muxpos[0]); void writeGlyphBitmask( byte glyph, byte pos_bitmask) { digitalWrite( latch_pin, LOW); shiftOut( data_pin, clock_pin, MSBFIRST, glyph); shiftOut( data_pin, clock_pin, MSBFIRST, pos_bitmask); digitalWrite( latch_pin, HIGH); } void writeGlyphR(byte glyph, int pos) { writeGlyphBitmask(glyph, digit_muxpos[digit_positions - pos - 1]); } void writeGlyphL(byte glyph, int pos) { writeGlyphBitmask(glyph, digit_muxpos[pos]); } void writeDigit(int n, int pos) { writeGlyphR(digits[n], pos); } enum LedState {PRESSED, RELEASED}; class ButtonPresser { public: ButtonPresser(int pin) { pin_ = pin; } bool pressedOnce(bool button_pressed) { if (button_pressed == false) { prev_state_ = RELEASED; return false; } if (prev_state_ == PRESSED && button_pressed) return false; prev_state_ = PRESSED; return true; } private: LedState prev_state_ = RELEASED; int pin_; }; int mocniny[] { 1, 10, 100, 1000 }; class Display { public: void set(int cislo) { cislo_ = cislo; } void loop() { int cislica = (cislo_ / mocniny[pozicia_]) % 10; writeDigit(cislica, pozicia_); pozicia_++; pozicia_ %= 4; } private: int cislo_; int pozicia_ = 0; }; void setup() { pinMode(latch_pin, OUTPUT); pinMode(data_pin, OUTPUT); pinMode(clock_pin, OUTPUT); } constexpr int buttons[] = { button1_pin, button2_pin}; ButtonPresser pressers[] { ButtonPresser(button1_pin), ButtonPresser(button2_pin)}; Display d; int citac = 0; void loop() { // put your main code here, to run repeatedly: if ( pressers[0].pressedOnce(!digitalRead(buttons[0]))) citac += 1; if (pressers[1].pressedOnce(!digitalRead(buttons[1]))) citac -= 1; citac = (citac + 10000) % 10000; d.set(citac); d.loop(); //delay(10); ODKOMENTUJ A VYSKUSAJ ZNOVA }