I_Mihalache_AudioPlayer.ino 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #include <Audio.h>
  2. #include <Wire.h>
  3. #include <SPI.h>
  4. #include <SD.h>
  5. #include <SerialFlash.h>
  6. /* SdWav1 : sample voix |
  7. * SdWav2 : sample attente |-> mix1 -> Lout & RMS1
  8. *
  9. * SdWav3 : sample ambiance -> mix2 -> Rout & RMS2
  10. */
  11. // GUItool: begin automatically generated code
  12. AudioPlaySdWav LoopPlayer; //xy=152,429 LOOP
  13. AudioPlaySdWav PresencePlayer; //xy=153,217 PRESENCE
  14. AudioPlaySdWav WaitPlayer; //xy=155,307 WAIT
  15. AudioMixer4 mixer1; //xy=572,215
  16. AudioMixer4 mixer2; //xy=579,344
  17. AudioAnalyzeRMS rms1; //xy=875,315
  18. AudioOutputI2S i2s1; //xy=876,225
  19. AudioAnalyzeRMS rms2; //xy=876,365
  20. AudioConnection patchCord1(LoopPlayer, 0, mixer2, 0);
  21. AudioConnection patchCord2(PresencePlayer, 0, mixer1, 0);
  22. AudioConnection patchCord3(WaitPlayer, 0, mixer1, 1);
  23. AudioConnection patchCord4(mixer1, 0, i2s1, 0);
  24. AudioConnection patchCord5(mixer1, rms1);
  25. AudioConnection patchCord6(mixer2, 0, i2s1, 1);
  26. AudioConnection patchCord7(mixer2, rms2);
  27. AudioControlSGTL5000 sgtl5000_1; //xy=573,537
  28. // GUItool: end automatically generated code
  29. #define LOOP_WAV "LOOP.WAV"
  30. #define PRESENCE_WAV "PRESENCE.WAV"
  31. #define WAIT_WAV "PRESENCE.WAV"
  32. int WAIT_TIME=30000 ;
  33. bool presence ;
  34. uint32_t LastPresence ;
  35. // Use these with the Teensy Audio Shield
  36. #define SDCARD_CS_PIN 10
  37. #define SDCARD_MOSI_PIN 7
  38. #define SDCARD_SCK_PIN 14
  39. void ESPSerial(){
  40. // Send bytes from ESP8266 -> Teensy to Computer
  41. bool printLine ;
  42. while ( Serial1.available() ) {
  43. Serial.write( Serial1.read() );
  44. printLine = 1 ;
  45. }
  46. // if (printLine) {Serial.println("");}
  47. printLine = 0;
  48. // Send bytes from Computer -> Teensy back to ESP8266
  49. while ( Serial.available() ) {
  50. Serial1.write( Serial.read() );
  51. }
  52. }
  53. void setup() {
  54. Serial.begin(115200);
  55. Serial1.begin(115200);
  56. //LDR digital inputs
  57. pinMode(16, INPUT);
  58. pinMode(20,INPUT);
  59. AudioMemory(16);
  60. sgtl5000_1.enable();
  61. sgtl5000_1.lineOutLevel(13); // set output to 3.16 Vpp
  62. sgtl5000_1.volume(1); //set volume to maximum
  63. SPI.setMOSI(SDCARD_MOSI_PIN);
  64. SPI.setSCK(SDCARD_SCK_PIN);
  65. if (!(SD.begin(SDCARD_CS_PIN))) {
  66. // stop here, but print a message repetitively
  67. while (1) {
  68. Serial.println("Unable to access the SD card");
  69. delay(500);
  70. }
  71. }
  72. Serial1.println("AT+GMR");
  73. delay(2000);
  74. //while (!Serial1.available()) {};
  75. ESPSerial();
  76. Serial.println("");
  77. Serial.println("");
  78. delay(00);
  79. }
  80. //
  81. void playFile(const char *filename)
  82. {
  83. Serial.print("Playing file: ");
  84. Serial.println(filename);
  85. PresencePlayer.play(filename);
  86. // A brief delay for the library read WAV info
  87. delay(5);
  88. }
  89. void printLDR(){
  90. Serial.print(analogRead(A3));
  91. Serial.print(" ");
  92. Serial.print(digitalRead(16));
  93. Serial.print(" ");
  94. Serial.print(analogRead(A7));
  95. Serial.print(" ");
  96. Serial.print(digitalRead(20));
  97. Serial.println();
  98. }
  99. bool checkPresence(int Pin1, int Pin2) {
  100. bool isPresent = digitalRead(Pin2); //|| digitalRead(Pin2);
  101. return isPresent ;
  102. }
  103. void loop() {
  104. // LOOP FILE
  105. if (!LoopPlayer.isPlaying()) {
  106. Serial.println("Playing LOOP file");
  107. LoopPlayer.play(LOOP_WAV);
  108. // A brief delay for the library read WAV info
  109. delay(10);
  110. }
  111. // PRESENCE FILE
  112. presence = checkPresence(16, 20);
  113. //printLDR();
  114. //Serial.println(presence);
  115. //PRESENCE DETECTED
  116. if (presence ) {
  117. LastPresence = millis() ;
  118. if (!PresencePlayer.isPlaying()) {
  119. //stop WAIT_WAV if playing
  120. if (WaitPlayer.isPlaying()) {
  121. //fade out WaitPlayer
  122. Serial.println("Fade out Wait file");
  123. for (float fadeRamp ; fadeRamp < 100 ; fadeRamp++ ) {
  124. mixer1.gain(1, 1.0 - fadeRamp/100) ;
  125. }
  126. WaitPlayer.stop() ;
  127. mixer1.gain (1, 1.0); // set volume for next play
  128. delay(2000) ;
  129. }
  130. PresencePlayer.play(PRESENCE_WAV) ;
  131. delay(15);
  132. Serial.println("Playing presence file");
  133. }
  134. // if presence and playing, don't do anything
  135. }
  136. else if (!presence ) {
  137. if (PresencePlayer.isPlaying()) {
  138. //what if presence gone while playing ?
  139. }
  140. if ( (millis() - LastPresence > WAIT_TIME) && !WaitPlayer.isPlaying() && !PresencePlayer.isPlaying()) {
  141. WaitPlayer.play(WAIT_WAV);
  142. Serial.println("Playing wait file");
  143. delay(10);
  144. }
  145. }
  146. ESPSerial();
  147. delay(100);
  148. }