sources and files for the bombatuino project
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

99 lines
2.4 KiB

  1. #include <Wire.h>
  2. #define MCP23017_ADDRESS 0x20
  3. // registers (from https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library/blob/master/Adafruit_MCP23017.h)
  4. #define MCP23017_IODIRA 0x00
  5. #define MCP23017_IPOLA 0x02
  6. #define MCP23017_GPINTENA 0x04
  7. #define MCP23017_DEFVALA 0x06
  8. #define MCP23017_INTCONA 0x08
  9. #define MCP23017_IOCONA 0x0A
  10. #define MCP23017_GPPUA 0x0C
  11. #define MCP23017_INTFA 0x0E
  12. #define MCP23017_INTCAPA 0x10
  13. #define MCP23017_GPIOA 0x12
  14. #define MCP23017_OLATA 0x14
  15. #define MCP23017_IODIRB 0x01
  16. #define MCP23017_IPOLB 0x03
  17. #define MCP23017_GPINTENB 0x05
  18. #define MCP23017_DEFVALB 0x07
  19. #define MCP23017_INTCONB 0x09
  20. #define MCP23017_IOCONB 0x0B
  21. #define MCP23017_GPPUB 0x0D
  22. #define MCP23017_INTFB 0x0F
  23. #define MCP23017_INTCAPB 0x11
  24. #define MCP23017_GPIOB 0x13
  25. #define MCP23017_OLATB 0x15
  26. int _addr = 0;
  27. int _value[16];
  28. void setup() {
  29. Serial.begin(9600);
  30. Wire.begin();
  31. // set defaults!
  32. Wire.beginTransmission(MCP23017_ADDRESS | _addr);
  33. Wire.write((byte)MCP23017_IODIRA);
  34. Wire.write(0xFF); // all inputs on port A
  35. Wire.endTransmission();
  36. Wire.beginTransmission(MCP23017_ADDRESS | _addr);
  37. Wire.write(MCP23017_IODIRB);
  38. Wire.write(0xFF); // all inputs on port B
  39. Wire.endTransmission();
  40. Wire.beginTransmission(MCP23017_ADDRESS | _addr);
  41. Wire.write(MCP23017_GPPUA);
  42. Wire.write(0xFF); // all pullup resistors on port A
  43. Wire.endTransmission();
  44. Wire.beginTransmission(MCP23017_ADDRESS | _addr);
  45. Wire.write(MCP23017_GPPUB);
  46. Wire.write(0xFF); // all pullup resistors on port B
  47. Wire.endTransmission();
  48. }
  49. void loop() {
  50. uint8_t pin,bank;
  51. int value;
  52. //read bank A
  53. Wire.beginTransmission(MCP23017_ADDRESS | _addr);
  54. Wire.write(MCP23017_GPIOA);
  55. Wire.endTransmission();
  56. Wire.requestFrom(MCP23017_ADDRESS | _addr, 1);
  57. bank = Wire.read();
  58. for (pin=0; pin<8; pin++) {
  59. value = (bank >> pin) & 0x1;
  60. if (_value[pin] != value) {
  61. _value[pin] = value;
  62. printValue(_addr,pin,value);
  63. }
  64. }
  65. //read bank B
  66. Wire.beginTransmission(MCP23017_ADDRESS | _addr);
  67. Wire.write(MCP23017_GPIOB);
  68. Wire.endTransmission();
  69. Wire.requestFrom(MCP23017_ADDRESS | _addr, 1);
  70. bank = Wire.read();
  71. for (pin=8; pin<16; pin++) {
  72. value = (bank >> (pin-8)) & 0x1;
  73. if (_value[pin] != value) {
  74. _value[pin] = value;
  75. printValue(_addr,pin,value);
  76. }
  77. }
  78. }
  79. void printValue(int id, int pin, int value) {
  80. Serial.print("id: ");
  81. Serial.print(id);
  82. Serial.print(" pin: ");
  83. Serial.print(pin);
  84. Serial.print(" value: ");
  85. Serial.print(value);
  86. Serial.println();
  87. }