Buongiorno, ho questo multiplexer x
con protocollo i2c per effettuare letture da sensori bme280, ma quando avvio il programma dopo la prima lettura va in eccezione per poi riavviarsi .
Ho fatto dei test con un wemos d1 mini e con un esp 32 ma nulla , qualcuno si è imbattuto in questo problema.
Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta esso è stato spostato, da un moderatore della sezione di lingua Inglese, nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato. Grazie.
P.S.: Attenzione, non è la prima volta che la cosa succede ... Al ripetersi l'account potrebbe venir sospeso.
Se vuoi che qualcuno ti dia una mano con il tuo codice, devi rendergli la cosa semplice.
Il tuo codice formattato in questo modo e con i numeri di riga all'inizio è praticamene illegibile.
Comunque il problema dovrebbe essere nella funzione void printValues(Adafruit_BME280 bme, int bus) dove hai definito come primo parametro una copia dell'istanza della classe Adafruit_BME280 mentre poi in realtà passi alla funzione istanze già definite (bme1 e bme4).
Non puoi fare in questo modo, ma devi passare un puntatore all'istanza di Adafruit_BME280 o in alternativa puoi passare l'argomento per riferimento invece che per valore.
void printValues(Adafruit_BME280 & bme, int bus)
Questo il codice formattato e senza numeri di riga:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define SEALEVELPRESSURE_HPA (1022)
Adafruit_BME280 bme1; // Sensore BME280 su I2C
Adafruit_BME280 bme4; // Sensore BME280 su I2C
// Seleziona il bus I2C sul TCA9548A
void TCA9548A(uint8_t bus) {
Wire.beginTransmission(0x70); // Indirizzo del TCA9548A
Wire.write(1 << bus); // Seleziona il bus
Wire.endTransmission();
}
// Stampa i valori letti dal sensore BME280
void printValues(Adafruit_BME280 &bme, int bus) {
TCA9548A(bus);
Serial.print("Sensore sul bus ");
Serial.println(bus);
Serial.print("Temperatura = ");
Serial.print(bme.readTemperature());
Serial.println(" °C");
Serial.print("Pressione = ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println(" hPa");
Serial.print("Altitudine approssimativa = ");
Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
Serial.println(" m");
Serial.print("Umidità = ");
Serial.print(bme.readHumidity());
Serial.println(" %");
Serial.println();
}
void setup() {
Serial.begin(115200);
Wire.begin();
// Inizializza il sensore BME280 sul bus 2
TCA9548A(2);
if (!bme1.begin(0x76)) {
Serial.println("Impossibile trovare un sensore BME280 valido sul bus 2, controlla il cablaggio!");
while (1);
}
// Inizializza il sensore BME280 sul bus 5
TCA9548A(5);
if (!bme4.begin(0x76)) {
Serial.println("Impossibile trovare un sensore BME280 valido sul bus 5, controlla il cablaggio!");
while (1);
}
Serial.println();
}
void loop() {
printValues(bme1, 2);
printValues(bme4, 5);
delay(5000);
}
Ciao grazie per avermi risposto , spero di trovarmi nella giusta sezione "lingua Italiana , perchè non sono riuscito a capire ......
Comunque ho corretto quella routine me l'errore persiste
Ciao cotestatnt , rivisto attentamente tutto il tuo codice ma mi continuava a dare errore , riavviato il tutto e ti posso finalmente dire che funziona , ti ringrazio , quindi l'errore era dovuto che i 2 bme1 e bme4 erano già instanziati ?
Per mia conoscenza dove posso vedere qualche esempio per capire i puntatori o i passaggi di argomento o riferimento