Browse Source

added master volume control

implemented, untested
Etienne Landon 7 years ago
parent
commit
3cafddd357
4 changed files with 112 additions and 41 deletions
  1. 25 12
      DownTigerDown.ino
  2. 32 20
      SDcard.ino
  3. 19 5
      eventually.ino
  4. 36 4
      fastLed.ino

+ 25 - 12
DownTigerDown.ino

@@ -35,6 +35,8 @@ boolean SDfound;
 Tsunami tsunami;
 int  gNumTracks;                // Number of tracks on SD card
 char gTsunamiVersion[VERSION_STRING_LEN];    // Tsunami version string
+const int audioVolumePin = A21 ;
+int audioMasterVolume = 0 ;
 
 //Eventually pointers to manage creation/deletion of listeners
 EvtManager mgr;
@@ -52,23 +54,24 @@ byte refreshRate = 25 ;
 //Dimmer
 #define DIMMER_PIN 9
 FadeLed dimmer(DIMMER_PIN);
-int dimmer_value = 50;
+int dimmer_value = 15;
 byte dimmer_low = 20;
 byte dimmer_mid = 60;
 byte dimmer_high = 80;
 bool dimmer_random = false; // activate short-circuit effect
-int dimmer_move = 0 ; // organic variation around base value
+int dimmer_move = 7;
+
 
 // FastLED
-#define NUM_LEDS_LUSTRE 240
+#define NUM_LEDS_LUSTRE 140
 CRGB lustreLeds[NUM_LEDS_LUSTRE];
-float lustre_currentBrightness ;     //for fading
-float lustre_targetBrightness = 255 ;
-float lustre_stepBrightness;
+float lustre_currentBrightness = 0;     //for fading
+float lustre_targetBrightness = 0 ;
+float lustre_stepBrightness = 0;
 CRGBPalette16 lustre_currentPalette( CRGB::Green);
-CRGBPalette16 lustre_targetPalette( CRGB::Red );
+CRGBPalette16 lustre_targetPalette( CRGB::Orange );
 
-#define NUM_LEDS_TABLE 50
+#define NUM_LEDS_TABLE 20
 CRGB tableLeds[NUM_LEDS_TABLE];
 byte table_currentBrightness ;
 byte table_targetBrightness ;
@@ -79,10 +82,13 @@ CRGBPalette16 table_targetPalette( CRGB::Blue );
 // FastLED Palettes
 CRGBPalette16 palette_MER (CRGB::DarkBlue);
 CRGBPalette16 palette_SOLEIL (CRGB::Orange);;
-CRGBPalette16 palette_CREPUSCULE (CRGB::YellowGreen);
+CRGBPalette16 palette_CREPUSCULE (CRGB::Blue);
 CRGBPalette16 palette_FLAMINGO (CRGB::LightCoral);
-bool palette_BEAT ; // activate beat sync palette
+bool palette_BEAT = false; // activate beat sync palette
 int paletteBeatStart ; //to resync effect on activation
+int BPM =120;
+bool palette_MOVE = true ;
+int led_move = 80 ; // organic variation around base value
 
 //Functions prototypes
 void EvtResetButtonContext ();
@@ -113,7 +119,14 @@ void setup() {
   
   // DIMMER
   dimmer.off();
-
+//  dimmer.set(percent2PWM(25));
+//  dimmer.setTime(0, true);
+//  while(!dimmer.done()){FadeLed::update();}
+//  delay(2000);
+//  dimmer.setTime(5000, true);
+//  dimmer.set(percent2PWM(2));
+//  while(!dimmer.done()){FadeLed::update();}
+  //
 
   // LEDS
   FastLED.addLeds<NEOPIXEL, 2>(lustreLeds, NUM_LEDS_LUSTRE);
@@ -163,7 +176,7 @@ void setup() {
   
   
   EvtResetButtonContext ();
-//  buttonFocus(0) ;
+  buttonFocus(0) ;
   
 }
 

+ 32 - 20
SDcard.ino

@@ -74,7 +74,7 @@ bool readSDFile() {
         String track = getSubstring(buf, ' ', 2) ;
         String out = getSubstring(buf, ' ', 1) ;
         if (out == "stop") { tsunami.stopAllTracks(); Serial.println("Stopping all sounds");}
-        if (out == "fadeout") {
+        else if (out == "fadeout") {
           Serial.println("Fading all sounds") ;
           for (int track ; track < 60 ; track++) {
             tsunami.trackFade(track, 0, 500, 1) ;            
@@ -92,17 +92,22 @@ bool readSDFile() {
         String palette = getSubstring(buf, ' ', 2);
         String bright = getSubstring(buf, ' ', 3);
         String fadeTime = getSubstring(buf, ' ', 4);
-        Serial.println(getSubstring(buf, ' ', 2));
+        //Serial.println(getSubstring(buf, ' ', 2));
         if (zone == "lustre"){ 
-          if (palette == "BEAT"){palette_BEAT = true; paletteBeatStart = millis();}
-          else { palette_BEAT = false ;}
-          if (palette == "MER"){lustre_targetPalette = palette_MER ;}
-          else if (palette == "SOLEIL"){lustre_targetPalette = palette_SOLEIL ;}
-          else if (palette == "CREPUSCULE"){lustre_targetPalette = palette_CREPUSCULE ;}
-          else if (palette == "FLAMINGO"){lustre_targetPalette = palette_FLAMINGO ;}
-          lustre_targetBrightness = bright.toInt();
-          lustre_stepBrightness = constrain( abs((lustre_targetBrightness - lustre_currentBrightness)) / (float)(fadeTime.toInt()/refreshRate), 1, 255) ;
-          if(lustre_currentBrightness > lustre_targetBrightness) { lustre_stepBrightness *= -1 ;}
+          if (palette == "BEAT"){palette_BEAT = true; lustre_currentBrightness = bright.toInt() ; BPM = fadeTime.toInt() ;paletteBeatStart = millis();Serial.println("Leds BEAT");}
+          else if (palette == "MOVE") {Serial.println("Leds MOVE");palette_MOVE = true; lustre_currentBrightness = bright.toInt() ; led_move = fadeTime.toInt();} 
+          else  { 
+            palette_BEAT = false ; 
+            palette_MOVE = false;
+            if (palette == "MER"){lustre_targetPalette = palette_MER ;}
+            else if (palette == "SOLEIL"){lustre_targetPalette = palette_SOLEIL ;}
+            else if (palette == "CREPUSCULE"){lustre_targetPalette = palette_CREPUSCULE ;}
+            else if (palette == "FLAMINGO"){lustre_targetPalette = palette_FLAMINGO ;}
+            lustre_targetBrightness = bright.toInt();
+            lustre_stepBrightness = constrain( abs((lustre_targetBrightness - lustre_currentBrightness)) / (float)((fadeTime.toInt()+1)/refreshRate), 0, 255) ;
+            if(lustre_currentBrightness > lustre_targetBrightness) { lustre_stepBrightness *= -1 ;}
+            }
+          
           
         }
         else if (zone == "table"){ 
@@ -133,17 +138,24 @@ bool readSDFile() {
      
       else if (selector == "dimmer") {
         String dim_val = getSubstring(buf, ' ', 1);
+        if (dim_val == "RANDOM") {dimmer_random = true ; Serial.println("dimmer random mode");}   
+        else if (dim_val == "MOVE" ) { dimmer_move = getSubstring(buf, ' ', 2).toInt(); }      
+        else {
+          dimmer_random = false ; 
+          dimmer_move = 0 ;
+          int dimmer_fade = constrain(getSubstring(buf, ' ', 2).toInt(), 50, 50000); // si 0, pas d'update
+          Serial.println("Dimmer fade à " + dim_val + " en " + dimmer_fade + "ms");
+          if (dim_val == "LOW") {dimmer_value = dimmer_low ;}
+          else if (dim_val == "MID") {dimmer_value = dimmer_mid ;}
+          else if (dim_val == "HIGH") {dimmer_value = dimmer_high ;}
+          else if (dim_val == "OFF") {dimmer_value = 0 ;}
+          else { dimmer_value = dim_val.toInt();} //value% 
+          dimmer.setTime(dimmer_fade, true);
+          dimmer.set(percent2PWM(dimmer_value));
+          //Serial.println(percent2PWM(dimmer_value));
+          }
         
         
-        int dimmer_fade = getSubstring(buf, ' ', 2).toInt();
-        Serial.println("Dimmer fade à " + dim_val + " en " + dimmer_fade + "ms");
-        if (dim_val == "LOW") {dimmer_value = dimmer_low ;}
-        else if (dim_val == "MID") {dimmer_value = dimmer_mid ;}
-        else if (dim_val == "HIGH") {dimmer_value = dimmer_high ;}
-        else if (dim_val == "OFF") {dimmer_value = 0 ;}
-        else { dimmer_value = dim_val.toInt();} //value% 
-        dimmer.setTime(dimmer_fade);
-        dimmer.set(percent2PWM(dimmer_value));
 //      Serial.println(dimmer_delta);
         
       }

+ 19 - 5
eventually.ino

@@ -25,20 +25,20 @@ bool updateAll() {
   updateLeds() ;
   if (dimmer_random){
     dimmer.setTime(50);
-    if (random8(100) > 20) {
-      dimmer.set(percent2PWM(random8(100)));
+    if (random8(100) > 50) {
+      dimmer.set(percent2PWM(random8(10, 30)));
     }
   }
   else if (dimmer_move) {
     if (random8(100) > 20) {
       int timer = millis();
-      int delta = 2 * dimmer_move * (sin8( timer / 9 )-127) * (sin8(timer / 7 )-127) / 65536 ; //- dimmer_move/2
+      int delta = 2* dimmer_move * (sin8( timer / 9 )-127) * (sin8(timer / 7 )-127) / 65536 ; //- led_move/2
       dimmer.setTime(150);
       dimmer.set(percent2PWM(dimmer_value + delta));
-      Serial.println(dimmer_value + delta );
+      //Serial.println(dimmer_value - delta );
     }
   }
-//  FastLED.show();
+
   
   return false;
   
@@ -120,6 +120,19 @@ void stopAll() {
     EvtResetButtonContext();
 }
 
+void audioVolume(){
+  int targetVolume = map (analogRead(A21), 0, 1024, 0, -70) ;
+  Serial.println(analogRead(A21));
+  if (targetVolume != audioMasterVolume){
+    audioMasterVolume = targetVolume;
+    Serial.print("Setting audio volume to : ");
+    Serial.println(audioMasterVolume);
+    for (int i ; i<4 ; i++) {
+     tsunami.masterGain(i, audioMasterVolume);
+    }
+  } 
+}
+
 ///////////////////// CONTEXT ///////////////////////////////
 
 bool button0(){
@@ -198,6 +211,7 @@ void EvtResetButtonContext () {
   mgr.addListener(new EvtTimeListener(10, true, (EvtAction)readSDFile));
   mgr.addListener(new EvtTimeListener(refreshRate, true, (EvtAction)updateAll));
   //mgr.addListener(new EvtTimeListener(40, true, (EvtAction)fastLeds));
+  mgr.addListener(new EvtTimeListener(refreshRate, true, (EvtAction)audioVolume));
   Serial.println("Done resetting ");
   
 }

+ 36 - 4
fastLed.ino

@@ -2,9 +2,12 @@
 ///////////////////////// FastLED ///////////////////////////////////////
 void beatSyncPalette() {
   
-  uint8_t speed = beatsin8(6,0,255);
-  CRGB color = blend(CRGB::Aqua, CRGB::Orange, speed);
+  uint8_t speed = beatsin8(BPM,0,255);
+  uint8_t speed2 = beatsin8(1.5 * BPM,0,255);
+  CRGB color = blend(ColorFromPalette( palette_SOLEIL,0 , 255), ColorFromPalette( palette_MER,0 , 255), speed);
+  color = blend(color, ColorFromPalette( palette_FLAMINGO,0 , 255), speed2);
   fill_solid(lustre_currentPalette, 16, color);
+//  Serial.println("beat");
 }
 
 
@@ -18,7 +21,7 @@ void FillLEDsFromPaletteColors( CRGB leds[], int NUM_LED, CRGBPalette16 palette,
 
 float FadingBrightness (int FastLEDindex, float currentBrightness, float targetBrightness, int step) {
   //if (currentBrightness != targetBrightness) { currentBrightness += step ;}
-  if ( (step > 0 && currentBrightness < targetBrightness) || (step < 0 && currentBrightness > targetBrightness) ) { currentBrightness += step ;}
+  if ( (step > 0 && currentBrightness <= targetBrightness) || (step < 0 && currentBrightness >= targetBrightness) ) { currentBrightness = constrain(currentBrightness + step, 0, 255) ;}
   //else Serial.println("fade done");
   //Serial.println(currentBrightness);
   FastLED[FastLEDindex].showLeds((int)currentBrightness) ;
@@ -37,9 +40,38 @@ void updateLeds(){
   if(palette_BEAT) {
     beatSyncPalette();
   }
+
+ 
   FillLEDsFromPaletteColors(lustreLeds,NUM_LEDS_LUSTRE, lustre_currentPalette, 0);
+  
 //  uint8_t secondHand = (millis() / 10) ;
-  lustre_currentBrightness = FadingBrightness( 0, lustre_currentBrightness, lustre_targetBrightness ,lustre_stepBrightness);
+  if (palette_MOVE) {
+    if (random8(100) > 20) {
+      int timer = millis();
+      int delta = 2 * led_move * (sin8( timer / 9 )) * (sin8(timer / 7 )) / 65536  ; //- led_move/2
+      FastLED[0].showLeds(lustre_currentBrightness - delta) ;
+      //Serial.println(lustre_currentBrightness - delta);
+    }
+    
+  }
+  else {
+    lustre_currentBrightness = FadingBrightness( 0, lustre_currentBrightness, lustre_targetBrightness ,lustre_stepBrightness);
+//    Serial.println(lustre_currentBrightness);
+  }
+
+  
+  
+  nblendPaletteTowardPalette(table_currentPalette, table_targetPalette, 48);
+  nblendPaletteTowardPalette(table_currentPalette, table_targetPalette, 48);
+  nblendPaletteTowardPalette(table_currentPalette, table_targetPalette, 48);
+  nblendPaletteTowardPalette(table_currentPalette, table_targetPalette, 48);
+  nblendPaletteTowardPalette(table_currentPalette, table_targetPalette, 48);
+  nblendPaletteTowardPalette(table_currentPalette, table_targetPalette, 48);
+
+  FillLEDsFromPaletteColors(tableLeds,NUM_LEDS_TABLE, table_currentPalette, 0);
+
+  table_currentBrightness = FadingBrightness( 1, table_currentBrightness, table_targetBrightness ,table_stepBrightness);
+
 }