byte DS_pin = 8;
byte STCP_pin = 9;
byte SHCP_pin = 10;
uint16_t value = 0b1111111100000000;
uint16_t value2 = 0b0000000011111111;
//value recv in bin (0b) format..
uint16_t value3 = 0b0000000000011111;
uint16_t value4 = 0b0000000000000000;
byte ani = 0;
byte step = 0;
byte rolls = 0;
unsigned long lastStep = 0;
unsigned long intervalStep = 250;
void setup() {
pinMode(DS_pin, OUTPUT);
pinMode(STCP_pin, OUTPUT);
pinMode(SHCP_pin, OUTPUT);
digitalWrite(STCP_pin, LOW);
shiftOut(DS_pin, SHCP_pin, LSBFIRST, value >> 8);
shiftOut(DS_pin, SHCP_pin, LSBFIRST, value );
digitalWrite(STCP_pin, HIGH);
delay(1000);
digitalWrite(STCP_pin, LOW);
shiftOut(DS_pin, SHCP_pin, LSBFIRST, value2 >> 8);
shiftOut(DS_pin, SHCP_pin, LSBFIRST, value2 );
digitalWrite(STCP_pin, HIGH);
delay(1000);
//as an example of getting seperate bytes from the word..
//not using them..
byte lowb = lowByte(value3);
byte hib = highByte(value3);
//value 3 is bit pattern received..
//let's dance it around..
//lsb first
digitalWrite(STCP_pin, LOW);
shiftOut(DS_pin, SHCP_pin, LSBFIRST, value3 >> 8);
shiftOut(DS_pin, SHCP_pin, LSBFIRST, value3 );
digitalWrite(STCP_pin, HIGH);
delay(1000);
//flip the bytes but still lsb
digitalWrite(STCP_pin, LOW);
shiftOut(DS_pin, SHCP_pin, LSBFIRST, value3);
shiftOut(DS_pin, SHCP_pin, LSBFIRST, value3 >> 8 );
digitalWrite(STCP_pin, HIGH);
delay(1000);
//msb..
digitalWrite(STCP_pin, LOW);
shiftOut(DS_pin, SHCP_pin, MSBFIRST, value3 >> 8);
shiftOut(DS_pin, SHCP_pin, MSBFIRST, value3 );
digitalWrite(STCP_pin, HIGH);
delay(1000);
//one more msb but flip bytes..
digitalWrite(STCP_pin, LOW);
shiftOut(DS_pin, SHCP_pin, MSBFIRST, value3);
shiftOut(DS_pin, SHCP_pin, MSBFIRST, value3 >> 8 );
digitalWrite(STCP_pin, HIGH);
delay(1000);
}
void loop() {
unsigned long now = millis();
int i = 0;
if ( now - lastStep >= intervalStep) {
lastStep = now;
switch (ani) {
case 0:
bitClear(value4, step);
step++;
if (step > 15) {
step = 0;
rolls++;
}
bitSet(value4, step);
shiftOutWord(value4);
if (rolls > 1) {
ani++;
step = 0;
rolls = 0;
value4 = 0;
shiftOutWord(value4);
}
break;
case 1:
switch (step) {
case 0: for (i = 0; i < 16; i++) {
if (i % 2 == 0) {
bitSet(value4, i);
} else {
bitClear(value4, i);
}
}
shiftOutWord(value4);
step++;
break;
case 1: for (i = 0; i < 16; i++) {
if (i % 2 != 0) {
bitSet(value4, i);
} else {
bitClear(value4, i);
}
}
shiftOutWord(value4);
step++;
break;
case 2: for (i = 0; i < 16; i++) {
if (i % 3 == 0) {
bitSet(value4, i);
} else {
bitClear(value4, i);
}
}
shiftOutWord(value4);
step++;
break;
case 3: for (i = 0; i < 16; i++) {
if (i % 3 != 0) {
bitSet(value4, i);
} else {
bitClear(value4, i);
}
}
shiftOutWord(value4);
step++;
break;
case 4:
value4 = 0;
shiftOutWord(value4);
step = 0;
rolls++;
if (rolls > 4) {
ani++;
step = 0;
rolls = 0;
}
break;
}
break;
case 2:
switch (step) {
case 0: value4 = 0b1100110011001100;
shiftOutWord(value4);
step++;
break;
case 1: value4 = 0b0011001100110011;
shiftOutWord(value4);
step++;
break;
case 2:
value4 = 0;
shiftOutWord(value4);
step = 0;
rolls++;
if (rolls > 4) {
ani = 0;
step = 0;
rolls = 0;
}
break;
}
break;
}
}
}
void shiftOutWord(uint16_t aword) {
digitalWrite(STCP_pin, LOW);
shiftOut(DS_pin, SHCP_pin, MSBFIRST, aword >> 8);
shiftOut(DS_pin, SHCP_pin, MSBFIRST, aword );
digitalWrite(STCP_pin, HIGH);
}