Balance connectée pour ruche

Salut Denis, J’y serai mercredi soir. je suis passé à la production de masse
:wink:

je recherche de l’aide pour la mise en forme de mes données dans mon programme arduino pour l’exploitation des résultats. Dès que j’ai des températures négative ça me renvoit n’importe quoi.
Dans mon programme la mesure est en Float
float test_poids1 = balance1.get_units(10);

Puis transformé en unint16_T en le multipliant par 100
uint16_t poids1 = test_poids1 * 100;

puis transformé en en deux unint8_t pour l’envoie dans une capsule au format lpp Cayenne (8bytes)
appData[2] = (uint8_t)(poids1 >> 8);
appData[3] = (uint8_t)poids1;

ensuite c’est bien décodé par l’application lpp cayenne (bonne prise en compte des negatifs.
mais quant je le décode pour l’application google forms/sheet (excel de google) les nombre négatifs sont mal interprété : (ci joint le module de décodage)
decoded.poids1_ = (appData[2] << 8 | (AppData[3]))/100;

Help

uint16_t est un ‹ unsigned int › sur 16 bits, qui va de 0 à 65,535 ((2^16) - 1). Changes le simplement en int, un entier signé sur 16 bits, qui va donc de -32,768 à 32,767, ça devrait résoudre ton problème.
int - Arduino Reference

1 « J'aime »

Merci Manon, je vais essayer ça.
J’ai une question que turlupine quand même, lorsque j’envoie les données en uint16_t transformé en deux morceaux uin8_t, elles devrait effectivement perdre leur signe. Et pourtant l’intégration par LLP Cayenne arrive à m’interpreter la valeur négative. ce que l’intégration Google (en faisant le recollage des 2 morceaux : decoded.poids1_ = (appData[2] << 8 | (AppData[3]))/100;) n’arrive pas à faire(ca me renvoie des valeurs genre « 6553.5 »). Tu en penses quoi ?

Je ne connais pas LPP Cayenne, mais je pense qu’il transmet les données sans se poser trop de questions. Comment sais-tu qu’il interprête la valeur négative ?

Et pour la valeur de Google, c’est clairement un int lu comme un uint.
Exemple:
1234 s’écrit en binaire 0b10011010010. Sur 2 octets, ça fait 00000100 11010010.
Pour un int signé, on utilise le premier bit comme bit de signe : -1234 s’écrit 10000100 11010010.
Mais 0b1000010011010010 interprété comme un int non signé donne 34002.
(Convertisseur décimal, hexadécimal, binaire si tu veux tester)
[Edit : j’ai un doute, il y a peut être des histoires de changer tous les 1 en 0 et tous les 0 en 1 lors qu’on passe en négatif pour faciliter certaines opérations… Mais voilà, l’idée est qu’un nombre négatif peut être lu comme un nombre non signé avec des résultats très différents]

decoded.poids1_ vient d’où ? Quel est son type ? C’est peut être sur ce type que s’appuie GSheet.

Pour info: oui, il y a bien une histoire de changer les 1 en 0 et 0 en 1. La plupart des langages (dont notamment le C++, pour arduino) et des architectures processeur utilise ce qu’on appelle le complément à 2 pour la représentation des négatifs. Le nombre négatif est équivalent à l’expression :

-value == (~value) + 1

Dans le cas de -1234, on aurait donc 1111 1011 0010 1110 en binaire (fb2e en hexa).
La particularité que le bit de poid fort représente le signe reste vrai. Cette représentation permet également de faire en sorte que les opérations d’addition et de soustraction reste similaire à la version non signé. Si on calcule l’addition binaire -1 + 1, on obtient bien 0.

Hello JM

Question un peu bête, mais je ne sais pas quelle batterie commander… Il y en a tellement !
que penses-tu de celle-ci ? :

YUNIQUE FRANCE 2 Piece 3.7V 1200mAh Batterie RC Syma X5SC X5SW Quadcopter Drone des pièces de Rechange

pour la modique somme de 28€ sur amazon ?

A plus

Si c’est bien décodé par une application c’est que les données binaires sont bonnes donc c’est plutôt google forms/sheet qui les interprète mal.

Non il n’y a pas de perte de signe parce que les données elles mêmes ne sont pas modifiées par l’opération. Tu ne fais que prendre 16 bits quelconques, les éclater en 2 fois 8 bits et les envoyer tel quel sur un réseau. C’est à l’application qui les reçoit de les interpréter correctement, et les données elles mêmes ne fournissent aucune information sur comment les interpréter.

Donc pour corriger il faudrait pouvoir dire à google forms que le résultat de (appData[2] << 8 | (AppData[3])) doit être interprété comme un nombre entier signé sur 16 bits, alors que là visiblement il l’interprète soit comme un entier non signé sur 16 bits (peu probable) soit comme un entier signé sur plus de 16 bits (plus probable). Je ne connais pas le langage utilisé donc je ne saurai pas dire comment on peut faire ça.

Un autre moyen ça serait de corriger le nombre mal interprété en utilisant des opérations arithmétiques :

Quand on met -1 dans un nombre signé sur 16 bits, c’est enregistré en binaire comme 1111 1111. Si on interprète ces données binaire comme un nombre non signé sur 16 bits ça donne 65535. Si on l’interprète comme un nombre signé (ou non) sur 32 bits (donc 0000 0000 1111 1111) ça donne aussi 65535. Pour -2 ça serait 1111 1110, réinterprété comme 65534, et ainsi de suite jusqu’à -32768 (1000 0000) interprété comme 32768. Donc pour corriger il faut soustraire 65536 :

  • 65535 - 65636 = -1
  • 65534 - 65636 = -2
  • 32768 - 65536 = -32768.

Les nombres positifs n’ont pas besoin d’être corrigés : 1 est enregistré en 0000 0001 et interprété 1 dans les 2 cas, et pareil jusqu’à 32767 (0111 1111).

Donc tu devrais pouvoir corriger le nombre en faisant un truc comme ça (syntaxe à adapter au langage utilisé dans google forms) :

decoded.poids1_ = (appData[2] << 8 | (AppData[3]))
if (decoded.poids1_ >= 32768) {
  decoded.poids1_ = decoded.poids1_ - 65536
}
decoded.poids1_ = decoded.poids1_ / 100

J’ai payé mes batteries ~5€ pièces… si tu en as besoin tout de suite je te dépanne et tu trouvera sur Amazon celles ci 27€ les 5 avec livraison prime.
Si tu n’a pas prime je peux te les commander

Makerfire 5pcs 1S 3.7V Lipo Batterie 1200mAh et Chargeur de Batterie 5-en-1 pour SYMA X5S X5SW X5SC M18 H5P RC Quadcopter Drone Pièces de Rechange

A plus

:smile: :pray: :ok_hand:

Impec merci ça marche !

Bonjour

je viens de découvrir ce sujet, je suis apiculteur amateur et souhaiterai construire ma balance connectée pour ruches.
je suis loin du siège de l’association, mais, une description complète de la procédure et du matériel à acheter me serait très agréable.

D’avance merci et bonne journée

Bonjour à tous,

Je suis également api amateur et à la recherche d’infos sur la balance connectée, loin de tout (elec, wifi, etc). Je me renseigne sur la fabrication et l’utilisation de LoRa.
Merci d’avance,

Benoît