Cum se folosește bitset / read on 16bit bits (Arduino)

Lucrez la un joc Tetris alimentat de Arduino. Pentru a urmări piesele care au căzut și devin fix Am o serie de octeți

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

Acest lucru funcționează excelent atunci când fântâna are o lățime de doar 8 LED-uri, dar am nevoie să aibă o lățime de 16 Există o modalitate de a efectua operații bitbit pe un număr de 16 biți, cum ar fi un scurt? Am încercat doar să declar Grila ca scurt, dar primesc această eroare indiferent de ceea ce fac.

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

Motivul pentru care foloseam octeți este pentru a putea folosi bitread și bitset. Deci, dacă o piesă L coboară și aterizează, pot seta biții corespunzători ca aceștia

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

și pot termina cu

B1000000000000000, B1110000000000000 

Comentarii

  • Nu există operațiuni bit în acest cod.
  • @ IgnacioVazquez-Abrams Am editat OP

Răspuns

Principala problemă pe care o aveți este că literele binare nu există în C ; bibliotecile Arduino rezolvă acest lucru având fiecare valoare binară individuală de la 1 „b0 până la 8” b1111_1111 definit ca o macro în cores/arduino/binary.h . Soluția evidentă este de a utiliza în schimb litere octale, zecimale sau hexazecimale.

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

Operațiunile pe biți funcționează normal.

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

Comentarii

  • Mulțumesc, am primit un răspuns similar pe stackoverflow . Cred că acest lucru va funcționa 🙂

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *