Sådan bruges bitset / læsning på 16bit-numre (Arduino)

Jeg arbejder på et Arduino-drevet Tetris-spil. At holde styr på de brikker, der er faldet og bliver fikset Jeg har en række bytes

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

Dette fungerer godt, når brønden kun er 8 lysdioder bred, men jeg har brug for at være 16 bred. der er en måde at udføre bitvise operationer på et 16 bit nummer, som et kort? Jeg forsøgte bare at erklære theGrid som en kort, men jeg får denne fejl, uanset hvad jeg gør.

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

Årsagen til, at jeg brugte byte, var, at jeg kunne bruge bitread og bitset. Så hvis et L-stykke kommer ned og lander, kan jeg bitsæt de relevante bits som dette

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

og ende med

B1000000000000000, B1110000000000000 

Kommentarer

  • Der er ingen bitvise operationer i den kode.
  • @ IgnacioVazquez-Abrams Jeg redigerede OP

Svar

Det største problem, du har, er, at binære bogstaver ikke findes i C ; Arduino-bibliotekerne omgår dette ved at have hver eneste binære værdi fra 1 “b0 til 8″ b1111_1111 defineret som en makro i cores/arduino/binary.h . Den åbenlyse løsning er at bruge oktale, decimal- eller hexadecimale bogstaver i stedet.

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

Bitvise handlinger fungerer som normalt.

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

Kommentarer

  • Tak, jeg fik et lignende svar på stackoverflow . Jeg tror, dette vil fungere 🙂

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *