Verwendung von Bitset / Read für 16-Bit-Zahlen (Arduino)

Ich arbeite an einem Tetris-Spiel mit Arduino-Unterstützung, um die heruntergefallenen Teile im Auge zu behalten und werde fest Ich habe ein Array von Bytes

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

Dies funktioniert gut, wenn der Brunnen nur 8 LEDs breit ist, aber ich brauche, dass er 16 breit ist Es gibt eine Möglichkeit, bitweise Operationen an einer 16-Bit-Zahl durchzuführen, z. B. an einem Kurzschluss. Ich habe versucht, das Gitter nur als Kurzschluss zu deklarieren, aber ich erhalte diesen Fehler, egal was ich tue.

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

Der Grund, warum ich Byte verwendet habe, ist, dass ich Bitread und Bitset verwenden konnte. Wenn also ein L-Stück herunterkommt und landet, kann ich die entsprechenden Bits wie diese setzen

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

und am Ende

B1000000000000000, B1110000000000000 

Kommentare

  • Dieser Code enthält keine bitweisen Operationen.
  • @ IgnacioVazquez-Abrams Ich habe das OP bearbeitet

Antwort

Das Hauptproblem, das Sie haben, ist, dass binäre Literale nicht existieren in C; Die Arduino-Bibliotheken umgehen dies, indem sie jeden einzelnen Binärwert von 1 haben „b0 bis 8″ b1111_1111 definiert als Makro in cores/arduino/binary.h . Die naheliegende Problemumgehung besteht darin, stattdessen oktale, dezimale oder hexadezimale Literale zu verwenden.

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

Bitweise Operationen funktionieren wie gewohnt.

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

Kommentare

  • Danke, ich habe eine ähnliche Antwort auf stackoverflow erhalten . Ich denke das wird funktionieren 🙂

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.