Не удается изменить контакты в коде AM2320, несоответствие типов

adafruit cpp

Я взял простой датчик температуры A2320 и подключил его не к контактам A4/A5, а к контактам A1/A0. SDA => A1, SCL => A0. (В коде C они имеют номера 15 и 14). Но я не могу позвонить в библиотеку, чтобы забрать эти контакты.

В базовом примере из библиотеки используются значения по умолчанию, вероятно, из какого-то учебника.

Я читаю файлы .h и .cpp и вижу эти определения:

Adafruit_AM2320::Adafruit_AM2320(TwoWire *theI2C, int32_t tempSensorId,
                                 int32_t humiditySensorId)
    : _temp(this, tempSensorId), _humidity(this, humiditySensorId),
      _i2c(theI2C) {}

bool Adafruit_AM2320::begin() {
  _i2caddr = 0x5C; // исправлен addr
  _i2c->begin();
  return true;
}

Я просто пытался сделать так, чтобы типы совпадали. Даже номера порта нет.

Я объявил экземпляр TwoWire и передал его конструктору AM2320, но безуспешно:

#include "Wire.h"
...
TwoWire mywire();
Adafruit_AM2320 am2320 = Adafruit_AM2320(mywire, -1, -1); // в качестве значений по умолчанию

Выводит в журнале ошибок:

error: no matching function for call to 'Adafruit_AM2320::Adafruit_AM2320(TwoWire (*)(), int, int)'
    Adafruit_AM2320 am2320 = Adafruit_AM2320(&mywire, -1, -1);
In file included from testproj.ino:2:0:
...Adafruit_AM2320.h:52:3: note: candidate: Adafruit_AM2320::Adafruit_AM2320(TwoWire*, int32_t, int32_t)
   Adafruit_AM2320(TwoWire *theI2C = &Wire, int32_t tempSensorId = -1,
   ^~~~~~~~~~~~~~~
...Adafruit_AM2320.h:52:3: note:   no known conversion for argument 1 from 'TwoWire (*)()' to 'TwoWire*'

Что я делаю не так?

, 👍0


1 ответ


Лучший ответ:

1

Две проблемы:

  1. Когда вы создаете экземпляр объекта без параметров, у вас не должно быть круглых скобок. Вы должны построить таким образом:
TwoWire mywire;
  1. Конструктор ожидает указатель на объект, а не на сам объект. Просто возьмите адрес объекта с помощью & и передайте это:
Adafruit_AM2320 am2320 = Adafruit_AM2320(&mywire, -1, -1); // в качестве значений по умолчанию

Однако

Большинство плат Arduino имеют контакты I2C, жестко подключенные к микросхеме, и их нельзя изменить. Вам нужно будет использовать некоторую форму программной реализации, которая также является полиморфным дочерним элементом класса TwoWire. Если такая вещь существует.

,