/* Skrevet av Vegard G. Jervell, jan. 2020 Bruker FastLED version 3.003.002 Dette er den aller første og enkleste versjonen av scriptet. Bruker Gliding window filter og lineær volumskalering. Funker fett, lite justeringsmuligheter, men lett å forstå. */ //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 //Du trenger ikke endre på noe under denne linja ///////////////////////////////////////////////// //////////////////////////////////////////////// #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; } } }