我有一个 Arduino Mega,想将 SDA&SCL 引脚从 A4&A5 更改为 A14&A15。
这样我就可以从那里控制 I2C LCD,我有库,但看不到引脚设置在哪里;但是,我会想象它们必须设置在某个地方......
我是 C++ 和库的新手,所以我的眼睛可能只是跳过它
标准 i2c 库使用与特定引脚绑定的专用硬件。要以这种方式发送一个字节,您的程序将一个字节写入某个寄存器(这将只需要几个时钟周期),硬件负责将 SDA 引脚上的位逐个移出并切换 SCL自动固定。
您可能正在寻找的是软件 i2c,它在软件中实现了相同的协议,并且应该允许您使用任意引脚。这个库很可能比标准库慢得多并且使用更多资源:当您的程序想要发送一个字节时,该库必须提取一个位,查找您定义的数据引脚,将位值写入该引脚引脚,查找您为时钟定义的引脚,切换该引脚,稍等,再次切换时钟等等,所有这些都在软件中。这将花费大量时间,但也许您不在乎您的应用程序。
I 2 C 引脚在 AVR 的硬件中设置;除了使用完全不同的 I 2 C 总线之外,没有其他方法可以更改它们,假设 MCU 甚至首先有任何其他总线。
如果您想使用硬件中可用的引脚以外的引脚,那么您需要找到一个库,该库可以通过普通 GPIO 对 I 2 C 进行位爆炸,然后修改 LCD 库以使用该库而不是硬件 I 2 C。
这个问题很老了,但我想推荐这个LiquidCrystal Software I2C库,因为我没有在网上找到很多其他工作资源,而且这个库在软件中实现了 I2C 协议,所以你可以使用你的 Arduino 的任何输入/输出引脚.
只需在创建 LiquidCrystal_I2C 对象时将 SDA 和 SCL 引脚指定为第 4 和第 5 个参数,然后具有与标准 LiquidCrystal_I2C 库相同的功能。
因此,例如,如果您想使用引脚 3 和 4,分别作为 SDA 和 SCL,您的问候语将是:
// https://github.com/francesco-scar/LiquidCrystal_Software_I2C
// Based on https://github.com/johnrickman/LiquidCrystal_I2C project
#include <LiquidCrystal_Software_I2C.h> // Include library
LiquidCrystal_I2C lcd(0x3f, 16, 2, 3, 4); // Set the LCD address to 0x27 for a 16 chars and 2 line display
void setup() {
lcd.init(); // LCD initialization
lcd.backlight(); // Turn on backlight
lcd.print("Hello, world!"); // Print Hello, world!
}
void loop() {
}