4개 74HC595 로 32개 LED 컨트롤
대략 물방울 떨어지듯이 내려오는 걸 만드는 중... ㅎㅎ
int dataPin = 2; // Data
int latchPin = 3; // latch
int clockPin = 4; // clock
int num[4] = {0};
void setup(){
pinMode(dataPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
Serial.begin(9600);
}
void loop(){
ani_1();
ani_2();
ani_3();
ani_4();
}
void writeOutput(int no0, int no1, int no2, int no3){
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, no0);
shiftOut(dataPin, clockPin, MSBFIRST, no1);
shiftOut(dataPin, clockPin, MSBFIRST, no2);
shiftOut(dataPin, clockPin, MSBFIRST, no3);
digitalWrite(latchPin, HIGH);
}
void ani_1(){
int number[8] = {1,2,4,8,16,32,64,128};
for(int j = 3;j>=0;j--){
for(int i =0;i<8;i++){
num[j] = number[i];
writeOutput(num[0], num[1], num[2], num[3]);
delay(50);
}
num[j] = 0;
writeOutput(num[0], num[1], num[2], num[3]);
}
}
void ani_2(){
int number[8] = {1,2,4,8,16,32,64,128};
for(int j=3;j>=0;j--){
int cal = 0;
for(int i=0;i<8;i++){
cal = cal + number[i];
Serial.println(cal);
num[j] = cal;
writeOutput(num[0], num[1], num[2], num[3]);
delay(50);
}
}
for(int i=0;i<4;i++){
num[i] = 0;
writeOutput(num[0], num[1], num[2], num[3]);
}
}
void ani_3(){
int number_inc[8] = {1,2,4,8,16,32,64,128};
int led_speed = 200;
for(int j=3;j>=0;j--){
int cal = 0;
for(int i=0;i<8;i++){
cal = cal + number_inc[i];
Serial.println(cal);
num[j] = cal;
writeOutput(num[0], num[1], num[2], num[3]);
delay(led_speed);
if(led_speed >50){
led_speed = led_speed - 6;
}
else{
led_speed = 40;
}
}
}
delay(200);
for(int i=0;i<4;i++){
num[i] = 0;
writeOutput(num[0], num[1], num[2], num[3]);
}
delay(1000);
}
void ani_4(){
int number_inc[8] = {1,2,4,8,16,32,64,128};
int del_speed = 80;
for(int j=3;j>=-1;j--){
int cal_inc = 0;
int cal_dec = 255;
for(int i=0;i<8;i++){
cal_inc = cal_inc + number_inc[i];
cal_dec = cal_dec - number_inc[i];
num[j] = cal_inc;
writeOutput(num[0], num[1], num[2], num[3]);
num[j+1] = cal_dec;
writeOutput(num[0], num[1], num[2], num[3]);
delay(del_speed);
del_speed = del_speed - 2;
}
}
for(int i=0;i<4;i++){
num[i] = 0;
writeOutput(num[0], num[1], num[2], num[3]);
}
}