Jak korzystać z zestawu bitów / czytać na liczbach 16-bitowych (Arduino)

Pracuję nad grą Tetris opartą na Arduino. Aby śledzić upadłe elementy i zostanie naprawiony Mam tablicę bajtów

byte theGrid[] = { B00000000, B00000000, B00000000, B00000000, B00000000, ... 

Działa to świetnie, gdy studnia ma tylko 8 diod LED szerokości, ale potrzebuję 16. istnieje sposób wykonywania operacji bitowych na 16-bitowych liczbach, takich jak short? Próbowałem po prostu zadeklarować theGrid jako krótki, ale otrzymuję ten błąd bez względu na to, co zrobię.

tetris:62: error: "B0000000000000000" was not declared in this scope 

Powodem, dla którego używałem bajtu, jest to, że mogłem używać bitread i bitset. Więc jeśli element L opadnie i wyląduje, mogę ustawić odpowiednie bity w ten sposób

bitSet(theGrid[pixelY], 15-pixelX); 

i otrzymać

B1000000000000000, B1110000000000000 

Komentarze

  • W tym kodzie nie ma operacji bitowych.
  • @ IgnacioVazquez-Abrams Edytowałem OP

Odpowiedź

Głównym problemem, jaki masz, jest to, że literały binarne nie istnieją w C ; biblioteki Arduino omijają ten problem, mając każdą pojedynczą wartość binarną z 1 „b0 do 8” b1111_1111 zdefiniowane jako makro w cores/arduino/binary.h . Oczywistym obejściem jest użycie zamiast tego literałów ósemkowych, dziesiętnych lub szesnastkowych.

unsigned short theGrid[] = { 00, 0, 0x0, ... }; 

Operacje bitowe działają normalnie.

theGrid[pixelY] |= _BV(15 - pixelX); 

Komentarze

  • Dzięki, mam podobną odpowiedź na stackoverflow . Myślę, że to zadziała 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *