Bitset / read gebruiken op 16-bits getallen (Arduino)

Ik werk aan een door Arduino aangedreven Tetris-spel. Om de gevallen bij te houden en word gerepareerd Ik heb een array van bytes

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

Dit werkt prima als de put slechts 8 LEDs breed is, maar ik moet 16 breed zijn. Is is er een manier om bitsgewijze bewerkingen uit te voeren op een 16-bits getal, zoals een short? Ik heb geprobeerd theGrid als een short te declareren, maar ik krijg deze foutmelding, wat ik ook doe.

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

De reden dat ik byte gebruikte, is dat ik bitread en bitset kon gebruiken. Dus als een L-stuk naar beneden komt en landt, kan ik de juiste bits als volgt instellen

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

en eindigen met

B1000000000000000, B1110000000000000 

Reacties

  • Er zijn geen bitsgewijze bewerkingen in die code.
  • @ IgnacioVazquez-Abrams Ik heb het OP bewerkt

Antwoord

Het grootste probleem dat u ondervindt, is dat binaire literalen niet bestaan in C ; de Arduino-bibliotheken omzeilen dit door elke afzonderlijke binaire waarde van 1 te hebben “b0 tot 8″ b1111_1111 gedefinieerd als een macro in cores/arduino/binary.h . De voor de hand liggende oplossing is om in plaats daarvan octale, decimale of hexadecimale literalen te gebruiken.

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

Bitsgewijze bewerkingen werken normaal.

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

Reacties

  • Bedankt, ik kreeg een soortgelijk antwoord op stackoverflow . Ik denk dat dit zal werken 🙂

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *