16ビット数でビットセット/読み取りを使用する方法(Arduino)

私はArduinoを搭載したテトリスゲームに取り組んでいます。落ちた部分を追跡するため固定されますバイトの配列があります

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

これは、ウェルの幅が8 LEDしかない場合にうまく機能しますが、16幅にする必要があります。ショートのように16ビット数でビット単位の操作を実行する方法はありますか?グリッドをショートとして宣言しようとしましたが、「何をしてもこのエラーが発生します。

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

バイトを使用した理由は、ビット読み取りとビットセットを使用できるようにするためです。したがって、Lピースがダウンして着地した場合、次のように適切なビットをビットセットできます

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

最終的に

B1000000000000000, B1110000000000000 

コメント

  • そのコードにはビット演算はありません。
  • @ IgnacioVazquez-AbramsOPを編集しました

回答

あなたが抱えている主な問題は、バイナリリテラルが存在しないことです。 Cで; Arduinoライブラリは、 1からすべての単一のバイナリ値を使用することでこれを回避します。 「b0 から8」b1111_1111は、 cores/arduino/binary.h でマクロとして定義されています。明らかな回避策は、代わりに8進数、10進数、または16進数のリテラルを使用することです。

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

ビット演算は通常どおり機能します。

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

コメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です