From 6684be01ebf681d343f1b370f2d33922cea0a099 Mon Sep 17 00:00:00 2001 From: Stefan Ostermann Date: Mon, 9 Oct 2023 21:24:57 +0200 Subject: [PATCH] improvements --- README.md | 9 +++++++++ sounds/sleep.mp3 | Bin 0 -> 16070 bytes sounds/start.mp3 | Bin 0 -> 34374 bytes src/DirectoryNode.cpp | 3 ++- src/DirectoryNode.h | 2 ++ src/globals.h | 19 +++++++++++++++++++ src/main.cpp | 31 ++++++++++++++++++++++++++++++- 7 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 sounds/sleep.mp3 create mode 100644 sounds/start.mp3 diff --git a/README.md b/README.md index 5302fc1..6031859 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,15 @@ Wake up / Next -> 04 and GND Previous -> 16 and GND ``` +## System sounds + +Place these sounds in the folder `system` on the SD card: + +* sleep.mp3 +* start.mp3 + +sleep.mp3 will be played just before the timed shutdown, start.mp3 will be played if the box started and initialized successfully. + ## TODOs * Card Reader with SPI. Configure hspi, second SPI channel? Or does SD Card + RFID run at the same channel? diff --git a/sounds/sleep.mp3 b/sounds/sleep.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..7e3183a572c0bb78903f43ee72147ed84af2f6d9 GIT binary patch literal 16070 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 literal 0 HcmV?d00001 diff --git a/src/DirectoryNode.cpp b/src/DirectoryNode.cpp index 050d24b..5bbdb6e 100644 --- a/src/DirectoryNode.cpp +++ b/src/DirectoryNode.cpp @@ -64,7 +64,8 @@ void DirectoryNode::buildDirectoryTree(const char *currentPath) { break; } - if (entry.isDirectory()) + + if (entry.isDirectory() && strcmp(entry.name(),sys_dir.c_str())) { DirectoryNode *newNode = new DirectoryNode(entry.name()); subdirectories.push_back(newNode); diff --git a/src/DirectoryNode.h b/src/DirectoryNode.h index 0716c4e..0859ef9 100644 --- a/src/DirectoryNode.h +++ b/src/DirectoryNode.h @@ -4,6 +4,8 @@ #include #include +const String sys_dir = "system"; + class DirectoryNode { private: String name; diff --git a/src/globals.h b/src/globals.h index f7ae102..e2e056c 100644 --- a/src/globals.h +++ b/src/globals.h @@ -56,10 +56,29 @@ unsigned long lastStart = 0; unsigned long lastInteraction = 0; +boolean sleepSoundPlayed = false; + +boolean startupSoundPlayed = false; + +boolean continuousMode = false; + uint8_t buttontoignore = 0; const int startDelay = 250; +const String sleep_sound = "sleep.mp3"; + +const String startup_sound = "start.mp3"; + +/* +const long sleepMessageDelay = 28000; + +// wait until deep sleep: +const long sleepDelay = 30000; +*/ + +const long sleepMessageDelay = 1798000; + // wait until deep sleep: const long sleepDelay = 1800000; diff --git a/src/main.cpp b/src/main.cpp index e4b7ccf..e25f859 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -38,6 +38,12 @@ #include "css.h" #include "DirectoryNode.h" +#define SOUND_STARTUP "start.mp3" +#define SOUND_SLEEP "sleep.mp3" + + + + File root; File mp3File; @@ -104,6 +110,11 @@ void playSongByName(String song) deactivateSD(); } +void playSongByPath(String path) +{ + playFile(path.c_str()); +} + void playSongByRFID(String id) { String song = rfid_map[id]; @@ -128,6 +139,7 @@ bool playFile(const char *filename, uint32_t resumeFilePos) void playNextMp3() { stop(); + continuousMode = true; if (currentNode == NULL) { currentNode = rootNode.findFirstDirectoryWithMP3s(); @@ -248,7 +260,8 @@ void next() void audio_eof_mp3(const char *info) { Serial.println("audio file ended."); - playNextMp3(); + if (continuousMode) + playNextMp3(); } /* not working, FIXME remove me! */ @@ -472,8 +485,24 @@ void loop() start(); } + if (!startupSoundPlayed) { + startupSoundPlayed = true; + String tempPath = "/"+sys_dir+"/"+startup_sound; + playSongByPath(tempPath.c_str()); + } + + + // send device to sleep: long now = millis(); + + if (!sleepSoundPlayed && now - lastInteraction > sleepMessageDelay) { + sleepSoundPlayed = true; + String tempPath = "/"+sys_dir+"/"+sleep_sound; + playSongByPath(tempPath.c_str()); + } + + if (now - lastInteraction > sleepDelay) { Serial.println("entering deep sleep..."); deactivateRFID();