A bitset használata / olvasás 16 bites számokon (Arduino)

Egy Arduino által működtetett Tetris játékon dolgozom. Az elesett darabok nyomon követése és rögzülni fogok egy sor bájttal

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

Ez nagyszerűen működik, ha a kút csak 8 LED széles, de szükségem van rá, hogy 16 széles legyen. van rá mód, hogy bitenként műveleteket hajtsunk végre egy 16 bites számon, például röviden? Megpróbáltam a TheGrid-et rövidnek nyilvánítani, de ezt a hibát bármit is csinálom.

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

A bájt használatának oka az, hogy tudtam használni a bitreadot és a bitset. Tehát, ha egy L darab lejön és leszáll, akkor a megfelelő biteket meg tudom biketetni, mint ez

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

és a végén

B1000000000000000, B1110000000000000 

Megjegyzések

  • Ebben a kódban nincsenek bitenkénti műveletek.
  • @ IgnacioVazquez-Abrams Szerkesztettem az OP-t

Válasz

A fő probléma, hogy bináris literálok nem léteznek a C ben; az Arduino könyvtárak ezt úgy kerülik meg, hogy minden bináris érték a 1-ből “b0 – 8″ b1111_1111 makróként definiálva a cores/arduino/binary.h fájlban. A kézenfekvő megoldás az oktális, tizedes vagy hexadecimális literálok használata.

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

A bitenkénti műveletek a szokásos módon működnek.

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

Megjegyzések

  • Köszönöm, hasonló választ kaptam a stackoverflow -ra . Szerintem ez működni fog 🙂

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük