#include #include #include Adafruit_MCP23017 mcp; byte ledPin=13; byte InteruptPinA=1; byte InteruptPinB=3; byte arduinoInterrupt=1; FlowMeter sensor[12]= volatile boolean awakenByInterrupt = false; // Two pins at the MCP (Ports A/B where some buttons have been setup.) // Buttons connect the pin to grond, and pins are pulled up. byte mcpPinA=7; byte mcpPinB=15; void setup(){ pinMode(1, FUNCTION_3); pinMode(3, FUNCTION_3); pinMode(arduinoIntPin,INPUT); mcp.begin(); // use default address 0 mcp.setupInterrupts(true,false,LOW); // configuration for a button on port A mcp.pinMode(mcpPinA, INPUT); // mcp.pullUp(mcpPinA, HIGH); // turn on a 100K pullup internally mcp.setupInterruptPin(mcpPinA,RISING); mcp.pinMode(mcpPinB, INPUT); // mcp.pullUp(mcpPinB, HIGH); // turn on a 100K pullup internall mcp.setupInterruptPin(mcpPinB,RISING); // We will setup a pin for flashing from the int routine pinMode(ledPin, OUTPUT); } // The int handler will just signal that the int has happen // we will do the work from the main loop. void intCallBack(){ awakenByInterrupt=true; } void handleInterrupt(){ // Get more information from the MCP from the INT uint8_t pin=mcp.getLastInterruptPin(); uint8_t val=mcp.getLastInterruptPinValue(); // We will flash the led 1 or 2 times depending on the PIN that triggered the Interrupt // 3 and 4 flases are supposed to be impossible conditions... just for debugging. uint8_t flashes=4; if(pin==mcpPinA) flashes=1; if(pin==mcpPinB) flashes=2; if(val!=LOW) flashes=3; // simulate some output associated to this for(int i=0;i