//parametre som justerer hvordan lysene oppfører seg int reduser_max_vol = 500; //reduserer max vol etter dette antall lesninger uten endring, høyere tall gjør at det tar lengre tid før max_vol justeres ned. //når max vol justeres ned vil lavere lyd gi sterke lys int rolig_fargeendringtempo = 250; //høyere tall gir tregere fargeendring på lysene som ikke er på dansegulvet int musikk_fargeendringtempo = 1000; //høyere tall gir tregere fargeendring på musikkledsa #include #define LED_TYPE P9813 #define COLOR_ORDER RGB #define NUM_LEDS_MUSIKK 2 #define DATA_PIN_MUSIKK 8 #define CLOCK_PIN_MUSIKK 12 #define NUM_LEDS_ROLIG 3 #define MUSIC_VOLUME A1 #define AVG_COUNTSIZE 20 //variable som brukes til å holde styr på forskjellige ting float this_read; //en bestemt volumavlesning (er float fordi eller gjør c++ heltallsdivisjon) int avg_vol = 0; //skal brukes for å regne ut gjennomsnittlig volum int volume_reads[AVG_COUNTSIZE]; //en liste som inneholder volummålinger int max_vol = 1; //høyeste avleste volum starter på 1 fordi vi ikke vil dele på 0 int min_lysstyrke = 100; //laveste lysstyrke på dansegulvet (0-255) kan endres uten at ting kræsjer :) (men ikke gjør den større enn 255) int max_vol_counter = 0; //justerer max volum, sjekker hvor mange lesninger som har gått uten at max har blitt endret. justerer ned max etter N endringer int musikk_led_farge = 0; //fargen til ledsa på dansegulvet (variabel) int musikk_led_farge_counter = 0; //holder styr på om fargen på musikkledsa skal endres int rolig_led_farge = 0; //fargen på de rolige ledsa (variabel) int rolig_led_farge_counter = 0; //holder styr på om fargen på de rolige ledsa skal endres CRGB leds[NUM_LEDS_MUSIKK]; void setup() { delay(3000); FastLED.addLeds(leds, NUM_LEDS_MUSIKK + NUM_LEDS_ROLIG); } void loop() { for (int read_nr = 0; read_nr < AVG_COUNTSIZE; read_nr++){ this_read = analogRead(MUSIC_VOLUME); //oppdatterer høyeste volum if (this_read > max_vol){ max_vol = this_read; max_vol_counter = 0; } else{ max_vol_counter += 1; } //Skalerer volumlesningen til et tall mellom min_lysstyrke og 255 this_read = int(254*(this_read/max_vol) + min_lysstyrke*(1 - (this_read/max_vol))); volume_reads[read_nr] = this_read; if (max_vol_counter > reduser_max_vol){ max_vol = int(0.95*max_vol); if (max_vol == 0){ max_vol = 1; //hindrer deling på 0 } max_vol_counter = 0; } //regner ut gjennomsnitt av listen avg_vol = 0; for (int i = 0; i < AVG_COUNTSIZE; i++){ avg_vol += volume_reads[i]/AVG_COUNTSIZE; } //itererer gjennom alle led-stripsa og endrer farge/saturation/styrke, //leds med nummer fra NUM_LEDS_MUSIKK til NUM_LEDS_MUSIKK + NUM_LEDS_ROLIG er rolige //leds med nummer fra 0 til NUM_LEDS_MUSIKK er de som følger musikken for (int led_nr = 0; led_nr < NUM_LEDS_MUSIKK; led_nr++) { leds[led_nr] = CHSV(musikk_led_farge, 250, avg_vol); } for (int led_nr = NUM_LEDS_MUSIKK; led_nr < NUM_LEDS_MUSIKK + NUM_LEDS_ROLIG; led_nr++){ leds[led_nr] = CHSV(rolig_led_farge, 255, 255); } FastLED.show(); //endrer fargen på musikkledsa if (musikk_led_farge_counter == musikk_fargeendringtempo){ if (musikk_led_farge == 255){ musikk_led_farge = 0; } else{ musikk_led_farge += 1; } musikk_led_farge_counter = 0; } else{ musikk_led_farge_counter += 1; } //endrer fargen på de rolige ledsa if (rolig_led_farge_counter == rolig_fargeendringtempo){ if (rolig_led_farge == 255){ rolig_led_farge = 0; } else{ rolig_led_farge += 1; } rolig_led_farge_counter = 0; } else{ rolig_led_farge_counter += 1; } } }