Problème d'affichage sur le moniteur arduino

Bonjour,

Je réalise un projet sur arduino M0 (équivalent à arduino Uno). Le but est de mesurer des tensions en utilisant le convertisseur analogique numérique ADS1115. Puis que j'ai plusieurs tensions à mesurer j'utilise donc plusieurs ADC en parallèle. Ici je vous donne l'exemple de code pour 3 ADC. Mon problème est que quand je lance le code, ça affiche rien sur le moniteur et je ne sais pas pourquoi.
Si quelqu'un peut m'aider ça serait génial :slight_smile:

D'avance merci !

#include "ADS1X15.h" // Déclaration de la bibliothéque de l'ADC

// ************************************************ PIN DEFINITION
//-----------  Définition des adresses de l'arduino -------------
#define PIN_ADC_ADRESS1    7   // Relier la sortie digitale 7 de l'arduino à l'adresse ADDR du premier ADC
#define PIN_ADC_ADRESS2    8
#define PIN_ADC_ADRESS3    9
// ************************************************ USER VAR DEFINITION
//-----------  Définition des paramètres de l'ADC et variables de calcul -------------
#define ADC_GAIN      1 // Gain de l'ADC
#define ADC_MODE      1 // Mode de lecture de l'ADC
#define ADC_DATARATE  7 // Vitesse de lecture de l'ADC
ADS1115 ADS(0x49);  // ADS1115 physiquement défini à l'adresse 0x49 i2c (VDD)
float U1, U2, U3, U4; // Valeur des tension en V
int16_t valeurA3, valeurA2, valeurA1, valeurA0;
//----------- fonction d'initialisation -------------
void ADC_INIT() {
  ADS.begin();
  ADS.setGain(ADC_GAIN);
  ADS.setMode(ADC_MODE);
  ADS.setDataRate(ADC_DATARATE);
  ADS.readADC(0);
}


//----------- fontion de calcul-------------
void ADC_GETDATA(int ADC_PIN) {

  digitalWrite(PIN_ADC_ADRESS1, LOW);
  digitalWrite(PIN_ADC_ADRESS2, LOW);
  digitalWrite(PIN_ADC_ADRESS3, LOW);

  digitalWrite(ADC_PIN, HIGH); // Mettre à l'état haut (5V) l'ADC souhaité.
  delay(10);

  ADC_INIT();

  valeurA3 = ADS.readADC(3);
  valeurA2 = ADS.readADC(2);
  valeurA1 = ADS.readADC(1);
  valeurA0 = ADS.readADC(0);

  // Conversion en volt

  U1 = ADS.toVoltage(valeurA3);
  U2 = ADS.toVoltage(valeurA2);
  U3 = ADS.toVoltage(valeurA1);
  U4 = ADS.toVoltage(valeurA0);
  digitalWrite(ADC_PIN, LOW);
  delay(10);
}

//----------- Fonction d'affichage -------------
void ADC_PRINTVALUE() {  // fonction d'affichage

  SerialUSB.println("Lecture de la tension U1 sur A3");
  SerialUSB.println(U1, 4);
  SerialUSB.println("Lecture de la tension U2 sur A2");
  SerialUSB.println(U2, 4);
  SerialUSB.println("Lecture de la tension U3 sur A1");
  SerialUSB.println(U3, 4);
  SerialUSB.println("Lecture de la tension U4 sur A0");
  SerialUSB.println(U4, 4);

}


//----------- Fonction principale setup -------------
void setup() {

  // définition des pins comme sortie
  pinMode(PIN_ADC_ADRESS1, OUTPUT);
  pinMode(PIN_ADC_ADRESS2, OUTPUT);
  pinMode(PIN_ADC_ADRESS3, OUTPUT);

  SerialUSB.begin(9600);
  while (!SerialUSB);
}


//----------- Fonction loop-------------
void loop() {
  // Appel des deux fonctions (calcul et affichage)

  ADC_GETDATA(PIN_ADC_ADRESS1);
  ADC_PRINTVALUE();

  ADC_GETDATA(PIN_ADC_ADRESS2);
  ADC_PRINTVALUE();

  ADC_GETDATA(PIN_ADC_ADRESS3);
  ADC_PRINTVALUE();

  while (1); // Forcer le programme à s'arrêter
}

Bonjour,

Tu es sur que c'est l'affichage qui ne fonctionne pas? Tu n'es pas plutôt bloqué dans la fonction ADC_GETDATA.
Traces l'appel et la sortie de cette fonction

void loop() {
  // Appel des deux fonctions (calcul et affichage)
  SerialUSB.println("Start GetData");
  ADC_GETDATA(PIN_ADC_ADRESS1);
  SerialUSB.println("Start PrintValue");
  ADC_PRINTVALUE();

En tout cas je n'obtiens pas de résultat sur le moniteur. Au fait dans la fonction ADC_GETDATA, lorsque je spécifie l'adresse de l'ADC souhaité, ça fonctionne. Par exemple quand je mets digitalWrite(PIN_ADC_ADRESSE1) cela marche. Mais quand je veux automatiser c'est-à-dire qu'il fasse le calcul pour chaque ADC l'un après l'autre, cela ne donne rien en sortie...

Tu as essayé d'écrire sur le moniteur sans rien faire d'autre?

Désolé mais j'ai pas compris votre question. L'affichage marche quand je spécifie l'adresse pour un seul l'ADC comme je l'ai dit dans mon message précédent...