I2C verschillend ID, zelfde H bestand
8 berichten
• Pagina 1 van 1
I2C verschillend ID, zelfde H bestand
Op mijn weerstation wil ik een binnensensor en een buitensensor aansluiten. De BME280 voldoet goed en kan aangesloten worden op I2C. De sensor heeft twee I2C adressen. Standaard staat het adres 0x77 ingesteld maar hardwarematig kan ook gekozen worden voor adres 0x76. Dat wil ik want dan kan ik twee dezelfde sensoren gebruiken.
In de file: Adafruit_BME280.h wordt het standaard adres ingesteld:
cpp code
Dat moet ook want anders wordt de binnensensor niet herkend. Maar hoe pak ik het nu aan voor de buitensensor met adres 0x76 die dezelfde h-file nodig heeft? Ik heb geprobeerd de definitie van het BME280_ADRESS in het programma zelf te definiëren, dus buiten de h-file, maar dat accepteerd de compiler niet. Uncomment de regel in Adafruit_BME280.h levert een foutmelding op.
Niets veranderen in de h-file en in het programma zelf opnieuw definieren (maar dan als adres 0x76) wordt door het programma en de sensor niet herkend.
Iemand enig idee hoe dit aan te pakken?
Groet,
Ruud
In de file: Adafruit_BME280.h wordt het standaard adres ingesteld:
cpp code
/**************************************************************************/
/*!
@brief default I2C address
*/
/**************************************************************************/
#define BME280_ADDRESS (0x77)
/*=========================================================================*/
Dat moet ook want anders wordt de binnensensor niet herkend. Maar hoe pak ik het nu aan voor de buitensensor met adres 0x76 die dezelfde h-file nodig heeft? Ik heb geprobeerd de definitie van het BME280_ADRESS in het programma zelf te definiëren, dus buiten de h-file, maar dat accepteerd de compiler niet. Uncomment de regel in Adafruit_BME280.h levert een foutmelding op.
Niets veranderen in de h-file en in het programma zelf opnieuw definieren (maar dan als adres 0x76) wordt door het programma en de sensor niet herkend.
Iemand enig idee hoe dit aan te pakken?
Groet,
Ruud
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: I2C verschillend ID, zelfde H bestand
Er is een begin functie waarbij je het adres kan meegeven. Je moet dan twee objecten bme280 maken. De eerste op de oudemanier. De ander met de begin waarbij je het adres meegeeft. Staat in de cpp lib file
Re: I2C verschillend ID, zelfde H bestand
Bedankt voor je reactie. Probeer het deze week nog uit en laat hier het resultaat nog weten.
Re: I2C verschillend ID, zelfde H bestand
Het is gelukt maar alleen door een tweede *.h file en *.cpp file te maken. In plaats van BME en bme heb ik in beide files alles BMA en bma genoemd. De ene sensor spreek ik aan met bme-opdrachten en de andere met bma-opdrachten Een beetje grove aanpak maar in zou ook niet goed weten hoe je een opdracht tot lezen uit de registers van de beide BME280's kunt geven als je niet eerst het adres kan veranderen en doorgeven.
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: I2C verschillend ID, zelfde H bestand
Zo zou ik het zeker niet gedaan hebben. Er staan meerdere begin() functies in die lib zoals ik al eerder heb aangegeven.
Re: I2C verschillend ID, zelfde H bestand
Zoals Nico al aangaf zijn er verschillende begin functies. Een van die functies accepteert een I2C adres als parameter. De prototypes van die functies kun je vinden in de .h file en de implementaties (van twee van die functies) in de cpp file (hieronder getoond)
De laatste neemt geen argument en word gebruikt als je programma geen parameter meegeeft aan de begin functie.
De eerste neemt als argument een uint8_t die een I2C adres representeert.
Hieronder een aangepast stukje van de bme280test voor twee sensors
- Code: Alles selecteren
bool Adafruit_BME280::begin(uint8_t addr)
{
_i2caddr = addr;
_wire = &Wire;
return init();
}
bool Adafruit_BME280::begin(void)
{
_i2caddr = BME280_ADDRESS;
_wire = &Wire;
return init();
}
De laatste neemt geen argument en word gebruikt als je programma geen parameter meegeeft aan de begin functie.
De eerste neemt als argument een uint8_t die een I2C adres representeert.
Hieronder een aangepast stukje van de bme280test voor twee sensors
- Code: Alles selecteren
...
...
Adafruit_BME280 bmeInside;
Adafruit_BME280 bmeOutside;
...
...
void setup()
{
...
...
// default settings
// (you can also pass in a Wire library object like &Wire2)
status = bmeInside.begin();
if (!status) {
Serial.println("Could not find a valid inside BME280 sensor, check wiring!");
while (1);
}
status = bmeOutside.begin(0x76);
if (!status) {
Serial.println("Could not find a valid outside BME280 sensor, check wiring!");
while (1);
}
...
...
}
...
...
Re: I2C verschillend ID, zelfde H bestand
Nico en Sterretje bedankt voor jullie reacties. Nico zijn reactie was voor mij nogal cryptisch en daar kwam ik niet goed uit. Vandaar mijn andere oplossing. Die vond ik zelf ook niet zo mooi maar ik wist geen betere.
Met het voorbeeld van Sterretje kan ik weer verder en die oplossing lijkt me zoals het hoort. Ik ga het weer proberen en laat jullie weer weten hoe het afloopt.
Met het voorbeeld van Sterretje kan ik weer verder en die oplossing lijkt me zoals het hoort. Ik ga het weer proberen en laat jullie weer weten hoe het afloopt.
Re: I2C verschillend ID, zelfde H bestand
Het werkt! Ik snap nu wat Nico bedoelde met twee objecten bme maken. Weer wat geleerd en bedankt voor het voorbeeld.
8 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: ucojovitaxane en 20 gasten