mettre deux séries de bit dans une seule variable

Bonjour a tous,

Je m'arrache les cheveux pour essayer de re-transmettre un code en 433mhz pour mes interrupteurs Dio.
(pour reproduire mes interrupteurs depuis Jeedom)

En fait que j’écoute ce qui est émis, avec la librairie NewRemoteSwitch, j'arrive a obtenir cette sortie:

adress: 23513084 groupBit: 0 switchType: 1 unit: 0

Mais ce que je doit emettre c'est

1011001101100011111111100 0 1 0000 (unit est sur 4 bit)

Je pensais pouvoir faire ca:

      BoutonID = address;
      BoutonID += groupBit;
      BoutonID += switchType;
      BoutonID += unit;

Mais le résultat n'est pas bon !
En fait ça m'a juste ajouté un 1 (le 1 du switchType)!

le résultat est 1011001101100011111111101 (23513085) Alors que je voudrais qu'il devienne 1011001101100011111111100010000 (1504837392)

Vous sauriez comment je peut réaliser ca ?

merci de votre aide

Un entier non signé sur 32 bits pour stocker le résultat (uint32_t) et vous utilisez les opérateurs binaires (& |) et le décalage (<< >>) de bits (bitshift en anglais)

Pour noter une constante en binaire vous pouvez écrire cela avec 0b devant le nombre en binaire, par exemple 0b1100111100

Cf Bitwise Operators

Si tu n'es pas à l'aise avec les opérateurs binaires, tu peux aussi faire des multiplications et des additions.

Ajouter un 0 à la fin d'un nombre binaire revient à le multiplier par 2. Ajouter un 1 revient à multiplier par 2 et ajouter 1

      uint32_t BoutonID;
      BoutonID = address;
      BoutonID *= 2;
      if (groupBit) BoutonID += 1;
      BoutonID *= 2;
      if (switchType) BoutonID += 1;
      BoutonID *= 16;
      BoutonID += unit;

Merci à tous les deux !

J-M-L je n'ai pas compris ta réponse, j'ai oublié de préciser que je suis vraiment un néophyte, mais je compte bien améliorer mes lacunes e tun jour je comprendrais ! :stuck_out_tongue:

Merci lespt, je vais tester ça de suite !!

genial, ca marche!

encore merci, et le if sur une ligne je le découvre, c'est top!

je pense que des developpeurs rigolerai en voyant mon code :smiley:

mais tant qu'l fait le job, c'est ce qui compte!

merci!

hugodu21:
J-M-L je n'ai pas compris ta réponse, j'ai oublié de préciser que je suis vraiment un néophyte, mais je compte bien améliorer mes lacunes e tun jour je comprendrais ! :stuck_out_tongue:

Faut lire le lien :wink: