Hur man använder bitset / läser på 16-bitars nummer (Arduino)

Jag jobbar på ett Arduino-driven Tetris-spel. Att hålla reda på de bitar som har fallit och fixas har jag en rad byte

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

Detta fungerar bra när brunnen bara är 8 lysdioder bred, men jag behöver den vara 16 bred. finns det ett sätt att utföra bitvisa operationer på ett 16-bitars nummer, som en kort? Jag försökte bara förklara theGrid som en kort, men jag får det här felet oavsett vad jag gör.

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

Anledningen till att jag använde byte är att jag kunde använda bitread och bitset. Så om en L-bit kommer ner och landar kan jag bitset lämpliga bitar så här

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

och sluta med

B1000000000000000, B1110000000000000 

Kommentarer

  • Det finns inga bitvisa operationer i den koden.
  • @ IgnacioVazquez-Abrams Jag redigerade OP

Svar

Huvudproblemet du har är att binära bokstäver inte finns i C ; Arduino-biblioteken kringgår detta genom att ha varje enskilt binärt värde från 1 ”b0 till 8″ b1111_1111 definierat som ett makro i cores/arduino/binary.h . Den uppenbara lösningen är att använda oktala, decimal- eller hexadecimala bokstäver istället.

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

Bitvisa funktioner fungerar som vanligt.

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

Kommentarer

  • Tack, jag fick ett liknande svar på stackoverflow . Jag tror att det kommer att fungera 🙂

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *