J'ai un capteur de charge avec la bibliothèque DFrobot.
Je dois d'abord mettre dans mon programme l'étalonnage puis dès que j'ai mon facteur d'étalonnage je mets le programme pour faire fonctionner ma balance
Je voudrais mettre la fonction étalonnage dans un onglet, et la lancer en cas de besoins lorsque je la demande en tapant "étalonnage" sur moniteur série.
Non, tu n'a pas modifié la mise en forme de ton code, tant que tu ne l'aura pas fait, ton Arduino refusera de fonction correctement
Je ne sais pas ce que tu appels "onglets" et refuse de lire ton code tant qu'il n'est pas lisible "à mes yeux"
Mais je ne vois pas trop ce qui t'empêcherais de faire ce que tu souhaite.
Pour la bonne tenue de ton fil, mets ton sketch entre les balises, pour ce faire, édites ton post, sélectionne le texte du sketch et clique sur la balise code.
Ce n'est pas nécessaire, tel que je te présente la chose, il suffit de taper Calib 1234.56, n'importe quand if(Serial.available()) ne "mange pas de pain" tant que tu ne tapes pas Enter dans le moniteur.
Cette possibilité de "commander" ton programme et toujours aux aguets dans loop()
Remplaces tout la condition if(Serial.available()) par:
` if(Serial.available())
{
String calibRx = Serial.readStringUntil('\n'); // Mettre au moins nouvelle ligne dans le moniteur.
calibRx.trim(); // Nettoyage des 2 bouts de la chaîne https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/trim/
calibRx.replace(" ", ""); // Supprimer les espaces
calibRx.replace(",", "."); // Remplacer la virgule par le point
calibRx.toUpperCase(); // En majuscules
if (calibRx.startsWith("CALIB")) // Si c'est une cvommande de calibration
{
calibration_factor = calibRx.substring(5).toFloat(); // On extrait la valeur de la commande CALIB12345.44 et la transformer en float
}
else if (calibRx.startsWith("AUTRE"))
{
// ici que faire avec la commande AUTRE
}
else
{
Serial.println(F("Commande inconnue !!!"));
delay(3000);
}
}
`
Ainsi tu peux développer d'autre commandes, je mets ça, systématiquement dans les programmes que je développe ou dans les programmes terminés pour les "diriger"
Après avoir trouvé mon facteur d'étalonnage, je mettre ce code dans mon programme pour faire fonctionner ma balance. En fait c'est pour cela, que j'aimerais garder ce I sous le coude en cas de besoins pour changer le facteur sans recopier le code...
#include "HX711.h"
#define calibration_factor -7050.0 //This value is obtained using the SparkFun_HX711_Calibration sketch
#define DOUT 3
#define CLK 2
HX711 scale;
void setup() {
Serial.begin(115200);
Serial.println("HX711 scale demo");
scale.begin(DOUT, CLK);
scale.set_scale(calibration_factor); //This value is obtained by using the SparkFun_HX711_Calibration sketch
scale.tare(); //Assuming there is no weight on the scale at start up, reset the scale to 0
Serial.println("Readings:");
}
void loop() {
Serial.print("Reading: ");
Serial.print(scale.get_units(), 1); //scale.get_units() returns a float
Serial.print(" lbs"); //You can change this to kg but you'll need to refactor the calibration_factor
Serial.println();
}
Alors, l'autre option est de créer une fonction (commandeRecue()) qui est appelée depuis loop() dès que enter est pressé dans le moniteur.
Dans loop()
if(Serial.available())
{
commandeRecue();
}
En fin de sketch:
void commandeRecue()
{
String calibRx = Serial.readStringUntil('\n'); // Mettre au moins nouvelle ligne dans le moniteur.
calibRx.trim(); // Nettoyage des 2 bouts de la chaîne https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/trim/
calibRx.replace(" ", ""); // Supprimer les espaces
calibRx.replace(",", "."); // Remplacer la virgule par le point
calibRx.toUpperCase(); // En majuscules
if (calibRx.startsWith("CALIB")) // Si c'est une cvommande de calibration
{
calibration_factor = calibRx.substring(5).toFloat(); // On extrait la valeur de la commande CALIB12345.44 et la transformer en float
}
else if (calibRx.startsWith("AUTRE"))
{
// ici que faire avec la commande AUTRE
}
else
{
Serial.println(F("Commande inconnue !!!"));
delay(3000);
}
}
A la fin de la condition if (calibRx.startsWith("CALIB")) il faut sauver le variable en EEPROM
Comme cette variable fait plus que que 8 bits, il faut utiliser les fonctions put() et get()
Dans loop:
if(Serial.available()) // Si enter a été pressé
{
commandeRecue();
}
En fin de programme:
void commandeRecue()
{
String calibRx = Serial.readStringUntil('\n'); // Mettre au moins nouvelle ligne dans le moniteur.
calibRx.trim(); // Nettoyage des 2 bouts de la chaîne https://www.arduino.cc/reference/en/language/variables/data-types/string/functions/trim/
calibRx.replace(" ", ""); // Supprimer les espaces
calibRx.replace(",", "."); // Remplacer la virgule par le point
calibRx.toUpperCase(); // En majuscules
if (calibRx.startsWith("CALIB")) // Si c'est une cvommande de calibration
{
calibration_factor = calibRx.substring(5).toFloat(); // On extrait la valeur de la commande CALIB12345.44 et la transformer en float
// Sauver calibration_factor
}
else if (calibRx.startsWith("AUTRE"))
{
// ici que faire avec la commande AUTRE
}
else
{
Serial.println(F("Commande inconnue !!!"));
delay(3000);
}
}
Une toute belle soirée à toi!
Cordialement
jpbbricole
Je viens de comprendre ce que tu appels un onglet.
Tu veux dire en faite créer un fichier qui contient tes fonctions.
C'es tout à fait possible, mais je ne suis pas sûre que cela vraiment necessaire, si tu veux quand même le faire, on peut t'expliquer comment faire.
Merci à tous les 2. J'ai dit onglet je pensais que c'était le mieux !
Je débute en programme.
Je veux juste que la partie pour trouver mon facteur d'étalonnage soit présente en cas de besoins.
Car normalement des que j'ai trouvé le facteur, plus besoins , je peux le supprimer et remplacer par ce que j'ai mis en dernier
Mais si un jour j'en ai besoins que je puisse l'avoir sous la main !
Tu n'a pas tord, c'est moi qui suis long à la détente
Je ne sais pas ce qu'en pense @jpbbricole mais pour moi je vois deux, voir trois directions:
Tu fais deux programmes distinct, le premier permet de déterminer le facteur, le deuxième possède le facteur en dur dans le code.
L'avantage c'est qu'il n'y a pas à gérer plusieurs chose qui ne participe pas vraiment à la logique de ton programme.
L'inconvénient, c'est si il faut recalibrer régulièrement, cela devient pénible.
Dans ce cas le fait d'avoir deux onglets(fichiers) pourrait avoir un intérêt.
Tu fais un seul programme, qui écoute le moniteur série et sur une commande détermine ton facteur pour le sauver dans une EEPROM.
L'avantage est que tu n'a pas à charger plusieurs programme dans ta carte de developpement.
L'inconvénient est qu'il faut le brancher à ton ordinateur et taper la commande dans l'interface de la liaison série, donc par exemple ouvrir ton IDE Arduino et utiliser le moniteur série.
Personnellement je ne vois pas trop l'avantage par rapport au 1, si tu as une seul commande de ce type.
ET bien sûre il faut que tu code gère la lecture/écriture dans l'EPPROM de carte si elle en possède ou en ajouter si ce n'est pas le cas.
Ce point est si ton programme peux déterminer tout seul son facteur(auto-calibration)?
tu fais un seul programme et tu rajoutes un bouton qui permet d'entrer dans une auto-calibration.
Il faudra bien sûre aussi sauver dans une EEPROM, ta valeur.
Comme je n'ai pas bien compris comment tu détermine ton facteur, mais je ne connais pas le HX711, pour moi, il n'y avait pas d'intervention extérieur, mais une auto calibration au démarrage pour déterminer le 0.
Je serai partant pour les 2 1ère options. Laquelle prendrai plus de place ?
Normalement je ne devrais pas y recalibrer souvent. Pas de soucis si il faut se reconnecter au pc.
tu as des problèmes de place ?
la première sans aucun doute, puisque celui-ci n'a aucun code pour gérer un dialogue entre ton PC et le programme.
Mais je ne suis pas sûre que ce soit la bonne question à ce poser, si tu n'a pas de problème de place.
Pour moi comme tu es débutant, la bonne question est ce qui le plus simple à "coder".
donc implémenter uniquement les fonctionnalité que tu as besoin.
Quitte au final à devoir rajouter plus tard ce dialogue entre ton PC(Smartphone) et ton Arduino, car tes besoins auront évolués.