const byte datapin = 2;
const byte clockpin = 3;
const byte latchpin = 4;
void setup() {
pinMode(datapin, OUTPUT);
pinMode(clockpin, OUTPUT);
pinMode(latchpin, OUTPUT);
digitalWrite(latchpin, HIGH);
digitalWrite(clockpin, LOW);
}
void loop() {
// light each of the 16 sixteen LEDs in sequence
for (byte led = 0; led < 16; led++) {
uint16_t data16 = 1 << led;
if (0) {
// duplicates bit7. bit15 is lost
uint8_t data8a = data16 >> 8;
uint8_t data8b = data16;
shiftOut(datapin, clockpin, MSBFIRST, data8a);
shiftOut(datapin, clockpin, MSBFIRST, data8b);
} else {
// clock it out manually; same results
uint8_t bit = 16;
digitalWrite(latchpin, LOW);
do {
bit--;
digitalWrite(clockpin, LOW);
digitalWrite(datapin, (data16 >> bit) & 1);
digitalWrite(clockpin, HIGH);
} while (bit > 0);
digitalWrite(latchpin, HIGH);
}
delay(1000);
}
}