我有一个项目,涉及通过I2C开关(PCA9548)与OneWire芯片(DS2431)进行通信。我要做的是正确配置开关(只需将一个字节写入其状态寄存器),然后使用mbed SDA引脚进行OneWire通信。交换机并不关心SDA线(它甚至可以双向传输直流电),我已经用OneWire成功地对其进行了测试。问题是在同一引脚上将软件从I2C切换到OneWire。
我已经尝试了一种简单的方法:先创建一个全局I2C实例,然后创建一个OneWire实例,但是最后一个实例总是破坏前一个实例,以便我可以使用I2C或OneWire。有没有办法破坏一个实例并再次创建它?
最佳答案
您可以通过几种方法进行处理,但最简单的方法之一是在主函数中声明I2C和OneWire实例。
如果您需要在main之外访问OneWire实例,则可以将其分配给指针。
这是一些伪代码:
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();
}
关于c++ - 如何在mbed的同一引脚上从I2C切换到OneWire?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35990331/