MCPcopy Create free account
hub / github.com/RobTillaart/Arduino / digitalWrite

Method digitalWrite

libraries/MCP23S17/MCP23S17.cpp:149–189  ·  view source on GitHub ↗

pin = 0..15 value = LOW, HIGH

Source from the content-addressed store, hash-verified

147// pin = 0..15
148// value = LOW, HIGH
149bool MCP23S17::digitalWrite(uint8_t pin, uint8_t value)
150{
151 if (pin > 15)
152 {
153 _error = MCP23S17_PIN_ERROR;
154 return false;
155 }
156 uint8_t IOR = MCP23S17_GPIO_A;
157 if (pin > 7)
158 {
159 IOR = MCP23S17_GPIO_B;
160 pin -= 8;
161 }
162
163 uint8_t val = readReg(IOR);
164 uint8_t pre = val;
165 if (_error != MCP23S17_OK)
166 {
167 return false;
168 }
169
170 uint8_t mask = 1 << pin;
171 if (value)
172 {
173 val |= mask;
174 }
175 else
176 {
177 val &= ~mask;
178 }
179 // only write when changed.
180 if (pre != val)
181 {
182 writeReg(IOR, val);
183 if (_error != MCP23S17_OK)
184 {
185 return false;
186 }
187 }
188 return true;
189}
190
191
192uint8_t MCP23S17::digitalRead(uint8_t pin)

Callers 1

unittestFunction · 0.45

Calls

no outgoing calls

Tested by 1

unittestFunction · 0.36