guchar píše:
Možná dva kanály do jedné řídící logiky IN1 a IN2 ...
Příjde mi, že to, co popisuješ je něco, co se napojí na jeden kanál a pak něco spíná. Toho je dost, nic takového jsem vyrobit nechtěl. TO, co chci (a už se pomalu rodí) je jeden vstup, kterým bude s.bus (případně jiná séroivka?*), protože chci spínat více světýlek. V této chvíli uvažuji o 7-mi. Pak každý kanál ovládá nezávisle jedno světýlko a to tak, že hodnota kanálu určí režim blikání/svícení. Příklad.
S.bus má na každý kanál 11 bitů, tedy číslo 0-2047, pro "std" PWM 1-2 ms posílá čísla přibližně 200-1800 (přesný převod jsem zatím nenašel, resp. nikde napsané a ze nalezených zdrojových kódů jsem při letmém pohledu nic nevyčetl a moc do hloubky se mi v nich šťourat nechtělo).
Takže vezmu nějaký kanál, řekněme ch1 a řeknu, že do hodnoty 400 bude LED vypnutá, mezi 400-600 bude stále svítit, mezi 600-800 bude blikat jako automobilový blinkr, mezi 800-1000 bude blikat jako "strobe" na letadle (krátký záblesk, dlouhá pauza) a td.
ellet píše:
A invertovat přímo výstupy sw..
Myslel jsem invertor na s.bus, takže by se z ULN dostal další "posílený" výstup, tedy použít všech 8...
V tom, co píšu už mám na svítítka třídu, která se konfiguruje na potřebné blikání a je tam i fce, která řekne, že výstup je invertovaný, tedy spínání LED inverzní logikou - už jen kvůli zkoušení, protože BluePill LED se rozsvěcuje právě nulou.
A přivedl jsi mě na myšlenku, že by se spínání mohlo rozlišit na pozitivní a negativní logiku podle kanálu (od středu nahoru pozitivní, dolů negativní, jinak stejně se chovající). Což vlastně není nic jiného jak jiné nastavení toho blikání. A myšlenka možnosti nastavení různých režimů nějakým externím programem přes PC a USB - ale do toho se mi chtít určitě nebude.
"Pod pokličkou" je TO zatím tak, že je pro každé světélko (LED) je nastaven vstupní s.bus kanál a výstupní pin, všechny LED sdílejí společné nastavení, jak mají blikat na základě hodoty z s.bus kanálu. V nastavení má n sekcí, každá sekce odpovídá hodnotě rozsahu vstupního kanálu. Teoreticky lze tedy použít 2048 sekcí, prakticky bude takových 6 až až. V mém případě je seznam sekcí prostý seznam, programově lze lehce měnit.
Každá sekce má sekvenci blikání, což je reprezentováno kruhovým seznamem dvojic (stav LED, délka stavu).
Sekce (proměnná třídy) má fci setValue(), která si přečte svůj s.bus kanál a nastaví sekci, tick() podle sekvence nastaví stav LED.
(sekce 1)
pro sbus 200-400
sekvence [prázná] ---- není, co tak zhasnuto
----------------------------------
(sekce 2)
pro sbus 400-600
sekvence (sviti 1ms) --- a cyklí stále dokola, takže svítí furt
----------------------------------
(sekce 3)
pro sbus 600-800
sekvnece (svítí 300ms), (nesvítí 300ms) -- a cyklí, takže bliká
----------------------------------
(sekce 4)
pro sbus 800-1000
sekvnece (svítí 100ms), (nesvítí 100ms),(svítí 100ms), (nesvítí 1000ms) -- dva krátké záblesky ala airbus
délka sekvence není nijak omezená, takže může vyblikávat i nějaký složitější vzorek (morseovku?, sekvenci ala maják?, prostě cokoli)
Tick se volá časovačem.
Napřed jsem zkoušel na nastavení pole, ale vytvoření seznamů není o moc složitější a práce se seznamy je o parník jednodušší.

Zatím ladím. Možná příjdou nějaké změny.
---
* jiná sériovka jako vstup mě též napadla, některá rádia umí stvořit sériovkový povel, mohly by se ušetřit kanály, kdyby byly potřeba. Možná časem.