Yossarian, nie jestem kompetentną osobą do pomocy, bo nigdy nie używałem Arduino. Odnośnie DSC-Bios, napisałem swój program w C++ na peceta, który komunikuje się z DSC-Bios po TCP i UDP. Mój program przerabia odebrane w ten sposób dane i rozkazy, na format potrzebny do mojego kokpitu – i nie ma to nic wspólnego z Arduino. Mogę się wiec mylić, ale o ile dobrze rozumiem, to w Twoim przykładnie:
DcsBios::LED masterCaution(0x1012, 0x0800, 13);
wartość 13 to deklaracja numeru pinu przypisanego do bitu 0x0800 w adresie 0x1012. Nie możesz go więc zanegować w taki sposób:
DcsBios::LED masterCaution(0x1012, 0x0800, !13);
DcsBios::LED masterCaution(0x1012, 0x0800, (13));
bo niezależnie co i jak do niego będziesz przypisywał, dalej to będzie pin 13. Powinieneś wstawić negację wewnątrz funkcji DcsBios::LED masterCaution(). Jeżeli jesteś w stanie wyciągnąć z programu kod tej funkcji, to powinno być łatwo, mam nadzieję, podpowiedzieć Ci jak ją zmodyfikować.
A tak ogólnie, to w programowaniu zazwyczaj znak „!” oznacza zaprzeczenie logiczne (stosowane w warunkach logicznych), na przykład :
„!fałsz = prawda”.
Do negacji bitów (wartości) stosuje się znak „~”, na przykład:
„~0x01 = 0xFE” – czyli zmieni nam to wartość wszystkich bitów w wartości 0x01, odpowiednio z „0” na „1” lub z „1” na „0”.
Modyfikując wnętrze DcsBios::LED masterCaution(), musisz więc użyć „!” jeżeli będziesz zmieniał warunek logiczny, lub „~” jeżeli będziesz zmieniał wartość zmiennej.