Přeskočit obsah

Barevné světlo

Zadání

Vytvořte program pro DT-Box, který rozsvítí barevné světlo (WSLed) a umožní pomocí zvoleného tlačítka měnit barvy dle přednastaveného barevného schematu. Jedním tlačítkem se barva změní na následující, druhým na předchozí.

Rozšíření

  1. Místo přepínání barvy zpět přidejte funkci ovládání jasu
  2. Zobrazte zvolenou barvu a jas na displej (‘B1.C2’ brightness = 1, color = 2)
  3. Dokážete uložit současnou barvu tak, aby zůstala zvolená i po odpojení napájení?

Evokace

Představte si situaci, kdy chcete umožnit měnit barvu osvětlení podle nálady/tématu. Například v restauraci.

  • Kde jinde by se to dalo využít?
  • Viděli jste podobné použití v praxi?
  • Jak vypadá ovládání takového zařízení? (tlačítka, nastavovací kolečka, mobilní aplikace)
  • Které parametry chceme ovládat? (barva, intenzita)
  • Jaké jsou požadavky na ovládání (intuitivnost, častost použití, cena)

Uvědomění

Jaké periferie knihovny dtbox budeme potřebovat?

Button, WSLed

Jak se reprezentuje barva v počítači?
trojice hodnot RGB … 0-255
Jaké datové reprezentace budeme potřebovat?
barevné schema
COLOR_SCHEME = [
    (100, 0, 50),
    (200, 100, 50),
    (50, 50, 50),
]
aktuální barva
current_color = 1

Jak zjistím počet prvků v seznamu?

len(COLOR_SCHEME)

Jaká bude hlavní struktura kódu?

  • konstanta pro reprezentaci barevného schématu (seznam trojic)
  • proměnná aktuální barva (index do barevného schématu)
  • obsluha tlačítek (funkce pro přechod na další/předchozí index)
  • nekonečná smyčka, která aktualizuje barvu LED dle hodnoty current_color

Jaké jsou rizikové stavy?

  • přetečení / podtečení indexu, je třeba předcházet a hodnotu indexu rotovat, pokud je třeba
  • podtečení do záporných hodnot menších, než délka slovníku nevadí, proč? Viz. záporné indexy v Pythonu.

Reflexe

Co se vám na řešení líbí/nelíbí?
Kde si dokážete představit použití vašeho řešení? (kontrola s odpověďmi u evokace)
Jak byste pozměnili projekt, aby byl lépe použitelný v praxi?
Které části implementace byly nejnáročnější?
Co byste poradili někomu, kdo se chystá vytvořit podobný projekt?