Due mpu9250 connessi allo stesso bus I2C

Buongiorno a tutti,
ho dei problemi a leggere gli angoli yaw, pitch e roll da due mpu9250 connessi ad arduino mega2560 tramite il bus I2C. I due sensori hanno address differenti: uno 0x68 e l’altro 0x69. L’indirizzo 0x69 è stato ottenuto modificando la saldatura sul jumper sj2. Con il mio codice, modificato a partire da quello di Kris Winer, dovrei leggere i dati prima dal sensore 0x68 e poi dal 0x69…ma sul serial monitor compaiono solo i dati del secondo (0x69)…e non del tutto corretti. Come potrei modificare il mio codice al fine di leggere i due sensori?

Grazie a tutti per la disponibilità,

Alessia

absoluteMagnetoCalib.ino (1.93 KB)

LabVIEWInterface.h (7.45 KB)

quaternionFilters.ino (9.44 KB)

two_mpu9250.ino (70.6 KB)

Non sono un esperto in HW, ma il bus I2C se colleghi più sensori richiede delle resistenze di pullup.
Se i modulini non li hanno allora potrebbe non funzionare il bus.

Non ho problemi di connessione e il bus I2C funziona bene (legge entrambi i sensori ed ho le resistenze di pull up). Nel void setup() il codice calibra i due sensori correttamente ma quando nel void loop() dovrebbe leggere in maniera consecutiva prima un sensore (0x68) e poi l'altro (0x69), il codice legge in maniera continua solo il secondo sensore (0x69).

Urca, non usi una libreria già fatta, ma ti leggi i registri della 9250 tramite i2c.

Innanzitutto mi sembra molto scomodo avere duplicato tutte le funzioni per lavorare sui due sensori. Sarebbe molto più gestibile averne una unica che prende come parametro l'indirizzo del sensore su cui lavorare. Ad esempio, se devi sistemare qualcosa lo fai solo una volta, senza pericolo di dimenticarti di correggere anche l'altra funzione. Per cui ti consiglio innanzitutto di andare in questa direzione.

Oltre a questo, il mio consiglio è di inserire un minimo di controllo degli errori, iniziando dal verificare quel che ritorna requestFrom().