Как я могу переключиться с I2C на OneWire на тот же контакт на mbed?

У меня есть проект, который предполагает общение с чипами OneWire (DS2431) через коммутатор I2C (PCA9548). Что я хочу сделать, это правильно настроить коммутатор (просто записать байт в его регистр состояния), а затем использовать вывод SDB mbed для связи OneWire. Коммутатор не заботится о линии SDA (он может даже пропускать постоянный ток в обоих направлениях), и я успешно протестировал его с OneWire. Проблема заключается в переключении программного обеспечения с I2C на OneWire на одном контакте.
Я попробовал это простым способом: создать глобальный экземпляр I2C, а затем экземпляр OneWire, но последний всегда перебивает предыдущий, так что я могу использовать либо I2C, либо OneWire. Есть ли способ уничтожить один экземпляр и создать его снова?

1 ответ

Решение

Вы можете сделать это несколькими способами, но один из самых простых способов - объявить экземпляр I2C и OneWire внутри вашей основной функции.

Если вам нужен доступ к экземпляру OneWire вне main, вы можете назначить его указателю.

Вот некоторый псевдокод:

OneWire *oneWireGlobal;

void func1() {
    oneWireGlobal->writeBit(0xFF);
}

void main() {
    I2C i2c(I2C_SDA, I2C_SCL);

    [I2C operations here...]

    OneWire oneWire(I2C_SDA);
    oneWireGlobal = &oneWire; // Be sure to do this before accessing "oneWireGlobal"

    [oneWire operations here...]

    func1();
}
Другие вопросы по тегам