void LED_Port::on() | void LED_Port::on() | ||||
{ | { | ||||
refPort.setHigh(pin); | |||||
refPort.writeHigh(pin); | |||||
} | } | ||||
void LED_Port::off() | void LED_Port::off() | ||||
{ | { | ||||
refPort.setLow(pin); | |||||
refPort.writeLow(pin); | |||||
} | } |
public: | public: | ||||
virtual void beginProtocol()=0; //SPI bus or I2C bus | virtual void beginProtocol()=0; //SPI bus or I2C bus | ||||
virtual void begin(const uint8_t activeState)=0; //configure GPIO pins | virtual void begin(const uint8_t activeState)=0; //configure GPIO pins | ||||
virtual void setLow(const uint8_t pin)=0; | |||||
virtual void setHigh(const uint8_t pin)=0; | |||||
virtual void writeLow(const uint8_t pin)=0; | |||||
virtual void writeHigh(const uint8_t pin)=0; | |||||
virtual uint8_t read()=0; | virtual uint8_t read()=0; | ||||
}; | }; | ||||
#endif | #endif |
class PortWriteInterface | class PortWriteInterface | ||||
{ | { | ||||
public: | public: | ||||
virtual void setLow(const uint8_t pin)=0; | |||||
virtual void setHigh(const uint8_t pin)=0; | |||||
virtual void writeLow(const uint8_t pin)=0; | |||||
virtual void writeHigh(const uint8_t pin)=0; | |||||
}; | }; | ||||
#endif | #endif |
Wire.endTransmission(); | Wire.endTransmission(); | ||||
} | } | ||||
/* setLow() sets pin output LOW. | |||||
/* writeLow() sets pin output LOW. | |||||
pin is bit pattern, where pin being set is 1. | pin is bit pattern, where pin being set is 1. | ||||
*/ | */ | ||||
void Port_MCP23018::setLow(const uint8_t pin) | |||||
void Port_MCP23018::writeLow(const uint8_t pin) | |||||
{ | { | ||||
outputVal &= ~pin; //set pin output to low | outputVal &= ~pin; //set pin output to low | ||||
Wire.endTransmission(); | Wire.endTransmission(); | ||||
} | } | ||||
/* setHigh() sets pin output HIGH. | |||||
/* writeHigh() sets pin output HIGH. | |||||
pin is bit pattern, where pin being set is 1. | pin is bit pattern, where pin being set is 1. | ||||
*/ | */ | ||||
void Port_MCP23018::setHigh(const uint8_t pin) | |||||
void Port_MCP23018::writeHigh(const uint8_t pin) | |||||
{ | { | ||||
outputVal |= pin; //set pin output to high | outputVal |= pin; //set pin output to high | ||||
: deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {} | : deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {} | ||||
void beginProtocol(); | void beginProtocol(); | ||||
void begin(const uint8_t activeState); | void begin(const uint8_t activeState); | ||||
virtual void setLow(const uint8_t pin); | |||||
virtual void setHigh(const uint8_t pin); | |||||
virtual void writeLow(const uint8_t pin); | |||||
virtual void writeHigh(const uint8_t pin); | |||||
virtual uint8_t read(); | virtual uint8_t read(); | ||||
}; | }; | ||||
#endif | #endif |
transfer(deviceAddr << 1, portNum + 0x0C, pullUp); //configure GPPU | transfer(deviceAddr << 1, portNum + 0x0C, pullUp); //configure GPPU | ||||
} | } | ||||
/* setLow() sets pin output LOW. | |||||
/* writeLow() sets pin output LOW. | |||||
pin is bit pattern, where pin being set is 1. | pin is bit pattern, where pin being set is 1. | ||||
*/ | */ | ||||
void Port_MCP23S17::setLow(const uint8_t pin) | |||||
void Port_MCP23S17::writeLow(const uint8_t pin) | |||||
{ | { | ||||
outputVal &= ~pin; //set pin output to low | outputVal &= ~pin; //set pin output to low | ||||
transfer(deviceAddr << 1, portNum + 0x12, outputVal); //set GPIO port to outputVal | transfer(deviceAddr << 1, portNum + 0x12, outputVal); //set GPIO port to outputVal | ||||
} | } | ||||
/* setHigh() sets pin output HIGH. | |||||
/* writeHigh() sets pin output HIGH. | |||||
pin is bit pattern, where pin being set is 1. | pin is bit pattern, where pin being set is 1. | ||||
*/ | */ | ||||
void Port_MCP23S17::setHigh(const uint8_t pin) | |||||
void Port_MCP23S17::writeHigh(const uint8_t pin) | |||||
{ | { | ||||
outputVal |= pin; //set pin output to high | outputVal |= pin; //set pin output to high | ||||
transfer(deviceAddr << 1, portNum + 0x12, outputVal); //set GPIO port to outputVal | transfer(deviceAddr << 1, portNum + 0x12, outputVal); //set GPIO port to outputVal |
: deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {} | : deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {} | ||||
void beginProtocol(); | void beginProtocol(); | ||||
void begin(const uint8_t activeState); | void begin(const uint8_t activeState); | ||||
virtual void setLow(const uint8_t pin); | |||||
virtual void setHigh(const uint8_t pin); | |||||
virtual void writeLow(const uint8_t pin); | |||||
virtual void writeHigh(const uint8_t pin); | |||||
virtual uint8_t read(); | virtual uint8_t read(); | ||||
}; | }; | ||||
#endif | #endif |
Wire.endTransmission(); | Wire.endTransmission(); | ||||
} | } | ||||
/* setLow() sets pin output LOW. | |||||
/* writeLow() sets pin output LOW. | |||||
pin is bit pattern, where pin being set is 1. | pin is bit pattern, where pin being set is 1. | ||||
*/ | */ | ||||
void Port_PCA9655E::setLow(const uint8_t pin) | |||||
void Port_PCA9655E::writeLow(const uint8_t pin) | |||||
{ | { | ||||
outputVal &= ~pin; //set pin output to low | outputVal &= ~pin; //set pin output to low | ||||
Wire.endTransmission(); | Wire.endTransmission(); | ||||
} | } | ||||
/* setHigh() sets pin output HIGH. | |||||
/* writeHigh() sets pin output HIGH. | |||||
pin is bit pattern, where pin being set is 1. | pin is bit pattern, where pin being set is 1. | ||||
*/ | */ | ||||
void Port_PCA9655E::setHigh(const uint8_t pin) | |||||
void Port_PCA9655E::writeHigh(const uint8_t pin) | |||||
{ | { | ||||
outputVal |= pin; //set pin output to high | outputVal |= pin; //set pin output to high | ||||
: deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {} | : deviceAddr(deviceAddr), portNum(portNum), outputVal(0), readPins(readPins) {} | ||||
void beginProtocol(); | void beginProtocol(); | ||||
void begin(const uint8_t activeState); | void begin(const uint8_t activeState); | ||||
virtual void setLow(const uint8_t pin); | |||||
virtual void setHigh(const uint8_t pin); | |||||
virtual void writeLow(const uint8_t pin); | |||||
virtual void writeHigh(const uint8_t pin); | |||||
virtual uint8_t read(); | virtual uint8_t read(); | ||||
}; | }; | ||||
#endif | #endif |
SPI.begin(); | SPI.begin(); | ||||
} | } | ||||
/* setLow() sets pin output LOW. | |||||
/* writeLow() sets pin output LOW. | |||||
pin is bit pattern, where pin being set is 1. | pin is bit pattern, where pin being set is 1. | ||||
*/ | */ | ||||
void Port_ShiftRegs::setLow(const uint8_t pin) | |||||
void Port_ShiftRegs::writeLow(const uint8_t pin) | |||||
{ | { | ||||
outputVal &= ~pin; //set pin output to low | outputVal &= ~pin; //set pin output to low | ||||
digitalWrite (slaveSelect, HIGH); | digitalWrite (slaveSelect, HIGH); | ||||
} | } | ||||
/* setHigh() sets pin output HIGH. | |||||
/* writeHigh() sets pin output HIGH. | |||||
pin is bit pattern, where pin being set is 1. | pin is bit pattern, where pin being set is 1. | ||||
*/ | */ | ||||
void Port_ShiftRegs::setHigh(const uint8_t pin) | |||||
void Port_ShiftRegs::writeHigh(const uint8_t pin) | |||||
{ | { | ||||
outputVal |= pin; //set pin output to high | outputVal |= pin; //set pin output to high | ||||
public: | public: | ||||
Port_ShiftRegs(const uint8_t slaveSelect); | Port_ShiftRegs(const uint8_t slaveSelect); | ||||
void begin(); | void begin(); | ||||
void setLow(const uint8_t pin); | |||||
void setHigh(const uint8_t pin); | |||||
void writeLow(const uint8_t pin); | |||||
void writeHigh(const uint8_t pin); | |||||
}; | }; | ||||
#endif | #endif |
//strobe on | //strobe on | ||||
if (activeState == LOW) //if active low | if (activeState == LOW) //if active low | ||||
{ | { | ||||
refPortWrite.setLow(strobePin); | |||||
refPortWrite.writeLow(strobePin); | |||||
} | } | ||||
else //if active high | else //if active high | ||||
{ | { | ||||
refPortWrite.setHigh(strobePin); | |||||
refPortWrite.writeHigh(strobePin); | |||||
} | } | ||||
delayMicroseconds(3); //time to stabilize voltage | delayMicroseconds(3); //time to stabilize voltage | ||||
//strobe off | //strobe off | ||||
if (activeState == LOW) //if active low | if (activeState == LOW) //if active low | ||||
{ | { | ||||
refPortWrite.setHigh(strobePin); | |||||
refPortWrite.writeHigh(strobePin); | |||||
readState = ~readState; | readState = ~readState; | ||||
} | } | ||||
else //if active high | else //if active high | ||||
{ | { | ||||
refPortWrite.setLow(strobePin); | |||||
refPortWrite.writeLow(strobePin); | |||||
} | } | ||||
return readState; | return readState; |