■ LED 조명 효과 만들기

----------------------------------------------------------------------------------------------------

부품 내역

 

구분

모델

수량

비고

LED


13

 

 

회로 구성도

 

 

 

 

소스 코드

 

 

// LED 초기화 하기

// ledCount : LED 카운트

void LEDInitialize(int ledCount)

{

    for(int i = 1; i <= ledCount; i++)

    {

         pinMode(i, OUTPUT);

    }

}

 

// LED 파도타기

// ledCount   : LED 카운트

// delayTime  : LED간 전환 시간

// delayDelta : LED간 전환 시간 감소분

void LEDSuffing(int ledCount, int delayTime, int delayDelta)

{

    for(int i = delayTime; i >= 1; i -= delayDelta)

    {

        for(int j = 1; j <= ledCount; j++)

        {

            digitalWrite(j, HIGH);

            

            digitalWrite(j - 1, LOW);

 

            delay(i);

        }

        

        for(int j = ledCount - 1; j >= 1; j--)

        {

            digitalWrite(j, HIGH);

            

            digitalWrite(j + 1, LOW);

 

            delay(i);

        }

    }

}

 

// LED 대기

// ledCount  : LED 카운트

// delayTime : LED 스위치를 끄고 지정한 시간만큼 대기

void LEDWait(int ledCount, int delayTime)

{

    for(int i = 1; i <= ledCount; i++)

    {

        digitalWrite(i, LOW);

    }

 

    delay(delayTime);

}

 

// LED 스택

// ledCount  : LED 카운트

// delayTime : 지연 시간

void LEDStack(int ledCount, int delayTime)

{

    for(int i = ledCount; i >= 1; i--)

    {

        for(int j = 1; j <= i; j++)

        {

            digitalWrite(j, HIGH);

 

            digitalWrite(j - 1, LOW);

 

            delay(delayTime);

        }

    }

}

 

// LED 교차하기

// ledCount   : LED 카운트

// delayTime  : LED 전환 시간

// delayDelta : LED 전환 감소분

void LEDIntersect(int ledCount, int delayTime, int delayDelta)

{

    for(int k = delayTime; k >= 1; k -= delayDelta)

    {

        for(int i = 0; i <= (ledCount / 2); i++)

        {

            for(int j = 1; j <= ledCount; j++)

            {

                if(abs(i) == abs(j - 7))

                {

                    digitalWrite(j, HIGH);

                }

                else

                {

                    digitalWrite(j, LOW);

                }

            }

 

            delay(k);

        }

 

        for(int i = (ledCount / 2 - 1) ; i >= 1; i--)

        {

            for(int j = 1; j <= ledCount; j++)

            {

                if(abs(i) == abs(j - 7))

                {

                    digitalWrite(j, HIGH);

                }

                else

                {

                    digitalWrite(j, LOW);

                }

            }

 

            delay(k);

        }

    }

}

 

// LED 점프하기

// ledCount    : LED 카운트

// jumpSegment : 점프 세그먼트

// delayTime   : LED 지연 시간

// loopCount   : 루프 카운트

void LEDJump(int ledCount, int jumpSegment, int delayTime, int loopCount)

{

    float alpha = float(-4 * ledCount) / (float(jumpSegment) * float(jumpSegment));

    float beta  = float( 4 * ledCount) / float(jumpSegment);

    float x;

    float y;

    int   led;

 

    for(int i = loopCount; i >= 1; i -= 2)

    {

        for(x = 0; x < jumpSegment; x++)

        {

            y = alpha * x * x + beta * x;

        

            led = (int)(y + 0.5d);

    

            if(led != 0)

            {

                for(int j = 1; j <= ledCount; j++)

                {

                    if(j == led)

                    {

                        digitalWrite(j, HIGH);

                    }

                    else if(j == 14-led)

                    {

                        digitalWrite(j, HIGH);

                    }

                    else

                    {

                        digitalWrite(j, LOW);

                    }

                }

            }

            delay(i);

        }

    }

}

 

void setup()

{

    LEDInitialize(13);

}

 

void loop()

{

    // LED 대기

    LEDWait(13, 5000);

    

    // LED 파도타기

    LEDSuffing(13, 50, 4);

 

    // LED 대기

    LEDWait(13, 2000);

    

    // LED 교차

    LEDIntersect(13, 100, 4);

 

    // LED 대기

    LEDWait(13, 2000);

 

    // LED 증속교차점프

    LEDJump(13, 100, 10, 20);

    

    // LED 대기

    LEDWait(13, 2000);

 

    // LED 스택

    LEDStack(13, 100);

    

    // LED 대기

    LEDWait(13, 5000);

}

 

----------------------------------------------------------------------------------------------------

 

Posted by 사용자 icodebroker
TAG

댓글을 달아 주세요