// PWM을 사용하기 위한 핀들의 배열을 생성 int LED_pin[5] = {3, 5, 6, 9, 10}; // LED의 밝기 값 int bightness = 0; // LED 밝기의 증가/감소 단위 int fadeAmount = 5; void setup() { // put your setup code here, to run once: // PIN들을 OUTPUT으로 설정 for (int i = 0; i < 5; i++) { pinMode(LED_pin[i], OUTPUT); } Serial.begin(9600); } void loop() { // put your main code here, to run repeatedly: // 불이 켜지고 꺼질 LED의 갯수를 랜덤으로 결정 randomSeed(analogRead(0)); int randInt = random(5); // 불이 켜졌다 꺼지게 될 LED의 index를 저장하게 될 배열 -1인 경우에는 continue애 걸림 int idx[5] = {-1, -1, -1, -1, -1}; // while문 제어를 위한 변수 bool isActive = true; // randInt만큼 루프를 돌면서 index 값을 idx 배열에 저장 for (int i = 0; i < randInt; i++) { // index를 랜덤하게 생성 int randNo = random(4); // 생성된 index(randNo)를 idx 배열에 저장 for (int j = 0; j <= i; j++) { // 만일 이미 저장된 index와 동일한 index가 생성되면 그 자리엔 -1을 입력 if (randNo == idx[j]) { randNo = -1; } } idx[i] = randNo; } // 앞에서 생성된 작동할 index에 있는 pin에 대해 켜졌다가 꺼지는 루프를 실행 while(isActive) { for (int i = 0; i < randInt; i++) { if (idx[i] == -1) { continue; } analogWrite(LED_pin[idx[i]], bightness); } bightness += fadeAmount; if (bightness > 255) { bightness = 255; fadeAmount *= -1; } if (bightness < 0) { bightness = 0; fadeAmount *= -1; // LED가 꺼지게 되면 while문을 탈출하여 새롭게 작동할 LED 갯수와 그 갯수만큼의 index를 설정 isActive = false; } // 밝아지고 어두워지는 딜레이 delay(50); } }