From e3a8cef1459cf3f48992ec704990f607d6add2c0 Mon Sep 17 00:00:00 2001 From: Abel Tim Date: Mon, 10 Jun 2024 17:22:59 +0200 Subject: i2c --- MCP23017/MCP23017.ino | 206 +++++++++++++++++++++++++++++++++-------- MCP23017/with_lib/with_lib.ino | 26 ------ 2 files changed, 169 insertions(+), 63 deletions(-) delete mode 100644 MCP23017/with_lib/with_lib.ino (limited to 'MCP23017') diff --git a/MCP23017/MCP23017.ino b/MCP23017/MCP23017.ino index 30c75bc..d295e7c 100644 --- a/MCP23017/MCP23017.ino +++ b/MCP23017/MCP23017.ino @@ -1,45 +1,177 @@ -//https://tronixstuff.com/2011/08/26/arduino-mcp23017-tutorial/ -//https://www.circuitbasics.com/how-to-use-an-mpc23017-port-expander-on-the-arduino/ -//https://ww1.microchip.com/downloads/en/devicedoc/20001952c.pdf +#include +#define ir1 0 // GPA0 +#define ir2 1 // GPA1 +#define ir3 2 // GPA2 +#define ir4 3 // GPA3 +#define ir5 4 // GPA4 +#define ir6 5 // GPA5 +#define ir7 6 // GPA6 +#define ir8 7 // GPA7 +#define ir9 8 // GPB0 +#define ir10 9 // GPB1 +#define ir11 10 // GPB2 +#define ir12 11 // GPB3 +#define ir13 12 // GPB4 +#define ir14 13 // GPB5 +#define ir15 14 // GPB6 +#define ir16 15 // GPB7 +int dir1 = 1; // data IR1 +int dir2 = 1; // data IR2 +int dir3 = 1; // etc +int dir4 = 1; +int dir5 = 1; +int dir6 = 1; +int dir7 = 1; +int dir8 = 1; +int dir9 = 1; +int dir10 = 1; +int dir11 = 1; +int dir12 = 1; +int dir13 = 1; +int dir14 = 1; +int dir15 = 1; +int dir16 = 1; -#include -byte BbyteVal=0; -byte AbyteVal=0; -byte chipAddr = 0x20; -byte GPIOA = 0x12; // PortA reg addr -byte GPIOB = 0x13; // PortB reg addr -byte IODIRA = 0x00; // PortA direction reg addr -byte IODIRB = 0x01; // PortB direction reg addr +int dir17 = 1; // data IR17 +int dir18 = 1; // data IR18 +int dir19 = 1; // etc +int dir20 = 1; +int dir21 = 1; +int dir22 = 1; +int dir23 = 1; +int dir24 = 1; +int dir25 = 1; +int dir26 = 1; +int dir27 = 1; +int dir28 = 1; +int dir29 = 1; +int dir30 = 1; +int dir31 = 1; +int dir32 = 1; -void setup(){ +// Instance for the first MCP23017 at address 0x20 +Adafruit_MCP23X17 mcp1; + +// Instance for the second MCP23017 at address 0x22 +Adafruit_MCP23X17 mcp2; + +void setup() { Serial.begin(9600); - Wire.begin(); - - Wire.beginTransmission(chipAddr); - Wire.write(IODIRA); // IODIRA dir register - Wire.write(0xff); // set entire PORT A as output - Wire.endTransmission(); - - Wire.beginTransmission(chipAddr); - Wire.write(IODIRB); // IODIRB dir register - Wire.write(0xff); // set entire PORT B as input - Wire.endTransmission(); + while (!Serial); + Serial.println("MCP23xxx Button Test!"); + + // Initialize first MCP23017 with I2C address 0x20 + if (!mcp1.begin_I2C(0x20)) { + Serial.println("Error initializing MCP23017 at 0x20."); + while (1); } -void loop(){ - Wire.beginTransmission(chipAddr); - Wire.write(GPIOB); // read the inputs off PORT B - Wire.requestFrom(chipAddr, 1); // ask for 1 byte - BbyteVal = Wire.read(); // read it - Wire.endTransmission(); - Serial.println(BbyteVal); - - Wire.beginTransmission(chipAddr); - Wire.write(GPIOB); // read the inputs off PORT B - Wire.requestFrom(chipAddr, 1); // ask for 1 byte - AbyteVal = Wire.read(); // read it - Wire.endTransmission(); - Serial.println(AbyteVal); + // Initialize second MCP23017 with I2C address 0x22 + if (!mcp2.begin_I2C(0x22)) { + Serial.println("Error initializing MCP23017 at 0x22."); + while (1); + } + + // Configure pins for the first MCP23017 (0x20) + mcp1.pinMode(ir1, INPUT); + mcp1.pinMode(ir2, INPUT); + mcp1.pinMode(ir3, INPUT); + mcp1.pinMode(ir4, INPUT); + mcp1.pinMode(ir5, INPUT); + mcp1.pinMode(ir6, INPUT); + mcp1.pinMode(ir7, INPUT); + mcp1.pinMode(ir8, INPUT); + mcp1.pinMode(ir9, INPUT); + mcp1.pinMode(ir10, INPUT); + mcp1.pinMode(ir11, INPUT); + mcp1.pinMode(ir12, INPUT); + mcp1.pinMode(ir13, INPUT); + mcp1.pinMode(ir14, INPUT); + mcp1.pinMode(ir15, INPUT); + mcp1.pinMode(ir16, INPUT); + + // Configure pins for the second MCP23017 (0x22) + mcp2.pinMode(ir1, INPUT); + mcp2.pinMode(ir2, INPUT); + mcp2.pinMode(ir3, INPUT); + mcp2.pinMode(ir4, INPUT); + mcp2.pinMode(ir5, INPUT); + mcp2.pinMode(ir6, INPUT); + mcp2.pinMode(ir7, INPUT); + mcp2.pinMode(ir8, INPUT); + mcp2.pinMode(ir9, INPUT); + mcp2.pinMode(ir10, INPUT); + mcp2.pinMode(ir11, INPUT); + mcp2.pinMode(ir12, INPUT); + mcp2.pinMode(ir13, INPUT); + mcp2.pinMode(ir14, INPUT); + mcp2.pinMode(ir15, INPUT); + mcp2.pinMode(ir16, INPUT); + + Serial.println("Looping..."); +} + +void loop() { + // Read pins from the first MCP23017 (0x20) + dir1 = mcp1.digitalRead(ir1); + dir2 = mcp1.digitalRead(ir2); + dir3 = mcp1.digitalRead(ir3); + dir4 = mcp1.digitalRead(ir4); + dir5 = mcp1.digitalRead(ir5); + dir6 = mcp1.digitalRead(ir6); + dir7 = mcp1.digitalRead(ir7); + dir8 = mcp1.digitalRead(ir8); + dir9 = mcp1.digitalRead(ir9); + dir10 = mcp1.digitalRead(ir10); + dir11 = mcp1.digitalRead(ir11); + dir12 = mcp1.digitalRead(ir12); + dir13 = mcp1.digitalRead(ir13); + dir14 = mcp1.digitalRead(ir14); + dir15 = mcp1.digitalRead(ir15); + dir16 = mcp1.digitalRead(ir16); + + // Read pins from the second MCP23017 (0x22) + dir17 = mcp2.digitalRead(ir1); + dir18 = mcp2.digitalRead(ir2); + dir19 = mcp2.digitalRead(ir3); + dir20 = mcp2.digitalRead(ir4); + dir21 = mcp2.digitalRead(ir5); + dir22 = mcp2.digitalRead(ir6); + dir23 = mcp2.digitalRead(ir7); + dir24 = mcp2.digitalRead(ir8); + dir25 = mcp2.digitalRead(ir9); + dir26 = mcp2.digitalRead(ir10); + dir27 = mcp2.digitalRead(ir11); + dir28 = mcp2.digitalRead(ir12); + dir29 = mcp2.digitalRead(ir13); + dir30 = mcp2.digitalRead(ir14); + dir31 = mcp2.digitalRead(ir15); + dir32 = mcp2.digitalRead(ir16); + + // Print the results from the first MCP23017 (0x20) + Serial.print("MCP23017 @ 0x20: "); + Serial.print(dir1); Serial.print(", "); Serial.print(dir2); + Serial.print(", "); Serial.print(dir3); Serial.print(", "); Serial.print(dir4); + Serial.print(", "); Serial.print(dir5); Serial.print(", "); Serial.print(dir6); + Serial.print(", "); Serial.print(dir7); Serial.print(", "); Serial.print(dir8); + Serial.print(", "); Serial.print(dir9); Serial.print(", "); Serial.print(dir10); + Serial.print(", "); Serial.print(dir11); Serial.print(", "); Serial.print(dir12); + Serial.print(", "); Serial.print(dir13); Serial.print(", "); Serial.print(dir14); + Serial.print(", "); Serial.print(dir15); Serial.print(", "); Serial.print(dir16); + + // Print the results from the second MCP23017 (0x22) + Serial.print(" MCP23017 @ 0x22: "); + Serial.print(dir17); Serial.print(", "); Serial.print(dir18); + Serial.print(", "); Serial.print(dir19); Serial.print(", "); Serial.print(dir20); + Serial.print(", "); Serial.print(dir21); Serial.print(", "); Serial.print(dir22); + Serial.print(", "); Serial.print(dir23); Serial.print(", "); Serial.print(dir24); + Serial.print(", "); Serial.print(dir25); Serial.print(", "); Serial.print(dir26); + Serial.print(", "); Serial.print(dir27); Serial.print(", "); Serial.print(dir28); + Serial.print(", "); Serial.print(dir29); Serial.print(", "); Serial.print(dir30); + Serial.print(", "); Serial.print(dir31); Serial.print(", "); Serial.println(dir32); + + Serial.println(); + delay(250); } diff --git a/MCP23017/with_lib/with_lib.ino b/MCP23017/with_lib/with_lib.ino deleted file mode 100644 index 98d36b8..0000000 --- a/MCP23017/with_lib/with_lib.ino +++ /dev/null @@ -1,26 +0,0 @@ -/** Inputs.ino - * Sets port 7 on bank B to INPUT_PULLUP and copies its - * state to the built-in LED on the board - * https://github.com/ndomx/MCP23017-Arduino-Library - */ - -#include - -#define MCP_ADDR (0) - -MCP23017 mcp(MCP_ADDR); - -void setup(void){ - Serial.begin(9600); - pinMode(LED_BUILTIN, OUTPUT); - - mcp.start(); - mcp.pinMode(GPB7, INPUT_PULLUP); -} - -void loop(void){ - byte mcp_input = mcp.digitalRead(GPB7); - digitalWrite(LED_BUILTIN, mcp_input); - Serial.println(mcp_input); - delay(500); -} -- cgit v1.2.3