■ LED 조명 효과를 만드는 방법을 보여준다.
▶ 부품 내역
1 2 3 4 5 6 7 |
─────────── 구분 모델 수량 비고 ── ── ── ── LED 13 ─────────── |
▶ 소스 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 |
// 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); } |