我有一个Arduino Mega,想把SDA和SCL的引脚从A4&A5改为A14&A15。
这样我就可以从那里控制I2C液晶显示器,我有库,但我看不到引脚设置在哪里;然而,我会想象它们必须设置在某个地方……
我是c++和库的新手,所以我的眼睛可能会略过它
发布于 2014-05-22 11:16:28
standard i2c library使用与某些引脚绑定的专用硬件。要以这种方式发送一个字节,您的程序将一个字节写入某个寄存器(这只需要几个时钟周期),硬件负责将SDA引脚上的位逐个移出,并自动切换SCL引脚。
您可能正在寻找的是software i2c,它在软件中实现了相同的协议,并且应该允许您使用任意引脚。这个库可能比标准的慢得多,并且使用了更多的资源:当你的程序想要发送一个字节时,这个库必须提取单个比特,查找你定义的哪个数据管脚,将位值写入那个管脚,查找你为时钟定义的哪个管脚,切换那个管脚,稍等片刻,再次切换时钟,等等,都在软件中。这会花费很多时间,但也许你并不关心你的应用程序。
发布于 2021-04-06 16:38:24
这个问题很老了,但是我想推荐这个LiquidCrystal Software I2C库,因为我在网上没有找到很多其他的工作资源,而且这个库在软件上实现了I2C协议,所以你可以使用你的Arduino的任何输入/输出引脚。
只需在创建LiquidCrystal_I2C对象时将SDA和SCL引脚指定为第4个和第5个参数,即可实现与标准LiquidCrystal_I2C库相同的功能。
因此,例如,如果您想使用引脚3和4,分别作为SDA和SCL,则您的hello word将为:
// 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() {
}https://stackoverflow.com/questions/23796459
复制相似问题