我有一个Arduino Mega,想将SDA和SCL引脚从A4和A5改为A14和A15。
因此,我可以从那里控制I2C LCD,我有库,但我没有看到引脚设置在哪里;但是,我想成像他们必须设置在某个地方...
我是c ++和库的新手,所以我的眼睛可能只是跳过它
答案 0 :(得分:1)
standard i2c library使用专用硬件,该硬件与某些引脚绑定。要以这种方式发送一个字节,程序会将一个字节写入某个寄存器(这将只需几个时钟周期),硬件负责在SDA引脚上逐位移位这些位并切换SCL自动固定。
您可能正在寻找的是software i2c,它在软件中实现了相同的协议,并允许您使用任意引脚。这个库很可能比标准库慢得多并且使用的资源比标准库要多:当你的程序想要发送一个字节时,库必须提取一个位,查找你定义的数据引脚,将位值写入该引脚引脚,查找您为时钟定义的引脚,切换该引脚,稍等一下,再次切换时钟,依此类推,全部使用软件。这将花费很多时间,但也许你不关心你的应用程序。
答案 1 :(得分:0)
I 2 C引脚在AVR的硬件中设置;除了使用完全不同的I 2 C总线之外,没有办法改变它们,假设MCU甚至还有其他任何一个总线。
如果您想使用硬件以外的引脚,那么您需要找到一个通过普通GPIO对I 2 C进行比特攻击的库,然后修改LCD库以便使用该库而不是硬件I 2 C。
答案 2 :(得分:0)
这个问题很老了,但是我想推荐这个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() {
}