Je suis en train de faire un programme pour récupérer les différentes valeurs de production, consommation de nos panneaux solaire et de notre centrale solaredge.
Voila une partie de mon code dans une feuille main.cpp
#include <WiFi.h>
#include <Arduino.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <ProductConsommation.h>
...
String jsonStringConso;
String jsonStringConso1;
String jsonStringConso2;
String GRID;
String CurentPowerGrid;
String CurentPowerGrid2;
String CurentPowerGrid3;
void setup()
{
connectWifi();
ProductConsommation();
Serial.print("Consommation = ");
Serial.print(CurentPowerGrid3); //affichage de la consommation en récupérant la valeur de la fonction
Serial.println("KWh");
delay(300000);
} // Fin du setup
void loop()
{
}
J'ai dissocié l'interrogation de la centrale solaredge de mon programme main dans une fonction appelé "ProductConsommation.h"
Le problème, c'est que une fois que j'ai récupéré les différentes valeurs de "Consommation", "Production" et "Importation", je n'arrive pas à les exporter comme variable dans ma feuille main.cpp
En fait, j'arrive bien à récupérer mes valeurs dans mon fichier ProductConsommation.h, pas de soucis de ce coté là, mais je n'arrive pas à envoyer ces valeurs récupérées, dans mon fichier main.cpp
Dans la déclaration d'une fonction il y a deux types de variables : entrantes et sortantes. Par exemple :
float ProductConsommation (int abcdef) {
float CurentPowerGrid3;
// bla bla bla
return CurentPowerGrid3;
}
J'ai ici deux déclarations :
float : c'est le type de la sortie, donc de la variable à la suite du return. Si je ne renvoie rien, la fonction est déclarée comme void ProductConsommation (int abcdef)
int : c'est la (ou les) variable(s) passée(s) en argument, ce qui rentre dans la fonction. Lorsque tu appelles la fonction, il faut que les arguments entre parenthèses soient du même type dans le même ordre.
Dans ton cas, je comprends que tu veux que ta fonction renvoie la valeur de CurentPowerGrid3 et qu'elle ne reçoit rien en entrée. Donc tu dois déclarer la fonction comme ceci : float ProductConsommation()
Dans le code de la fonction tu définis la variable : float CurentPowerGrid3 = 0;
tu la mets à jour dans le corps de la fonction et tu la renvoies en fin : return CurentPowerGrid3;
Dans le setup tu appelles la fonction comme suit : float CurentPowerGrid3 = ProductConsommation();
Et ça devrait fonctionner... si j'ai bien compris ton besoin.
Le principe est le suivant
void ProductConsommation() doit avoir en argument l'adresse de(s) variable(s) que tu veux transmettre. L'opérateur à utiliser est &
Pour cela la définition doit contenir l'adresse de ta variable CurentPowerGrid3 void ProductConsommation(string & CurentPowerGrid3)
et la déclaration doit dire qu'elle contient un argument void ProductConsommation(string & );
Pour l'appel tu déclares ta variable et tu appelles la fonction
Sur le post précédent
Ce que je fais, vouloir expliquer d'une manière simpliste, pour éviter d'entrer dans la notion de référence propre au C++ est une erreur.
Pour plus d'info il faut lire les cours qui portent sur le passage des paramètres par référence, le fait que l'on trouve difficilement toutes les explications regroupées m'ont incité à ce raccourci bien tentant mais d'autant plus stupide que l'opérateur est le même ce qui ne peut qu'apporter de la confusion.