I2C verschillend ID, zelfde H bestand

Arduino specifieke Software
Berichten: 17
Geregistreerd: 06 Sep 2018, 10:32

I2C verschillend ID, zelfde H bestand

Berichtdoor PE2BS » 23 Sep 2018, 19:34

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
/**************************************************************************/
/*!
@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

Gebruikers-avatar
Berichten: 4877
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: I2C verschillend ID, zelfde H bestand

Berichtdoor nicoverduin » 23 Sep 2018, 20:22

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
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 17
Geregistreerd: 06 Sep 2018, 10:32

Re: I2C verschillend ID, zelfde H bestand

Berichtdoor PE2BS » 25 Sep 2018, 21:41

Bedankt voor je reactie. Probeer het deze week nog uit en laat hier het resultaat nog weten.

Berichten: 17
Geregistreerd: 06 Sep 2018, 10:32

Re: I2C verschillend ID, zelfde H bestand

Berichtdoor PE2BS » 30 Sep 2018, 18:54

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.

Gebruikers-avatar
Berichten: 4877
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: I2C verschillend ID, zelfde H bestand

Berichtdoor nicoverduin » 30 Sep 2018, 20:55

Zo zou ik het zeker niet gedaan hebben. Er staan meerdere begin() functies in die lib zoals ik al eerder heb aangegeven.
Docent HBO Software Engineering, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 13
Geregistreerd: 09 Jun 2018, 06:54
Woonplaats: Roodepoort, Zuid Afrika

Re: I2C verschillend ID, zelfde H bestand

Berichtdoor sterretje » 01 Okt 2018, 07:09

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)
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);
  }

  ...
  ...
}
...
...

Berichten: 17
Geregistreerd: 06 Sep 2018, 10:32

Re: I2C verschillend ID, zelfde H bestand

Berichtdoor PE2BS » 01 Okt 2018, 10:37

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.

Berichten: 17
Geregistreerd: 06 Sep 2018, 10:32

Re: I2C verschillend ID, zelfde H bestand

Berichtdoor PE2BS » 02 Okt 2018, 20:08

Het werkt! Ik snap nu wat Nico bedoelde met twee objecten bme maken. Weer wat geleerd en bedankt voor het voorbeeld.

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast