// konfigurasi pin Arduino
const byte DataPin = 2; // DS data serial
const byte LatchPin = 3; // ST_CP
const byte ClockPin = 4; // SH_CP
// menampung data
byte data = 0;
void setup() {
// konfigurasi pin sebagai ouput
pinMode(LatchPin, OUTPUT);
pinMode(ClockPin, OUTPUT);
pinMode(DataPin, OUTPUT);
}
void loop() {
// delay 200ms
if ( nonblocking_delay(200) ){
// geser kiri
data <<= 1;
// jika data == 0 (gesernya sudah habis)
// ulangi dari awal
if( data == 0 ) data = 1;
// mulai transfer
digitalWrite(LatchPin, LOW);
// kirim data
shiftOut(DataPin, ClockPin, MSBFIRST, data);
// stop transfer
digitalWrite(LatchPin, HIGH);
}
}
// tambahan untuk membuat delay non blocking
unsigned long nonblocking_time = millis();
unsigned long nonblocking_last = millis();
boolean nonblocking_delay(long milidetik){
nonblocking_time = millis();
if(nonblocking_time - nonblocking_last >= milidetik){
nonblocking_last = nonblocking_time;
return true;
}
return false;
}