Cómo usar bitset / read en números de 16 bits (Arduino)

Estoy trabajando en un juego de Tetris con Arduino. Para realizar un seguimiento de las piezas que se han caído y se fija Tengo una matriz de bytes

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

Esto funciona muy bien cuando el pozo tiene solo 8 LED de ancho, pero necesito que tenga 16 de ancho. ¿Hay alguna manera de realizar operaciones bit a bit en un número de 16 bits, como un short? Intenté declarar theGrid como un short, pero «obtengo este error sin importar lo que haga.

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

La razón por la que estaba usando byte es para poder usar bitread y bitset. Entonces, si una pieza L baja y aterriza, puedo bitset los bits apropiados como este

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

y terminar con

B1000000000000000, B1110000000000000 

Comentarios

  • No hay operaciones bit a bit en ese código.
  • @ IgnacioVazquez-Abrams Edité el OP

Respuesta

El principal problema que tiene es que literales binarios no existen en C ; las bibliotecas de Arduino evitan esto al tener cada valor binario de 1 «b0 a 8″ b1111_1111 definido como una macro en cores/arduino/binary.h . La solución obvia es utilizar literales octales, decimales o hexadecimales.

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

Las operaciones bit a bit funcionan normalmente.

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

Comentarios

  • Gracias, obtuve una respuesta similar en stackoverflow . Creo que esto funcionará 🙂

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *