Valeurs non cohérentes lors de la lecture de deux entrées analogiques

Bonjour et merci de vous être intéressé a mon post !

Dans le cadre de mon projet de fin d'études (DUT Geii) je dois mettre en oeuvre sous arduino une lecture analogique de valeurs électriques. Ce n'est pas la première fois que j'utilise arduino, je suis assez familiarisé. J'ai cependant lors de la lecture de valeurs analogiques un problème :

Je dois lire une tension proportionnelle à la température ambiante et une autre proportionnelle à la luminosité ambiante. Quand j’exécute le code en mettant sous commentaire une des deux lectures, l'autre lecture marche parfaitement. Le problème apparaît quand je lis les deux valeurs dans mon programme, la tension proportionnelle à la température se met à délirer :o . Je n'ai pas ce problème pour la luminosité.

Voici mon code

byte Temperature;
String Eclairage= "OK";
int sensorPin = A1;   
byte sensorValue = 0;  
void setup() {
  Serial1.begin(9600);
}

void loop() {
  Scrutage_capt_Temp(A5);
  String DATA1 = String(Temperature);
  delay(200);
  Scrutage_capt_Lumi(A0);  // --> Lecture que je mets en commentaire
  String DATA2 = Eclairage;
  delay(200);
  String DATA = String(DATA1 + '/' + DATA2 +'/' + String("OK"));
  Serial1.println(DATA);
  delay(5000);
}
byte Scrutage_capt_Temp(int sensor_Voie1)
{
    int sensorValue1;
    
    sensorValue1 = analogRead(sensor_Voie1); //On lit la tension sur A0 et on la stocke dans la variable
    Temperature = ((sensorValue1 / 1023.0) * 5.0)*100; //On met sous forme de température en °C
    
    return Temperature;
}
String Scrutage_capt_Lumi(int sensor_Voie)
{
    int sensorValue;
    
    sensorValue = analogRead(sensor_Voie); //On lit la tension sur A0 et on la stocke dans la variable
    sensorValue = ((sensorValue / 1023.0) * 5.0)*100; //On met la valeur sous forme de tension
    if(sensorValue > 385)
    {
      Eclairage = "Sombre";
    }
    else
    {
      Eclairage = "Lumineux";
    }
    return Eclairage;
}

Quand je met sous commentaire la lecture de la luminosité pas de problème...
Avez-vous déjà rencontré ce problème ?
Comment puis-je le résoudre ?

Merci de votre aide :slight_smile:

Bonjour,
lis chaque entrée 2 fois de suite et ne retiens que la 2ème lecture de chaque entréé

Whoah,
Merci énormément !
Ce problème me gênait beaucoup !

Il y a une explication a cela ?

Merci pour votre aide :slight_smile:

Oui et cette recommandation provient directement du fabricant du micro : comme quoi il faut lire les datasheets 99% des réponses aux questions s'y trouvent.

Dans un microcontroleur il n'y a qu'un seul convertisseur analogique digital.
Les différentes entrées analogiques sont aiguillées vers le convertisseur (une à la fois) par un multiplexeur analogique.

Si tu commutes deux entrées pendant que le convertisseur est en train de faire une acquisition il mesurera un mélange des signaux qui se trouvent sur les deux entrées.
Quoi que tu fasse sur le chemin analogique (pas que changer d'entrées, changer la fréquence de l'horloge ADC par exemple) il faut rejeter la première mesure.

ton code est un peu louche quand même :

  • tes fonctions Scrutage_xxx() rangent leur résultat dans une variable globale, que tu emploies comme valeur de retour de la fonction. Mais dans loop() tu n'utilises pas les valeurs de retour des fonctions. Ca marche, mais c'est casse-gueule !
  • tu as une variable globale sensorvalue, et une variable locale de même nom dans Scrutage_capt_Lumi(). C'est casse-gueule !
  • la string DATA2 ne sert à rien, c'est une copie inutile de Eclairage.
  • L'initialisation de Eclairage à "OK" ne fait pas sens.

Tant mieux si ça marche comme ça, mais autant faire propre...