저비용으로 간단하게 어디에서든 가능한
arduino
아두이노 나노로 LED 여러개 제어
결선도
입출력
입력 | 출력 | 실습내용 |
LED | 다양한 방식으로 연결된 LED가 켜짐 |
준비물
준비물 | 수량 |
아두이노 (나노) | 1 |
브레드보드 | 1 |
저항(220k) | 12 |
LED | 12 |
점퍼케이블 | 25 |
코딩
int pwm_pins[] = {3, 5, 6, 9, 10, 11};
int binary_pins[] = {2, 4, 7, 8, 12, 13};
int pwm_intervals[] = {1500, 2500, 1900, 1000, 3000, 2000};
int binary_duration[] = {1100, 1300, 1150, 2000, 800, 4500};
long time_left_pwm[] = {0, 0, 0, 0, 0, 0};
long time_left_binary[] = {0, 0, 0, 0, 0, 0};
long pwm_time_steps[6];
int pwm_values[] = {0, 0, 0, 0, 0, 0};
int pwm_offset[] = {1, 1, 1, 1, 1, 1};
boolean binary_high[] = {true, true, true, true, true, true};
long last_time = 0;
long time_elapsed = 0;
void setup() {
for (int i = 0; i < 6; i++) {
pinMode(pwm_pins[i], OUTPUT);
pinMode(binary_pins[i], OUTPUT);
pwm_time_steps[i] = int(pwm_intervals[i] / 255);
time_left_pwm[i] = pwm_time_steps[i];
}
last_time = millis();
}
void loop() {
time_elapsed = millis() - last_time;
last_time = millis();
for (int i = 0; i < 6; i++) {
digitalWrite(binary_pins[i], binary_high[i]);
time_left_binary[i] = time_left_binary[i] - time_elapsed;
if (time_left_binary[i] <= 0) {
binary_high[i] = !binary_high[i];
time_left_binary[i] = binary_duration[i];
}
}
for (int i = 0; i < 6; i++) {
analogWrite(pwm_pins[i], pwm_values[i]);
time_left_pwm[i] = time_left_pwm[i] - time_elapsed;
if (time_left_pwm[i] < 0) {
pwm_values[i] = pwm_values[i] + pwm_offset[i];
time_left_pwm[i] = pwm_time_steps[i];
}
if (pwm_values[i] <= 0 || pwm_values[i] >= 255) {
pwm_offset[i] = pwm_offset[i] * (-1);
}
}
}