J 창고

[Arduino] 74HC595, LED 32개 본문

컴퓨터/Firmware

[Arduino] 74HC595, LED 32개

JSFamily 2013. 12. 30. 13:58



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]);

  }

}

Comments