Controll MCP23S17 as GPIO
Diff: ExioMcp23s17DigitalIn.h
- Revision:
- 3:aaea541bdbf9
- Child:
- 4:4a8ba9d9926b
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ExioMcp23s17DigitalIn.h Sun Oct 30 14:17:37 2016 +0000 @@ -0,0 +1,55 @@ +/* + * ExioDigitalIn.h + * + * Created: 2016.10.30 + * + */ + +#ifndef _EXIOMCP2317SDIGITALIN_H_ +#define _EXIOMCP2317SDIGITALIN_H_ + +#include "mbed.h" +#include "ExioMcp23s17.h" + +class ExioMcp23s17DigitalIn { +public: + ExioMcp23s17DigitalIn(ExioMcp23s17& _device, ExioPort _port, int _pin) : + device(_device), + port(_port), + pin(_pin) + { + // set as input + uint8_t tmp = device.ioDirection(port); + device.ioDirection(port, tmp | (1 << pin)); + //printf("pin:%d port:%d %d\r\n", pin, port, device.ioDirection(port)); + } + + void mode(PinMode pull) + { + uint8_t tmp = device.ioPullup(port); + switch (pull) { + case PullUp: + device.ioPullup(port, tmp | (1 << pin)); + break; + case PullNone: + device.ioPullup(port, tmp & ~(1 << pin)); + break; + default: + error("PinMode must be PullUp or PullNone"); + } + } + + int read() + { + uint8_t data = device.readPort(port); + int bv = data & (1 << pin); + return bv ? 1 : 0; + } + +protected: + ExioMcp23s17 device; + ExioPort port; + int pin; +}; + +#endif //_EXIOMCP2317SDIGITALIN_H_