Comment utiliser bitset / read sur des nombres 16 bits (Arduino)

Je travaille sur un jeu Tetris alimenté par Arduino. Pour garder une trace des pièces qui sont tombées et devenir fixe Jai un tableau doctets

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

Cela fonctionne très bien quand le puits na que 8 LED de large, mais jai besoin quil soit de 16 de large. existe-t-il un moyen deffectuer des opérations au niveau du bit sur un nombre de 16 bits, comme un court? Jai essayé de déclarer theGrid comme un court, mais jobtiens cette erreur quoi que je fasse.

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

La raison pour laquelle jutilisais byte est que je pourrais utiliser bitread et bitset. Donc, si un morceau L descend et atterrit, je peux mettre en bits les bits appropriés comme ceci

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

et finir par

B1000000000000000, B1110000000000000 

Commentaires

  • Il ny a pas dopérations au niveau du bit dans ce code.
  • @ IgnacioVazquez-Abrams Jai édité lOP

Réponse

Le principal problème que vous rencontrez est que les littéraux binaires nexistent pas en C ; les bibliothèques Arduino contournent ce problème en ayant chaque valeur binaire de 1 « b0 à 8″ b1111_1111 défini comme une macro dans cores/arduino/binary.h . La solution évidente consiste à utiliser à la place des littéraux octaux, décimaux ou hexadécimaux.

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

Les opérations au niveau du bit fonctionnent normalement.

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

Commentaires

  • Merci, jai obtenu une réponse similaire sur stackoverflow . Je pense que cela fonctionnera 🙂

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *