Displej - multiplex

NSWI170, 2026, Labs 05

Jáchym Bártík

Agenda

  • Demo test
    • Mezi 5. a 6. cvičením
    • Téměř jako skutečný
    • Účast je dobrovolná, ale silně doporučená

Pravidlo #5 - Zapouzdření

  • Každá třída má jasně definovaný účel
    • Ten je přístupný prostřednictvím minimálního rozhraní
  • Konkrétní implementace je skryta (private)
    • Může se kdykoli změnit
  • Rozhraní na prvním místě
    • Co třída reprezentuje?
    • Co chceme, aby uměla?
    • K čemu musí mít přístup i ostatní třídy?
    • Co se pravděpodobně nebude měnit?
  • Implementace na druhém
    • Jak nejlépe splnit dané rozhraní?

Příklad - Button

  • Tlačítko musí umět:
    • Říct, jestli je právě teď zmáčknuto
    • Být nastaveno (setup) a updatováno (loop)
    
    class Button {
    public:
        Button(int pin);
        void setup();
        void loop();
        bool isPressed();
    };
                    
  • Potřebujeme mít pin veřejný?
    • Pozor na prázdné gettery a settery
    
    class Button {
        int pin;
    
    public:
        int getPin() {
            return pin;
        }
    
        void setPin(int value) {
            pin = value;
        }
    };
                        
    
    class Button {
    public:
        const int pin;
    
        Button(int pin) : pin(pin) {}
    };
                        

Cvičení #1

  • Rozsviťte celý displej
    • Vyjděte z domácího úkolu #4
    • Odeberte třetí tlačítko
    • V každé loop zobrazte postupně všechny čtyři číslice
  • Experiment:
    1. Co se stane, když na konec loop přidáte delay(2)?
    2. Co se stane, když tímto způsobem zobrazíte číslo jenom v setup?
  • Pozorování:
    1. První ledka je výrazně jasnější.
    2. Je vidět jen jedna ledka.

Cvičení #2

  • Rozsviťte číslice na displeji tak, aby všechny svítily stejně jasně
    • V každé loop rozsviťte vždy jen jednu číslici
    • Logiku, která to řeší, oddělte od zbytku kódu
      • Ideálně do třídy, která bude sama ovládat displej
  • Co musí daná třída umět?
    • Nastavit novou hodnotu
    • Změnit, kterou číslici zobrazuje
      • Jednou v každé loop

Cvičení #3

  • Vylepšete displej
    • Nezobrazujte na začátku nuly
      • Číslo nula stále zobrazte jako 0
    • Přidejte desetinnou tečku
      • Funkce, která mění pozici tečky
      • Tečku nezobrazujte, pokud by byla úplně vpravo
    • Vše pořádně otestujte
      • Např. třetí tlačítko může měnit pozici tečky

Domácí úkol #5

  • Vytvořte stopky
    • Zobrazovaná přesnost je 0.1 s (zaokrouhlujte dolů)
      • Vnitřní přesnost je 1 ms
    • Vždy zobrazte alespoň dvě cifry - např. nulu jako 0.0
    • Tlačítka:
      1. Zapíná / vypíná měření času
      2. Zmrazuje / odmrazuje displej (čas se ale měří pořád)
      3. Resetuje hodnotu