|
@@ -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));
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|