#pragma once extern std::vector melody_steps; extern uint16_t relayDurations[16]; void setMelodyAttributes(JsonDocument doc); void loadMelodyInRAM(std::vector &melody_steps); void loadRelayTimings(); void saveRelayTimings(); // - - - - - - - - - - - - - - - - - - - - - - - - - - - void setMelodyAttributes(JsonDocument doc){ melody.name = doc["name"].as(); // Convert to std::string "name" : "eortastiko" melody.id = doc["id"].as(); melody.duration = doc["duration"].as(); melody.infinite_play = doc["infinite"].as(); melody.interval = doc["interval"].as(); melody.speed = doc["speed"].as(); melody.loop_duration = doc["loop_dur"].as(); // Print Just for Debugging Purposes Serial.printf("Name: %s, ID: %d, Total Duration: %lu, Loop Duration: %lu, Interval: %d, Speed: %d, Inf: %s\n", melody.name.c_str(), melody.id, melody.duration, melody.loop_duration, melody.interval, melody.speed, melody.infinite_play ? "true" : "false" ); } void loadMelodyInRAM(std::vector &melody_steps) { // read the file and save in RAM std::string filePath = "/" + melody.name + ".bin"; Serial.println("New Melody Selected !!!"); Serial.println("Reading data from file..."); //Serial.println(filePath); File bin_file = SPIFFS.open(filePath.c_str(), "r"); if (!bin_file) { Serial.println("Failed to Open File"); return; } size_t fileSize = bin_file.size(); size_t steps = fileSize / 2; melody_steps.resize(steps); Serial.print("Opened File ! Size: "); Serial.print(fileSize); Serial.print(" Steps: "); Serial.println(steps); for (size_t i=0; i(); Serial.printf("Relay %d duration set to %d ms\n", i + 1, relayDurations[i]); } else { Serial.printf("Relay %d not found in JSON payload. Keeping previous duration: %d ms\n", i + 1, relayDurations[i]); } } saveRelayTimings(); } void saveRelayTimings() { StaticJsonDocument<512> doc; // Adjust size if needed // Populate the JSON object with relay durations for (uint8_t i = 0; i < 16; i++) { String key = String("b") + (i + 1); doc[key] = relayDurations[i]; } // Open the file for writing File file = SPIFFS.open("/settings/relayTimings.json", FILE_WRITE); if (!file) { Serial.println("Failed to open file for writing"); return; } // Serialize JSON to the file if (serializeJson(doc, file) == 0) { Serial.println("Failed to write JSON to file"); } else { Serial.println("Relay timings saved successfully"); } file.close(); } void loadRelayTimings() { // Open the file for reading File file = SPIFFS.open("/settings/relayTimings.json", FILE_READ); if (!file) { Serial.println("Settings file not found. Using default relay timings."); return; } // Parse the JSON file StaticJsonDocument<512> doc; // Adjust size if needed DeserializationError error = deserializeJson(doc, file); if (error) { Serial.println("Failed to parse settings file. Using default relay timings."); file.close(); return; } // Populate relayDurations array for (uint8_t i = 0; i < 16; i++) { String key = String("b") + (i + 1); if (doc.containsKey(key)) { relayDurations[i] = doc[key].as(); Serial.printf("Loaded relay %d duration: %d ms\n", i + 1, relayDurations[i]); } } file.close(); }