Como usar bitset / ler em números de 16 bits (Arduino)

Estou trabalhando em um jogo de Tetris com Arduino. Para manter o controle das peças que caíram e ficar fixo, tenho uma matriz de bytes

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

Isso funciona muito bem quando o poço tem apenas 8 LEDs de largura, mas preciso que tenha 16. É existe uma maneira de realizar operações bit a bit em um número de 16 bits, como um short? Eu tentei declarar theGrid como um short, mas estou recebendo este erro não importa o que eu faça.

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

O motivo pelo qual estava usando byte é para poder usar bitread e bitset. Portanto, se uma peça L cair e pousar, posso definir os bits apropriados como este

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

e terminar com

B1000000000000000, B1110000000000000 

Comentários

  • Não há operações bit a bit nesse código.
  • @ IgnacioVazquez-Abrams Eu editei o OP

Resposta

O principal problema que você está tendo é que literais binários não existem em C ; as bibliotecas do Arduino contornam isso tendo cada valor binário de 1 “b0 a 8″ b1111_1111 definido como uma macro em cores/arduino/binary.h . A solução alternativa óbvia é usar literais octais, decimais ou hexadecimais.

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

As operações bit a bit funcionam normalmente.

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

Comentários

  • Obrigado, recebi uma resposta semelhante em stackoverflow . Acho que vai funcionar 🙂

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *