16 비트 숫자 (Arduino)에서 bitset / read를 사용하는 방법

저는 Arduino 기반 Tetris 게임을 작업 중입니다. 떨어진 조각을 추적하려면 그리고 고정됩니다 나는 바이트 배열을 가지고 있습니다.

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

이것은 우물의 너비가 LED가 8 개뿐 일 때 훌륭하게 작동하지만 16 너비가 필요합니다. 16 비트 숫자에 대해 비트 단위 연산을 수행 할 수있는 방법이 있습니까? theGrid를 short로 선언하려고했지만 “내가 무엇을하든이 오류가 발생합니다.

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

바이트를 사용하는 이유는 bitread와 bitset을 사용할 수 있기 때문입니다. 따라서 L 조각이 내려와 착륙하면 다음과 같이 적절한 비트를 비트 셋으로 설정하고

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

끝낼 수 있습니다

B1000000000000000, B1110000000000000 

코멘트

  • 해당 코드에는 비트 연산이 없습니다.
  • @ IgnacioVazquez-Abrams OP를 편집했습니다.

답변

당신이 겪고있는 주요 문제는 바이너리 리터럴이 존재하지 않는다는 것입니다. 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); 

댓글

  • 감사합니다. stackoverflow 에서 비슷한 답변을 받았습니다. . 나는 이것이 효과가 있다고 생각한다 🙂

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다