/* Skrevet av Vegard G. Jervell, jan. 2020 Bruker FastLED version 3.003.002 Dette er stort sett det samme som kjeller_standard_250120, men med litt flere parametre som kan endres, alle er beskrevet i koden. Bruker "Gliding window" filter */ //parametre som justerer hvordan lysene oppfører seg, disse kan du endre på :) bool ZyyrepHaest = false; //hvis denne er "true" klikker alle lysa ;) int rolig_fargeendringtempo = 250; //høyere tall gir tregere fargeendring på lysene som ikke følger musikken int musikk_fargeendringtempo = 1000; //høyere tall gir tregere fargeendring på musikkledsa int min_lysstyrke = 100; //laveste lysstyrke på dansegulvet (0-255) ikke gjør denne større enn 255, da vet jeg ikke hva som skjer bool statisk_farge_musikklys = false; //bestemmer om fargen på musikklysene skal endre seg int farge_musikklys = 160; //fargen på musikklysene hvis de er statiske (google "CHSV hue" for å se sammenheng mellom farge og tall) float volumskalering = 1; //avgjør graden på skaleringen av volum (les mer i README), kort fortalt om sammenhengen mellom volum og lysstyrke er lineær (1), kvadratisk (2) osv. #define AVG_COUNTSIZE 20 //antall volumlesninger det blir tatt gjennomsnitt av int max_vol_decay = 2000; //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. int max_vol_decay_factor = 0.95; //Denne skalerer max_vol etter max_vol_decay antall lesninger uten endring, se README for mer info int NUM_LEDS_TOTAL = 5; //Summen av NUM_LEDS_MUSIKK og NUM_LEDS_ROLIG må være lik antall mikrokontrollere #define NUM_LEDS_MUSIKK 2 //mikrokontroller nummer 0 opp til NUM_LEDS_MUSIKK styrer lys som følger musikken int NUM_LEDS_ROLIG = NUM_LEDS_TOTAL - NUM_LEDS_MUSIKK; //resten styrer rolig lys (de som bare endrer farge) //DU TRENGER IKKE ENDRE NOE UNDER DENNE LINJEN// ////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////// //Definerer pins på arduinoen og prepper led-lysene #include //dette biblioteket kan googles #define LED_TYPE P9813 //det finnes forskjellige typer mikrokontrollere #define COLOR_ORDER RGB //vet ikke hvilke andre alternativer som finnes #define DATA_PIN_MUSIKK 8 //denne pin'en skal gå fra arduinoen til "data in" på første kontroller #define CLOCK_PIN_MUSIKK 12 //denne pin'en skal gå fra arduinoen til "clock in" på den første kontrolleren #define MUSIC_VOLUME A1 //denne pin'en på arduinoen leser inn fra minijack //////////////////////////////////////////////////////////////// //variable som brukes til å holde styr på forskjellige ting float this_read; //en bestemt volumavlesning (er float fordi ellers 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 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 max_vol_decay endringer int farge_musikklys_counter = 0; //holder styr på om fargen på musikkledsa skal endres (dersom statisk_farge_musikklys = false) 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]; //gjør klar en liste med led-lys void setup() { delay(3000); //visstnok lurt for å være snill med arduinoen FastLED.addLeds(leds, NUM_LEDS_MUSIKK + NUM_LEDS_ROLIG); //initialiserer ledsa //dette skjer hvis du setter ZyyrepHaest til true if (ZyyrepHaest == true ){ #define NUM_LEDS_MUSIKK NUM_LEDS_TOTAL int NUM_LEDS_ROLIG = 0; statisk_farge_musikklys = true; farge_musikklys = 160; min_lysstyrke = 150; } } void loop() { for (int read_nr = 0; read_nr < AVG_COUNTSIZE; read_nr++){ //leser inn volum 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 (skalering fra 0-max_vol => min_lysstyrke-255) this_read = int( ((254 - min_lysstyrke)/pow(max_vol, volumskalering)) * pow(this_read, volumskalering) + min_lysstyrke); volume_reads[read_nr] = this_read; //Justerer ned max_vol hvis den ikke har blitt overskrevet på veldig lenge, må gjøre dette etter skalering for å sikre at vi ikke får lysstyrke over 255 if (max_vol_counter > max_vol_decay){ max_vol = int(max_vol_decay_factor*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(farge_musikklys, 255, 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, hvis de skal endres if (statisk_farge_musikklys == false){ if (farge_musikklys_counter == musikk_fargeendringtempo){ if (farge_musikklys == 255){ farge_musikklys = 0; } else{ farge_musikklys += 1; } farge_musikklys_counter = 0; } else{ farge_musikklys_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; } } }