Светомузыка на основе преобразования Фурье.
Программа ардуино для светомузыки. #define LOG_OUT 1 #define FFT_N 128 #include #define MIC_PIN A0 #define RED_LED 2 #define BLUE_LED 3 #define GREEN_LED 4 #define YELLOW_LED 5 #define FREQ_LOW_FFT 20 #define FREQ_MIDDLE_FFT 30 #define FREQ_HIGH_FFT 60 #define FREQ_LOW_LEVEL 38 #define FREQ_MIDDLE_LEVEL 18 #define FREQ_HIGH_LEVEL 15 void setup() { pinMode(RED_LED, OUTPUT); pinMode(BLUE_LED, OUTPUT); pinMode(GREEN_LED , OUTPUT); pinMode(YELLOW_LED, OUTPUT); } void loop() { for (int i = 0 ; i ﹤ FFT_N; i++) { int sample = analogRead(MIC_PIN) - 511; if(sample ﹤ 5 && sample ﹥ -5) { sample = 0; } fft_input[i++] = sample; fft_input[i] = 0; } fft_window(); fft_reorder(); fft_run(); fft_mag_log(); if (fft_log_out[FREQ_LOW_FFT] ﹥ FREQ_LOW_LEVEL) { digitalWrite(RED_LED, HIGH); } else { digitalWrite(RED_LED, LOW); } if (fft_log_out[FREQ_MIDDLE_FFT] ﹥ FREQ_MIDDLE_LEVEL) { digitalWrite(GREEN_LED, HIGH); digitalWrite(YELLOW_LED, LOW); } else { digitalWrite(GREEN_LED, LOW); digitalWrite(YELLOW_LED, HIGH); } if (fft_log_out[FREQ_HIGH_FFT] ﹥ FREQ_HIGH_LEVEL) { digitalWrite(BLUE_LED, HIGH); } else { digitalWrite(BLUE_LED, LOW); } }
Программа ардуино для светомузыки. #define LOG_OUT 1 #define FFT_N 128 #include #define MIC_PIN A0 #define RED_LED 2 #define BLUE_LED 3 #define GREEN_LED 4 #define YELLOW_LED 5 #define FREQ_LOW_FFT 20 #define FREQ_MIDDLE_FFT 30 #define FREQ_HIGH_FFT 60 #define FREQ_LOW_LEVEL 38 #define FREQ_MIDDLE_LEVEL 18 #define FREQ_HIGH_LEVEL 15 void setup() { pinMode(RED_LED, OUTPUT); pinMode(BLUE_LED, OUTPUT); pinMode(GREEN_LED , OUTPUT); pinMode(YELLOW_LED, OUTPUT); } void loop() { for (int i = 0 ; i ﹤ FFT_N; i++) { int sample = analogRead(MIC_PIN) - 511; if(sample ﹤ 5 && sample ﹥ -5) { sample = 0; } fft_input[i++] = sample; fft_input[i] = 0; } fft_window(); fft_reorder(); fft_run(); fft_mag_log(); if (fft_log_out[FREQ_LOW_FFT] ﹥ FREQ_LOW_LEVEL) { digitalWrite(RED_LED, HIGH); } else { digitalWrite(RED_LED, LOW); } if (fft_log_out[FREQ_MIDDLE_FFT] ﹥ FREQ_MIDDLE_LEVEL) { digitalWrite(GREEN_LED, HIGH); digitalWrite(YELLOW_LED, LOW); } else { digitalWrite(GREEN_LED, LOW); digitalWrite(YELLOW_LED, HIGH); } if (fft_log_out[FREQ_HIGH_FFT] ﹥ FREQ_HIGH_LEVEL) { digitalWrite(BLUE_LED, HIGH); } else { digitalWrite(BLUE_LED, LOW); } }
