Come usare il set di bit / leggere i numeri a 16 bit (Arduino)

Sto lavorando a un gioco Tetris con tecnologia Arduino. Per tenere traccia dei pezzi caduti e diventare fisso ho un array di byte

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

Funziona alla grande quando il pozzetto è largo solo 8 LED, ma ho bisogno che sia largo 16. È cè un modo per eseguire operazioni bit per bit su un numero a 16 bit, come uno short? Ho provato a dichiarare theGrid come short, ma ricevo questo errore indipendentemente da quello che faccio.

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

Il motivo per cui stavo usando byte è che potevo usare bitread e bitset. Quindi, se un pezzo L scende e atterra, posso impostare i bit appropriati in questo modo

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

e finire con

B1000000000000000, B1110000000000000 

Commenti

  • Non ci sono operazioni bit per bit in quel codice.
  • @ IgnacioVazquez-Abrams Ho modificato lOP

Risposta

Il problema principale che stai riscontrando è che i letterali binari non esistono ” in C ; le librerie Arduino aggirano questo problema avendo ogni singolo valore binario da 1 “b0 a 8″ b1111_1111 definita come macro in cores/arduino/binary.h . La soluzione ovvia consiste nellusare invece letterali ottali, decimali o esadecimali.

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

Le operazioni bit per bit funzionano normalmente.

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

Commenti

  • Grazie, ho ricevuto una risposta simile su stackoverflow . Penso che funzionerà 🙂

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *