Как я могу переключиться с 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();
}