Liaisons I2C et carte Arduino

Bonjour,

Je viens vers vous car j'ai une problématique dans mon programme.

En effet, nous devons réaliser un prototype permettant de dépister l'apnée du sommeil.

Nous disposons d'un capteur de spO2 : saturation en oxygène dans le sang (MAX30100), un capteur de fréquence cardiaque FC (AD8232), un capteur de fréquence respiratoire FR (une thermistance : nous faisons la différence de la température chaude et froide, puis nous calculons la distance entre les front montant) et une carte SD avec une RTC DS1307.

Nous avons réussi à trouver un programme en open source permettant de datalogger quatre valeurs analogiques avec horodatage.

Nous avons modifié mon programme de telle sorte à ce que en A0 nous avons la valeur de FR, en A1 la valeur de FC mais le problème qui se pose est notre capteur MAX30100 fonctionnant en I2C comme le module RTC. (soit deux liaisons i2C sur notre carte Arduino)

Dans mes mesures, nous lisons tout d'abord la valeur sur l'horloge, puis A0, puis A1, puis celle de MAX30100 pour en faire un tableau de valeur en format csv sur notre carte SD.

Pour la valeur de MAX30100, le moniteur série nous affiche 0. Il me semble que c'est un problème de communication, comment y pallier ?

Comment faire fonctionner deux liaisons i2c en même temps ? (ou plutôt successivement)

Voici la partie du programme des mesures :

void measure() {

/* Lit la date et heure courante */
DateTime_t now;
read_current_datetime(&now);

/* Réalise la mesure */
v_1 = analogRead(A0) * 5.0 / 1023; //
v_2 = BPM;

pox.update();
if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
v_3 = pox.getSpO2(); // je fais appel à une fonction spécifique de MAX30100 permettant d'afficher la spO2
tsLastReport=millis();
}

/* Affiche les données sur le port série pour debug */
Serial.print(v_1);
Serial.print(F("; "));
Serial.print(v_2);
Serial.print(F("; "));
Serial.println(v_3);

/* Enregistre les données sur la carte SD */
// Horodatage
file.print(now.days);
file.print(F("/"));
file.print(now.months);
file.print(F("/"));
file.print(now.year + 2000);
file.print(F(" "));
file.print(now.hours);
file.print(F(":"));
file.print(now.minutes);
file.print(F(":"));
file.print(now.seconds);
file.print(F("; "));

/* Enregistre les données sur la carte SD */
file.print(v_1);
file.print(F("; "));
file.print(v_2);
file.print(F("; "));
file.print(v_3);
file.print(F("; "));

}

Vous remerciant d'avance,

Bonjour,

Merci de mettre votre code entre balises voir ici.
Le bus I2C accepte sans problème plusieurs périphériques. Voir ici
Ou bien là

Cordialement

Et voir là :

Parce que

En effet, nous devons réaliser un prototype...................

Il ne faut pas prendre les enfants du bon dieu pour des canards sauvages.