panove, takovej problem. seriova komunikace, data chodi jen jednim smerem, jako vstup.
mejme pole 16B, prvni 2B nepotrebuju /aktualne/, takze zustava 14B, to jest 7 dvojic bytu.
dvojici bytu na vstupu /zjednodusene/ mam takle:
1st byte je v promene prvniByte a
2nd byte je v promene druhyByte.
vystupem ma byt prvniINT a druhyINT
problemu jsem porozumel takto:
na prvniINT potrebuju levych 5bitu z prvniByte /vznikne mi 5bit velky prvniINT/
na druhyINT potrebuju posledni 3bity z prvniByte a k tomu cely druhyByte /vznikne 11bit velky druhyINT.
znova #1: prvniINT je v levych 5bitech prvniho bytu, druhyINT je ve zbyvajich 3bitech /prvniByte/ a k tomu cely druhyByte.
znova #2: 2B = 16b, v levych 5b je jeden prvniINT, ze zbyvajicich 11b je druhyINT
znova #3: levych 5bitu mi da kombinaci 2^5 = 32 /prvniINT/, zbyvajicih 11b mi da kombinaci 2^11 = 2048 /druhyINT/
delam to takto a funguje to:
prvniINT = ( prvniByte & 0b01111000) >> 3; //levych 5bitu pouziju /vlastne 4/ a zbavim se pravych 3bitu, mam 5b
druhyINT = ( ((prvniByte & 0b00000111) << 8 ) | druhyByte); //zlikvidovane 3bity dam dopredu a za neho mrsknu druhyByte, mam 11b
druhyINT = 988 + (druhyINT >> 1); //nejak zaokrouhluji ci co
bezi to na ESP i v pythonu na raspberry.
a ted potrebuju z dvojice prvniINT a druhyINT zpatky udelat dvojici prvniByte a druhyByte
jedna se mi tohle:
https://www.spektrumrc.com/on/demandware.static/-/Sites-horizon-master/default/dwb89fec2c/Manuals/SPM%20Remote%20Receiver%20Interfacing-Manual-EN.pdfpotrebuji seriova data rozlustit na inty /to mam/, inty zmenit /to taky zvladnu, druhyINT + nejaky_cislo/, zakodovat inty zpet do dvou bytes /to neumim/ a poslat po jinym seriaku dal /to zvladnu/
potreboval bych vedet jak ty 3 rovnicky obratit stylem:
prvniByte = vezmi z prvniINT 5 bitu a posun o 3 doleva, zbyvaji 3 bity vezmi z zacatku druhyINT
druhyByte = vezmi spodnich 8 bitu z druhyINT
kdyby se nad tim nekdo zamyslel budu rad, dekuju
snad jsem to popsal srozumitelne