我一直在尝试使用I2C和mcp23017 IO扩展芯片来控制我的Arduino ATMega2560,因为我希望将Arduino自身的IO用于其他事情。我正在努力学习如何使用adafruit mcp23017.h库,并且无法解决如何寻址多个mcp23017芯片和如何单独使用它们的引脚问题。这是我编辑的按钮库代码。
我想要能够寻址各个芯片和引脚,但不确定在设置过程中,如果连接了并在代码中寻址了多个芯片,IO的引脚模式是否会按顺序从0逐渐上升到15.例如,如果第一个芯片的地址为0x20并且IO号码计数从0-15,则如果我添加并寻址另一个芯片为0x21,计数是否会从0-15增加到0-31。
我想要能够寻址各个芯片和引脚,但不确定在设置过程中,如果连接了并在代码中寻址了多个芯片,IO的引脚模式是否会按顺序从0逐渐上升到15.例如,如果第一个芯片的地址为0x20并且IO号码计数从0-15,则如果我添加并寻址另一个芯片为0x21,计数是否会从0-15增加到0-31。
#include <Wire.h>
#include "Adafruit_MCP23017.h"
//pin 1 and 0 are mcp pins not arduino IO pins
Adafruit_MCP23017 mcp;
void setup() {
mcp.begin(); // use default address 0
mcp.pinMode(0, INPUT);
mcp.pinMode(1, OUTPUT);
Serial.begin(9600);
pinMode(13, OUTPUT); // use the p13 LED as debugging
}
void loop() {
// The LED will 'echo' the button
digitalWrite(13, mcp.digitalRead(0)); //Writes pin 13 to the reading of pin 0
mcp.digitalWrite(1, mcp.digitalRead(0)); //Writes pin 1 to the reading of 0
if(mcp.digitalRead(1) == HIGH){ //if pin 1 == high serialprint led whent high
Serial.println("Led whent HIGH");
}
}
void Adafruit_MCP23017::begin(uint8_t addr)
<-- 在这里,您可以提供一个地址来覆盖默认值(0)。从Adafruit_MCP23017.cpp中得知,它使用十进制0-7作为地址,而不是十六进制。mcp.begin(0x20)
应该是mcp.begin(0)
,mcp.begin(1)
等等。 - jDo