Skip to content

Commit fa8c1a6

Browse files
authored
Merge pull request #395 from KurtE/shiftIn_shiftOut
core: arduino: add ShiftIn/ShiftOut implementation
2 parents 720b556 + 62a9701 commit fa8c1a6

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

cores/arduino/wiring_shift.cpp

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright (c) 2026 KurtE
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
#include <Arduino.h>
7+
8+
uint8_t shiftIn(pin_size_t dataPin, uint8_t clockPin, BitOrder bitOrder) {
9+
uint8_t value = 0;
10+
uint8_t mask;
11+
12+
if (bitOrder == LSBFIRST) {
13+
for (mask = 0x01; mask; mask <<= 1) {
14+
digitalWrite(clockPin, HIGH);
15+
if (digitalRead(dataPin)) {
16+
value |= mask;
17+
}
18+
digitalWrite(clockPin, LOW);
19+
}
20+
} else {
21+
for (mask = 0x80; mask; mask >>= 1) {
22+
digitalWrite(clockPin, HIGH);
23+
if (digitalRead(dataPin)) {
24+
value |= mask;
25+
}
26+
digitalWrite(clockPin, LOW);
27+
}
28+
}
29+
30+
return value;
31+
}
32+
33+
void shiftOut(pin_size_t dataPin, uint8_t clockPin, BitOrder bitOrder, uint8_t val) {
34+
uint8_t mask;
35+
36+
if (bitOrder == LSBFIRST) {
37+
for (mask = 0x01; mask; mask <<= 1) {
38+
digitalWrite(dataPin, !!(val & mask) ? HIGH : LOW);
39+
digitalWrite(clockPin, HIGH);
40+
digitalWrite(clockPin, LOW);
41+
}
42+
} else {
43+
for (mask = 0x80; mask; mask >>= 1) {
44+
digitalWrite(dataPin, !!(val & mask) ? HIGH : LOW);
45+
digitalWrite(clockPin, HIGH);
46+
digitalWrite(clockPin, LOW);
47+
}
48+
}
49+
}

0 commit comments

Comments
 (0)