Hvordan bruke bitsett / lese på 16-biters tall (Arduino)

Jeg jobber med et Arduino-drevet Tetris-spill. Å holde styr på brikkene som har falt og bli fikset Jeg har en rekke byte

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

Dette fungerer bra når brønnen bare er 8 lysdioder bred, men jeg trenger at den er 16 bred. det er en måte å utføre bitvise operasjoner på et 16-biters nummer, som en kort? Jeg prøvde bare å erklære theGrid som en kort, men jeg får denne feilen uansett hva jeg gjør.

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

Årsaken til at jeg brukte byte er at jeg kunne bruke bitread og bitset. Så hvis et L-stykke kommer ned og lander, kan jeg bitsett de aktuelle bitene som dette

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

og ende opp med

B1000000000000000, B1110000000000000 

Kommentarer

  • Det er ingen bitvise operasjoner i den koden.
  • @ IgnacioVazquez-Abrams Jeg redigerte OP

Svar

Hovedproblemet du har er at binære bokstaver ikke eksisterer i C ; Arduino-bibliotekene kommer rundt dette ved å ha hver eneste binære verdi fra 1 «b0 til 8″ b1111_1111 definert som en makro i cores/arduino/binary.h . Den åpenbare løsningen er å bruke oktale, desimal eller heksadesimale bokstaver i stedet.

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

Bitvis operasjoner fungerer som normalt.

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

Kommentarer

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

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *