Bonsoir à tous et à toutes,
Je suis en train d'essayer d'optimiser un code arduino en créant des fonctions. Ce code me permettrait grâce au calcul de la pression de savoir si nous sommes dans une période de tempête, une zone dépressionnaire, pour cela je regarde si ma pression est inférieur à 1010 millibar et si c'est le cas il y a un risque de tempête donc ma variable tempête doit être égal à 1 ( je ne sais pas si il faut faut je la mette en boolean ou int). J'ai donc crée une fonction d'initialisation de mon capteur qui est le bmp 180, une deuxième qui vérifie son état et lit des valeurs de pression et température et une dernière qui est sensée faire fonctionné l'alarme. J'ai donc crée une boucle for qui me permet de lire la valeur de la pression 30 fois, qui est stockée dans la variable "Pression_comparaison" qui est une variable locale à la fonction, avec une mesure toutes les minutes et c'est la dernière valeur de cette boucle que je compare à 1010. Le problème étant que quand je rappelle cette fonction pour la comparée à 1010 on me dit qu'elle n'est pas déclarée dans ce script et il est dit aussi que ma variable "Tempete" n'est pas déclarée alors que je l'ai déclaré au début du script avant le setup.
Voici mon code :Et voici mon message d'erreur :Code:// pression #include <SFE_BMP180.h> #include <Wire.h> SFE_BMP180 pressure; #define ALTITUDE 75.0 double T,P ; boolean tempete ; void setup() { Serial.begin(9600); initialisation_bmp180(); } void loop() {} void initialisation_bmp180(){ if (pressure.begin()) Serial.println("BMP180 initialisation réussie"); else { // Si il y a un problème Serial.println("Problème d'initialisation du BMP180"); while(1); // Pause forever. }} long etat_bmp_et_lecture_pression_temperature(){ char status; status = pressure.startTemperature(); // Récupération de la température terminée, Notez que la mesure est enregistrée dans la variable T. // La fonction renvoie 1 en cas de succès, 0 en cas d'échec. // La température est enregistrée dans la variable T // La fonction renvoie 1 si l'état du capteur est correct, et 0 si il ya un problème if (status != 0) delay(status); status = pressure.getTemperature(T); if (status != 0){}// on vérifie l'état du capteur // lecture pression status = pressure.startPressure(3); if (status != 0) // Wait for the measurement to complete: delay(status); // Récupérer la mesure de pression terminée : // La mesure est enregistrée dans la variable P. // Notez également que la fonction nécessite la mesure de température précédente (T). // (Si la température est stable, vous pouvez effectuer une mesure de température pour plusieurs mesures de pression.) // La fonction renvoie 1 en cas de succès, 0 en cas d'échec. status = pressure.getPressure(P,T); // lecture pression } void alarme_tempete(){ for (byte b=0; b <= 30; b++) {// boucle de 30 mesures pour ensuite test alarme à l'issue des 30 mesures pour 1 mesure par minute float Pression_comparaison = pressure.sealevel(P,ALTITUDE);// création de la variable qui sera lue et donc changée toutes les minutes et qui à la fin sera comparée avec la valeur de référence delay (60000);} if ((Pression_comparaison) < 1010 ){ Tempete==1 else Tempete == 0 } }
Arduino : 1.8.9 (Windows Store 1.8.21.0) (Windows 10), Carte : "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"
C:\Users\lucie\Desktop\Projet élec Jardin\final_bmp180\final_bmp1 80.ino: In function 'void alarme_tempete()':
final_bmp180:53:6: error: 'Pression_comparaison' was not declared in this scope
final_bmp180:54:2: error: 'Tempete' was not declared in this scope
exit status 1
'Pression_comparaison' was not declared in this scope
Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.
Je ne pense pas avoir encore tout bien compris des variables et des fonctions et que c'est de là que vient ma source d'erreurs.
Merci d'avance à tous et toutes pour votre aide![]()
-----