7 #ifndef __PCF8574Output_H__
8 #define __PCF8574Output_H__
17 template <
byte ADDRESS=0x38>
21 static void writeWire(uint8_t buffer) {
22 Wire.beginTransmission(ADDRESS);
24 Wire.endTransmission();
27 inline static void setOutput (uint8_t pin) {
28 getBuffer().mode |= bit(pin);
30 inline static void setInput (uint8_t pin) {
31 getBuffer().mode &= ~bit(pin);
33 inline static void setHigh (uint8_t pin) {
34 getBuffer().data |= bit(pin);
35 writeWire((getBuffer().data & getBuffer().mode));
37 inline static void setLow (uint8_t pin) {
38 getBuffer().data &= ~bit(pin);
39 writeWire((getBuffer().data & getBuffer().mode));
41 inline static uint8_t getState (uint8_t pin) {
42 return ((getBuffer().data & bit(pin)) == 0) ? LOW : HIGH;
44 inline static void dump () {
45 DPRINT(
"Address: "); DHEX(ADDRESS);
46 DPRINT(
" Mode: "); DHEX(getBuffer().mode);
47 DPRINT(
" Data: "); DHEXLN(getBuffer().data);
50 inline static void init () {
61 inline PCF8574Buffer& PCF8574Output<0x21>::getBuffer () {
62 static PCF8574Buffer b;
66 inline PCF8574Buffer& PCF8574Output<0x22>::getBuffer () {
67 static PCF8574Buffer b;
71 inline PCF8574Buffer& PCF8574Output<0x23>::getBuffer () {
72 static PCF8574Buffer b;
76 inline PCF8574Buffer& PCF8574Output<0x24>::getBuffer () {
77 static PCF8574Buffer b;
81 inline PCF8574Buffer& PCF8574Output<0x25>::getBuffer () {
82 static PCF8574Buffer b;
86 inline PCF8574Buffer& PCF8574Output<0x26>::getBuffer () {
87 static PCF8574Buffer b;
91 inline PCF8574Buffer& PCF8574Output<0x27>::getBuffer () {
92 static PCF8574Buffer b;
97 inline PCF8574Buffer& PCF8574Output<0x38>::getBuffer () {
98 static PCF8574Buffer b;
102 inline PCF8574Buffer& PCF8574Output<0x39>::getBuffer () {
103 static PCF8574Buffer b;
107 inline PCF8574Buffer& PCF8574Output<0x3A>::getBuffer () {
108 static PCF8574Buffer b;
112 inline PCF8574Buffer& PCF8574Output<0x3B>::getBuffer () {
113 static PCF8574Buffer b;
117 inline PCF8574Buffer& PCF8574Output<0x3C>::getBuffer () {
118 static PCF8574Buffer b;
122 inline PCF8574Buffer& PCF8574Output<0x3D>::getBuffer () {
123 static PCF8574Buffer b;
127 inline PCF8574Buffer& PCF8574Output<0x3E>::getBuffer () {
128 static PCF8574Buffer b;
132 inline PCF8574Buffer& PCF8574Output<0x3F>::getBuffer () {
133 static PCF8574Buffer b;