Bladeren bron

one file per button + non blocking actions

non blocking sd file reading and delaying
dimmer fading blocks context resetting

now loads a different file for each button
Etienne Landon 8 jaren geleden
bovenliggende
commit
5178bb6a7d
1 gewijzigde bestanden met toevoegingen van 87 en 49 verwijderingen
  1. 87 49
      DownTigerDown/DownTigerDown.ino

+ 87 - 49
DownTigerDown/DownTigerDown.ino

@@ -20,6 +20,7 @@ File btnFile ;
 String buf;
 boolean SDfound;
 
+
 //Tsunami wav player
 Tsunami tsunami;
 int  gNumTracks;                // Number of tracks on SD card
@@ -27,6 +28,14 @@ char gTsunamiVersion[VERSION_STRING_LEN];    // Tsunami version string
 
 //Eventually pointers to manage creation/deletion of listeners
 EvtManager mgr;
+EvtListener *pSD; // identified listener for non-blocking file reading
+EvtListener *pDelay ; 
+
+//delay
+int delay_start ;
+unsigned long delay_length ;
+bool isDelaying ;
+bool delay_flag ; //prevent first event to fire
 
 //Dimmer
 #define DIMMER_PIN 9
@@ -119,7 +128,7 @@ void setup() {
   }
 
   // Create timers for controlled events
-  //pDimmer = new EvtTimeListener(40, true, (EvtAction)fadeDimmer);
+  
 
   
   //EvtResetButtonContext();
@@ -157,57 +166,71 @@ String getSubstring(String dataString, char separator, int index)
 
 
 
-void readSDFile() {
- 
-  while (btnFile.available()) {
-    buf = btnFile.readStringUntil('\n');
-    
-    //check selector (1st word of line) and execute corresponding function
-    String selector = getSubstring(buf, ' ', 0);
-    //Serial.println(selector);
-    
-    if (selector == "sound") {
-      String track = getSubstring(buf, ' ', 2) ;
-      String out = getSubstring(buf, ' ', 1) ;
-      Serial.println("Playing track " + track + "to output " + out);
-      tsunami.trackPlayPoly(track.toInt(), out.toInt(), true);     
-    }
-    
-    else if (selector == "led") {
-      String mode = getSubstring(buf, ' ', 1);
-      if (mode.toInt() == 0){
+bool readSDFile() {
+  
+  if (!isDelaying) { // if currently delaying, don't read a line
+    if (btnFile.available()) {
+      buf = btnFile.readStringUntil('\n');
+      
+      //check selector (1st word of line) and execute corresponding function
+      String selector = getSubstring(buf, ' ', 0);
+      //Serial.println(selector);
+      
+      if (selector == "sound") {
+        String track = getSubstring(buf, ' ', 2) ;
+        String out = getSubstring(buf, ' ', 1) ;
+        Serial.println("Playing track " + track + " to output " + out);
+        tsunami.trackPlayPoly(track.toInt(), out.toInt(), true);     
+      }
+      
+      else if (selector == "led") {
+        String mode = getSubstring(buf, ' ', 1);
+        if (mode.toInt() == 0){
+          
+        }
+        Serial.println("Led mode " + getSubstring(buf, ' ', 1));
+      }
+     
+      else if (selector == "dimmer") {
+        Serial.println("Dimmer fade à " + getSubstring(buf, ' ', 1) + " en " + getSubstring(buf, ' ', 2) + "ms");
+        int dimmer_value = getSubstring(buf, ' ', 1).toInt();
+        int dimmer_fade = getSubstring(buf, ' ', 2).toInt();
+        dimmer.setTime(dimmer_fade);
+        dimmer.set(dimmer_value);
+  //      Serial.println(dimmer_delta);
         
       }
-      Serial.println("Led mode " + getSubstring(buf, ' ', 1));
-    }
-   
-    else if (selector == "dimmer") {
-      Serial.println("Dimmer fade à " + getSubstring(buf, ' ', 1) + " en " + getSubstring(buf, ' ', 2) + "ms");
-      int dimmer_value = getSubstring(buf, ' ', 1).toInt();
-      int dimmer_fade = getSubstring(buf, ' ', 2).toInt();
-      dimmer.setTime(dimmer_fade);
-      dimmer.set(dimmer_value);
-//      Serial.println(dimmer_delta);
+      
+      else if (selector == "delay") {
+        String wait = getSubstring(buf, ' ', 1);
+        Serial.println("delai " + wait + " ms");
+        isDelaying = true ;
+        delay_start = millis();
+        delay_length = wait.toInt() ;
+//        delay_flag = 0 ;
+        mgr.addListener(new EvtTimeListener(50 , true, (EvtAction)checkDelay));
+          
+        //delay(wait.toInt());
+      }
+  
+      else if (selector == ""){}
+     
+      else {
+        Serial.print(selector);
+        Serial.println(": pas compris");
+        }
+      
       
     }
     
-    else if (selector == "delay") {
-      String wait = getSubstring(buf, ' ', 1);
-      Serial.println("delai " + wait + " ms");
-      delay(wait.toInt());
-    }
-
-    else if (selector == ""){}
-   
     else {
-      Serial.print(selector);
-      Serial.println(": pas compris");
-      }
-    
-    
+      Serial.println("EOF");
+  //    mgr.removeListener(pSD);
+      btnFile.close();
+      EvtResetButtonContext ();
+    }
   }
-  Serial.println("EOF");
-  btnFile.close();
+  return false ;
   
 }
 
@@ -219,6 +242,16 @@ void readSDFile() {
 // * readSequence -> reads a text file on the SD card with the sequence of actions to execute
 // */
 
+bool checkDelay() {
+  //Serial.println("checkDelay");
+  //if (delay_flag == 0 ) { delay_flag = 1 ;}
+  if (millis() - delay_start > delay_length ) {
+    isDelaying = false ;
+  }
+  //else {isDelaying = false ;}
+  return false ;
+}
+
 bool fadeDimmer() {
 //  if (dimmer_value != dimmer_target) {
 //    dimmer_value += dimmer_delta ;
@@ -228,7 +261,7 @@ bool fadeDimmer() {
 //  else 
 //    mgr.removeListener(pDimmer);
   FadeLed::update();
-  Serial.println("fade");
+//  Serial.println("fade");
   return false;
   
 }
@@ -265,13 +298,15 @@ void buttonFocus(int index) {
   String file = "button";
   file+=index ;
   file+=".txt";
-  btnFile = SD.open("button0.txt") ;
+  btnFile = SD.open(file.c_str()) ;
   Serial.println("opening " + file);
   if (!file) {
     Serial.print("The text file cannot be opened");
 //    return false;
    }
-   readSDFile();
+   mgr.addListener(new EvtTimeListener(10, true, (EvtAction)readSDFile));
+   //mgr.addListener(new EvtTimeListener(20, true, (EvtAction)fadeDimmer));
+   //readSDFile();
 
 }
 
@@ -317,6 +352,7 @@ bool button9(){
 } 
 
 void EvtResetButtonContext () {
+  Serial.println("Resetting event context");
   mgr.resetContext();
   // button listeners
   mgr.addListener(new EvtPinListener(BUTTON_PIN[0], (EvtAction)button0));
@@ -331,7 +367,9 @@ void EvtResetButtonContext () {
   mgr.addListener(new EvtPinListener(BUTTON_PIN[9], (EvtAction)button9));
 
   // controlled time listeners
-  mgr.addListener(new EvtTimeListener(40, true, (EvtAction)fadeDimmer));
+//  pSD = new EvtTimeListener(5, true, (EvtAction)readSDFile);
+  //mgr.addListener(new EvtTimeListener(20, true, (EvtAction)fadeDimmer));
+  
 }