Forum: Mikrocontroller und Digitale Elektronik Benötige mal C++ Syntax-Hilfe.


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich möchte die Adafruit_FRAM_I2C nicht mit dem eingebauten 
Hardware-I2C-Interface am Arduino (A4/A5) verwenden, sondern mit einer 
SoftwareI2C "SoftWire".

Die Softwire-Lib funktioniert, weil ein I2C-Scanner damit die 
unterschiedlichsten Sensoren an den richtigen Adressen erkennt, das 
soweit als Anfangstest.

Nun möchte ich ein FRAM schreiben und lesen und dazu oben genannte Lib 
verwenden. Din der Lib selbst ist die begin-Methode so definiert:
1
/*!
2
 *    @brief  Sets up the hardware and initializes I2C
3
 *    @param  addr
4
 *            The I2C address to be used.
5
 *    @param  theWire
6
 *            The Wire object to be used for I2C connections.
7
 *    @return True if initialization was successful, otherwise false.
8
 */
9
bool Adafruit_FRAM_I2C::begin(uint8_t addr, TwoWire *theWire)
10
{
11
  Adafruit_EEPROM_I2C::begin(addr, theWire);
12
  i2c_dev2 = new Adafruit_I2CDevice(MB85RC_SECONDARY_ADDRESS, theWire);
13
  if (!i2c_dev2->begin()) {
14
    return false;
15
  } ...

Nun habe ich die verschiedensten Varianten von diesem hier probiert:
1
SoftWire sw(fram_sda, fram_scl); //die Pins für Softwire
2
Adafruit_FRAM_I2C fram     = Adafruit_FRAM_I2C();
3
4
void setup(void)
5
{
6
  if (fram.begin(0x50, sw)) //<----- diese Zeile
7
  if (fram.begin(0x50, *sw)) //<----- diese Zeile
8
  {  
9
    Serial.println("Found I2C FRAM");
10
  } else
11
  { ...

Error: error: no matching function for call to 
'Adafruit_FRAM_I2C::begin(int, SoftWire&)'

Wie muss es richtig aussehen? Danke.

von Yalu X. (yalu) (Moderator)


Lesenswert?

Die Funktion ewartet einen Pointer, deswegen muss ein & vor sw:
1
  if (fram.begin(0x50, &sw))

Voraussetzung ist, dass SoftWire eine von TwoWire abgeleitete Klasse
ist, sonst droht die nächste Fehlermeldung.

: Bearbeitet durch Moderator
Beitrag #7428476 wurde vom Autor gelöscht.
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Frank E. schrieb:
> Wie muss es richtig aussehen? Danke.

Das wird so keiner, da dein SoftWire keine Ableitung von TwoWire ist.

Da allerdings ein FRAM keine Raketentechnik ist, kannst du dir die 
Routinen recht leicht selber schreiben.
Die Routinen für ein gleich großes EEPROM sollten fast identisch sein.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.