Kuinka käyttää bitset / lukea 16-bittisillä numeroilla (Arduino)

Työskentelen Arduino-moottoroidulla Tetris-pelillä. Seuraan pudonneita kappaleita ja kiinteytyä Minulla on joukko tavuja

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

Tämä toimii hyvin, kun kaivon leveys on vain 8 lediä, mutta tarvitsen sen olevan 16 leveää. onko tapaa suorittaa bittioperaatioita 16-bittisellä numerolla, kuten lyhyt? Yritin vain julistaa TheGrid lyhyeksi, mutta saan tämän virheen riippumatta siitä, mitä teen.

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

Syy, miksi käytin tavua, on, että voisin käyttää bitreadea ja bitsetia. Joten jos L-kappale putoaa alas ja laskeutuu, voin bitset tällaiset sopivat bitit

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

ja päädyin kohtaan

B1000000000000000, B1110000000000000 

kommentit

  • Koodissa ei ole bittioperaatioita.
  • @ IgnacioVazquez-Abrams Muokkasin OP-ohjelmaa

vastaus

Suurin ongelma, joka sinulla on, on se, että binaarisia literaaleja ei ole olemassa C : ssä; Arduinon kirjastot kiertävät tämän siten, että niillä on jokainen yksittäinen binääri-arvo osoitteesta 1 ”b0 – 8″ b1111_1111 määritetty makroksi ryhmässä cores/arduino/binary.h . On selvää, että kiertotapaa on käyttää sen sijaan oktaali-, desimaali- tai heksadesimaalilitraaleja.

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

Bittikohtaiset toiminnot toimivat normaalisti. ”>

kommentit

  • kiitos, sain samanlaisen vastauksen pinoverflowiin . Luulen, että tämä toimii 🙂

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *