CORRECTION ET RANGEMENT CODE

Bonjour,

Je suis étudiant, et pour un projet de fin d'année mon équipe et moi travaillons sur un Ballon Sonde. Et nous faisons fonctionner plusieurs capteurs différents en même temps sur un arduino et enregistre aussi les données sur une carte SD.

Mon problème est que le code comment a devenir assez grand, et donc sa devient le "bordelle", surtout qu'il n'y pas encore tout les capteurs.

J'aimerais s'avoir s'il existe des sortes de macro/raccourcis pour avoir par exemple dans chaque macro un capteur seul.
Et tant qu'a faire, si vous voyez des "erreurs" dans mon code ou des choses qui pourrait être plus pratique, donnant le même résultat avec moins de code ect.. merci d'avance.

ps: le code fonctionne.

#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include "SparkFunHTU21D.h"
#include "Adafruit_SI1145.h"

Adafruit_SI1145 uv = Adafruit_SI1145();
HTU21D myHumidity;

int tempPin = 2; //tmp36
int sensorPression = 1; //mpx5100p 
int mpx5100p= 0; // mpx5100p
const int chipSelect = 4;
unsigned long time;

const unsigned int TEMP_SENSOR_PIN = 0;  
const float SUPPLY_VOLTAGE = 5.0;        

// TEMPERATURE LM35
const float get_temperature() {
const int sensor_voltage = analogRead(TEMP_SENSOR_PIN);
const float voltagee = sensor_voltage * SUPPLY_VOLTAGE / 1024;
  return (voltagee * 100);
}


void setup()
{
  Serial.begin(9600);
  myHumidity.begin();
  while (!Serial) {
    ;

  }


  Serial.print("Initialisation de la SD card...");

  if (!SD.begin(chipSelect)) {
    Serial.println("ERREUR SD");
  }
  Serial.println("card initialiser.");
}

void loop(){

  File lm35File = SD.open("lm35.txt", FILE_WRITE);
  File mpx5100pFile = SD.open("mpx5100p.txt", FILE_WRITE);
  File htu21dFile = SD.open("htu21d.txt", FILE_WRITE);
  File si1145File = SD.open("si1145.txt", FILE_WRITE);
  File tmp36File = SD.open("tmp36.txt", FILE_WRITE);
  
  
  int reading = analogRead(tempPin);//tmp36
  float UVindex = uv.readUV(); // si1145
  UVindex /= 100.0;  // si1145
  float humd = myHumidity.readHumidity(); // htu21d
  float temp = myHumidity.readTemperature(); // htu21d
  float voltage = reading * 5.0; //tmp36
  voltage /= 1024.0; // tmp36
  float temperatureC = (voltage - 0.5) * 100 ; //tmp36
  

  if (tmp36File) {
    tmp36File.print(temperatureC);
    tmp36File.print(" ");
    time = millis();
    tmp36File.println(time);
    delay(250);

    tmp36File.close();

    // test capteur moniteur fonctionne ou pas
    Serial.println("=======TMP36=======");
    Serial.print(temperatureC); Serial.println(" C");
  }
    
  if (mpx5100pFile) {
    mpx5100p = analogRead(sensorPression);
    mpx5100pFile.print(mpx5100p);
    mpx5100pFile.print(" ");
    time = millis();
    mpx5100pFile.println(time);
    delay(250);
    
    mpx5100pFile.close();

    // test capteur moniteur fonctionne ou pas
    Serial.println("=======MPX5100P=======");
    Serial.print(mpx5100p); Serial.println(" hPa");
  }

  if (lm35File) {
    time = millis();
    lm35File.print(time);
    lm35File.print(" ");
    lm35File.println(get_temperature());
    delay(250);
    
    lm35File.close();

    // test capteur moniteur fonctionne ou pas
    Serial.println("=======LM35=======");
    Serial.print(get_temperature()); Serial.println(" C");
  }
  
  if (htu21dFile) {
    time = millis();
    htu21dFile.print(time);
    htu21dFile.print(" ");
    htu21dFile.println(humd, 1);
    delay(250);

    htu21dFile.close();
    
    // test capteur moniteur fonctionne ou pas
    Serial.println("======HTU21D=====");
    Serial.print(humd, 1); Serial.println(" %");
  }

  if (si1145File) {
    time = millis();
    si1145File.print(time);
    si1145File.print(" ");
    si1145File.print("Vis: "); si1145File.print(uv.readVisible());
    si1145File.print(" IR: ");  si1145File.print(uv.readIR());
    si1145File.print(" UV: ");  si1145File.println(UVindex);
    delay(250);

    // test capteur moniteur fonctionne ou pas
    Serial.println("=======SI1145========");
    Serial.print("Vis: "); Serial.print(uv.readVisible());
    Serial.print(" IR: "); Serial.print(uv.readIR());
    Serial.print(" UV: ");  Serial.println(UVindex);

    si1145File.close();
    
  }

  else {
    Serial.println("ERREUR Impossible d'ouvrir le/les fichier(s)");
  }
}

Faut que tu regardes du côté des "fonctions" .

Exemple avec des choses imaginaires :

Code en bordel :

...

interrogeCapteur(sonde1);
ConversionCapteur(sonde1);
AfficheCapteur(sonde1);

interrogeCapteur(sonde2);
ConversionCapteur(sonde2);
AfficheCapteur(sonde2);

interrogeCapteur(sonde3);
ConversionCapteur(sonde3);
AfficheCapteur(sonde3);

interrogeCapteur(sonde4);
ConversionCapteur(sonde4);
AfficheCapteur(sonde4);

...

Code plus propre

....

Void Lecture(sonde)
{
interrogeCapteur(sonde);
ConversionCapteur(sonde);
AfficheCapteur(sonde);
}

...
Lecture(sonde1);
Lecture(sonde2);
Lecture(sonde3);
Lecture(sonde4);
...

En gros voila l'idée , ya pleins de façons de simplifier du code mais chacun a sa "technique" ou plutôt façon de faire ..

Même avec une IDE aussi simpliste que celle de Processing/Wiring/Arduino il est possible de travailler en multi fichiers.
Tu peux envisager un fichier par capteur.

Simplement il faut respecter les règles du C/C++
Tu écris un fichier *.ino avec au minimum les fonctions setup() et loop().
L'IDE "Processing/Wiring/Arduino" va créer le fichier *.cpp qui sera totalement conforme à un fichier C/C++ classique.

 /* DÉCLARATION  :*/
      #define machin truc
      #include <****>  // fichiers de librairie
      #include "*****" // fichiers qui se trouvent dans le répertoire courant
      variables globales
   

int main()
{
   init()  // initialisation du micro "à la mode arduino"
   setup()  // opération qui ne s'exécute qu'une seule fois
   while(1)
   {
      loop()  / boucle infinie
   }
}

C'est dans le fichier *.ino que seront déclarées les variables globales.
Dans le répertoire qui contient le fichier *.ino tu peut ajouter des couples de fichier '**.h et ***.cpp
Dans chaque fichier *.h les variables globales devront être redéclarée mais avec le mot clé "extern" conformément aux règles du C/C++