Не удается изменить контакты в коде AM2320, несоответствие типов
Я взял простой датчик температуры 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 ответ
Лучший ответ:
Две проблемы:
- Когда вы создаете экземпляр объекта без параметров, у вас не должно быть круглых скобок. Вы должны построить таким образом:
TwoWire mywire;
- Конструктор ожидает указатель на объект, а не на сам объект. Просто возьмите адрес объекта с
помощью &
и передайте это:
Adafruit_AM2320 am2320 = Adafruit_AM2320(&mywire, -1, -1); // в качестве значений по умолчанию
Однако
Большинство плат Arduino имеют контакты I2C, жестко подключенные к микросхеме, и их нельзя изменить. Вам нужно будет использовать некоторую форму программной реализации, которая также является полиморфным дочерним элементом
класса TwoWire. Если такая вещь существует.
- Не нашел датчик отпечатков пальцев :( Arduino Mega 2560 Adafruit Fingerprint Sensor
- Почему Adafruit motor shield не крутит моторы?
- Какие компоненты мне нужны маленького GPS-трекера
- Статус выхода 1 ожидаемое первичное выражение перед ']' Arduino
- Ошибка 'Serial' was not declared in this scope
- Есть ли функция Adafruit для инвертирования цветов моего экрана для языка Arduino?
- Библиотека программных материалов для плат SAMD
- В чем разница между выводами SCLK и CLK?