int i, mode, sw_old, volume_1, volume_2, led_phase, led_select, led_dir; unsigned long now_time, old_time, width_time; void setup() { for(i=0; i<14; i++) pinMode(i, OUTPUT); all_LED_off(); sw_old = 1; mode = 0; } void loop() { unsigned long goal_1, goal_2; switch_check(); volume_1 = analogRead(1) / 3; volume_2 = analogRead(2); now_time = millis(); switch(mode){ case(1): goal_2 = map(volume_2, 0, 1023, 150, 15); goal_1 = goal_2 * volume_1 / 1024; switch(led_phase){ case(0): all_LED_off(); digitalWrite(led_select, HIGH); old_time = now_time; led_phase = 1; break; case(1): width_time = now_time - old_time; if(width_time > goal_1){ digitalWrite(led_select, LOW); led_phase = 2; } break; case(2): width_time = now_time - old_time; if(width_time > goal_2){ led_phase = 0; led_select = ++led_select % 14; } break; } break; case(2): goal_2 = map(volume_2, 0, 1023, 150, 15); goal_1 = goal_2 * volume_1 / 1024; switch(led_phase){ case(0): all_LED_off(); digitalWrite(led_select, HIGH); old_time = now_time; led_phase = 1; break; case(1): width_time = now_time - old_time; if(width_time > goal_1){ digitalWrite(led_select, LOW); led_phase = 2; } break; case(2): width_time = now_time - old_time; if(width_time > goal_2){ led_phase = 0; if(--led_select < 0) led_select = 13; } break; } break; case(3): goal_2 = map(volume_2, 0, 1023, 150, 15); goal_1 = goal_2 * volume_1 / 1024; switch(led_phase){ case(0): all_LED_off(); digitalWrite(led_select, HIGH); old_time = now_time; led_phase = 1; break; case(1): width_time = now_time - old_time; if(width_time > goal_1){ digitalWrite(led_select, LOW); led_phase = 2; } break; case(2): width_time = now_time - old_time; if(width_time > goal_2){ led_phase = 0; if(led_dir == 0) led_select = ++led_select % 14; else if(--led_select < 0) led_select = 13; if(led_select == 0) led_dir = ++led_dir % 2; else if(led_select == 13) led_dir = ++led_dir % 2; } break; } break; case(4): goal_2 = map(volume_2, 0, 1023, 150, 15); goal_1 = goal_2 * volume_1 / 1024; switch(led_phase){ case(0): all_LED_off(); digitalWrite(led_select, HIGH); old_time = now_time; led_phase = 1; break; case(1): width_time = now_time - old_time; if(width_time > goal_1){ digitalWrite(led_select, LOW); led_phase = 2; } break; case(2): width_time = now_time - old_time; if(width_time > goal_2){ led_phase = 0; led_select = 2 * random(0, 7) + led_dir; led_dir = ++led_dir % 2; } break; } break; case(5): goal_2 = map(volume_2, 0, 1023, 1000, 100); goal_1 = goal_2 * volume_1 / 1024; switch(led_phase){ case(0): for(i=0; i<14; i++) digitalWrite(i, HIGH); old_time = now_time; led_phase = 1; break; case(1): width_time = now_time - old_time; if(width_time > goal_1){ for(i=0; i<14; i++) digitalWrite(i, LOW); led_phase = 2; } break; case(2): width_time = now_time - old_time; if(width_time > goal_2) led_phase = 0; break; } break; case(0): all_LED_off(); break; } } void switch_check(){ i = analogRead(0) / 512; if(sw_old == i) return; sw_old = i; if(i == 1) return; mode = (mode + 1) % 6; led_phase = 0; led_select = 0; led_dir = 0; } void all_LED_off(){ for(i=0; i<14; i++) digitalWrite(i, LOW); }