Jak používat bitset / read na 16bitových číslech (Arduino)

Pracuji na hře Tetris využívající Arduino. Abych sledoval padlé kousky a stanou se opravenými Mám řadu bajtů

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

Funguje to skvěle, když je studna široká pouze 8 LED, ale potřebuji, aby byla široká 16. existuje způsob, jak provádět bitové operace na 16bitovém čísle, jako je short? Zkusil jsem jen deklarovat theGrid jako short, ale dostávám tuto chybu bez ohledu na to, co dělám.

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

Důvod, proč jsem používal byte, je ten, že jsem mohl použít bitread a bitset. Takže pokud kus L spadne a přistane, mohu bity nastavit příslušné bity, jako je tento,

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

a skončit s

B1000000000000000, B1110000000000000 

Komentáře

  • V tomto kódu nejsou bitové operace.
  • @ IgnacioVazquez-Abrams Upravil jsem OP

Odpověď

Hlavní problém, který máte, je, že binární literály neexistují v C ; knihovny Arduina to obcházejí tím, že mají každou binární hodnotu z 1 „b0 až 8“ b1111_1111 definované jako makro v cores/arduino/binary.h . Zřejmým řešením je místo toho použít osmičkové, desítkové nebo šestnáctkové literály.

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

Bitové operace fungují jako obvykle.

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

Komentáře

  • Díky, podobnou odpověď jsem dostal na stackoverflow . Myslím, že to bude fungovat 🙂

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *