#include <SPI.h>
#include <mcp23s17.h> // import library
#include <keyboard.h>
//define CS pin and using HAEN or not
//to use HAEN, address should be 0x20 to 0x27
mcp23s17 mcp0(10,0x20,30000000);//instance (address A0,A1,A2 tied to GND)
mcp23s17 mcp1(10,0x21,30000000);//A0 +ve, A1 gnd, A2 gnd
mcp23s17 mcp2(10,0x22,30000000);//A0 gnd, A1 +ve, A2 gnd
mcp23s17 mcp3(10,0x23,30000000);//A0 +ve, A1 +ve, A2 gnd
mcp23s17 mcp4(10,0x24,30000000);//A0 gnd, A1 gnd, A2 +ve
mcp23s17 mcp5(10,0x25,30000000);//A0 +ve, A1 gnd, A2 +ve
mcp23s17 mcp6(10,0x26,30000000);//A0 gnd, A1 +ve, A2 +ve
mcp23s17 mcp7(10,0x27,30000000);//all three positive
void setup(){
Keyboard.begin();
Serial.begin(9600);
while (!Serial) ;
SPI.setSCK(14);//avoid the led pin 13
int ChipZeroPinZero = 0;
int ChipZeroPinOne = 0;
mcp0.begin();//x.begin(1) will override automatic SPI initialization
mcp0.gpioPinMode(INPUT);
mcp1.begin();//x.begin(1) will override automatic SPI initialization
mcp1.gpioPinMode(INPUT);
mcp0.gpioRegisterWriteByte(mcp0.IODIR,0b11111111, true);
mcp0.gpioRegisterWriteByte(mcp0.IOCON, 0b00101000);//HAEN,SEQOP,MIRROR -remove mirror (ie INT pin connection)
mcp0.gpioRegisterWriteByte(mcp0.GPPU, 0xff, true);//pull-up only required input pins?
mcp1.gpioRegisterWriteByte(mcp1.IODIR,0b11111111, true);
mcp1.gpioRegisterWriteByte(mcp1.IOCON, 0b00101000);//HAEN,SEQOP,MIRROR -remove mirror (ie INT pin connection)
mcp1.gpioRegisterWriteByte(mcp1.GPPU, 0xff, true);//pull-up only required input pins?
mcp6.gpioRegisterWriteByte(mcp6.IODIR,0b00000000, true);
mcp6.gpioRegisterWriteByte(mcp6.IOCON, 0b00101000);//HAEN,SEQOP,MIRROR -remove mirror (ie INT pin connection)
mcp6.gpioRegisterWriteByte(mcp6.GPPU, 0xff, true);//pull-up only required input pins?
//----- Chip One -------
int ChipOnePinZero = 0;
int ChipOnePinOne = 0;
mcp1.begin();//x.begin(1) will override automatic SPI initialization
mcp1.gpioPinMode(INPUT);
// ------- Outputs for LED's ? --------
mcp6.begin(); // maybe output
mcp6.gpioPinMode(OUTPUT);
mcp7.begin(); // maybe output
mcp7.gpioPinMode(OUTPUT);
}
void loop(){
int ChipZeroPinZero = mcp0.gpioDigitalRead(0);
if (ChipZeroPinZero == 1)
{
Serial.println ("C0P0 is ON");
// Serial.print('\n');
// Keyboard.print('A');
Serial.print('A');
Serial.println();
}
else
{
Serial.println("C0P0 is OFF");
Serial.print('\n');
}
int ChipZeroPinOne= mcp0.gpioDigitalRead(1);
if (ChipZeroPinOne == 1)
{
Serial.println ("C0P1 is ON");
}
else
{
Serial.println("C0P1 is OFF");
Serial.print('\n');
}
//---------- Chip One -----------
int ChipOnePinZero = mcp1.gpioDigitalRead(0);
if (ChipOnePinZero == 1)
{
Serial.println ("C1P0 is ON");
// I get this when I cycle the CRS dial and hit the A,B,C,D,E,F
// G,H,I,J,1 or 2 button
}
else
{
Serial.println("C1P0 is OFF");
}
int portReadZero = mcp0.readGpioPort();
Serial.println (portReadZero,BIN);
int portReadSix = mcp6.readGpioPort();
Serial.println (portReadSix,BIN);
delay(1000);
}