Uhrzeitabhängiges Initvolume

Hallo zusammen,

Ich würde gerne mithilfe einer rtc DS3231 die Startlautstärke festlegen. Also Nachts leiser als tagsüber. Das ganze mit der Always on fork.

Das rtc modul habe ich mit einigem Kampf eingebunden bekommen, es wird auch die richtige Uhrzeit angezeigt.

Leider kriege ich die Bedingung nicht hin.

// ------------------ Volume Settings -------------------------------------------------------
  mySettings.maxVolume = 25;               // max.Lautstärke Lautsprecher
  mySettings.minVolume = 2;                // min.Lautstärke Lautsprecher
  mySettings.initVolume = 15;              // Start-Lautstärke Lautsprecher
 #ifdef EarPhone  
  mySettings.maxEarVol = 20;               // max.Lautstärke Kopfhörer
  mySettings.minEarVol = 2;                // min.Lautstärke Kopfhörer
  mySettings.initEarVol = 15;              // Start-Lautstärke Kopfhörer

Da muss doch irgendwie eine if-Funktion rein, oder?

Danke :slight_smile:
Beste Grüße,
Joscha

Also richtig im Code kenne ich mich nicht (mehr) aus, aber der feste Wert von 15 wird wohl in den EEPROM geschrieben wenn man die Box auf Werkseinstellung setzt.
Macht man den reset in der Nacht, sollte deine Code Änderung greifen.

Such im Code danach, wo die Lautstärke dem Player gesagt wird, das sollte im void Setup sein und heißt glaube setvolume

Poste Mal deine Ergänzung des Codes. Du musst im Setup die Festlegung der Startlautstärke in eine If Funktion einbinden. Entweder du legst dir für die Nacht eine Variable als const fest, die dann bei Erfüllung der Bedingung für die Startlautstärke gesetzt wird, oder du reduzierst den Wert prozentual. Die prozentuale Verringerung hat den Vorteil, dass die nächtliche Startlautstärke automatisch der Tagesstartlautstärke folgt. Hast du also am Tage eine hohe Startlautstärke, ist sie nachts ebenfalls relativ hoch um die Prozentzahl reduziert. Bei niedriger Lautstärke entsprechend im selben Verhältnis.

Vielen Dank schon einmal!
Leider verstehe ich nur einen Bruchteil von dem :smiley:

Ich nutze zur Info die Tonuino AIO-Plus Platine.
Als Library habe ich RTCLib in einer nicht ganz aktuellen Version installiert.

Geändert habe ich ein paar Stellen, die habe ich versucht mit //UHRZEIT zu kennzeichnen.

Mein Code sieht also ungefähr so aus:

//********************* RFID Reader ************************************************
// MFRC522
MFRC522 mfrc522(CS_Pin, RstPin);                // Create MFRC522
MFRC522::MIFARE_Key key;
const byte sector = 1;
const byte blockAddr = 4;
const byte trailerBlock = 7;
MFRC522::StatusCode status;

//UHRZEIT
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

//UHRZEIT



// ******************** DF-Player **************************************************
// DFPlayer Mini
#ifdef Hardwareserial

und weiter unten

  Serial.println(F("** VERSION THOMAS LEHNERT ** 2023-02-26 **"));
  Serial.println();

  //UHRZEIT
 #ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
 #endif
 
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();}

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, let's set the time!");
    // When time needs to be set on a new device, or after a power loss, the
    // following line sets the RTC to the date & time this sketch was compiled
    // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
  }
  //UHRZEIT

   //UHRZEIT

     DateTime now = rtc.now();
     Serial.print(now.year(), DEC);
     Serial.print('/');
     Serial.print(now.month(), DEC);
     Serial.print('/');
     Serial.print(now.day(), DEC);
     Serial.print(" (");
     Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
     Serial.print(") ");
     Serial.print(now.hour(), DEC);
     Serial.print(':');
     Serial.print(now.minute(), DEC);
     Serial.print(':');
     Serial.print(now.second(), DEC);
     Serial.println();
     Serial.print(" since midnight 1/1/1970 = ");
     Serial.print(now.unixtime());
     Serial.print("s = ");
     Serial.print(now.unixtime() / 86400L);
     Serial.println("d");
     // calculate a date which is 7 days, 12 hours, 30 minutes, 6 seconds into the future
     DateTime future (now + TimeSpan(7,12,30,6));
     Serial.print(" now + 7d + 12h + 30m + 6s: ");
     Serial.print(future.year(), DEC);
     Serial.print('/');
     Serial.print(future.month(), DEC);
     Serial.print('/');
     Serial.print(future.day(), DEC);
     Serial.print(' ');
     Serial.print(future.hour(), DEC);
     Serial.print(':');
     Serial.print(future.minute(), DEC);
     Serial.print(':');
     Serial.print(future.second(), DEC);
     Serial.println();
     Serial.print("Temperature: ");
     Serial.print(rtc.getTemperature());
     Serial.println(" C");
     Serial.println();
     delay(3000);

      //UHRZEIT
 #ifndef AiOPLUS
 #ifndef AiO

und das ganze habe ich sicherheitshalber / aus unwissenheit auch noch eingefügt:

else if (ButtonOne.pressedFor(LONG_PRESS) && ignoreButtonOne == false)                       
    {                                                          

       //UHRZEIT

     DateTime now = rtc.now();
     Serial.print(now.year(), DEC);
     Serial.print('/');
     Serial.print(now.month(), DEC);
     Serial.print('/');
     Serial.print(now.day(), DEC);
     Serial.print(" (");
     Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
     Serial.print(") ");
     Serial.print(now.hour(), DEC);
     Serial.print(':');
     Serial.print(now.minute(), DEC);
     Serial.print(':');
     Serial.print(now.second(), DEC);
     Serial.println();
     Serial.print(" since midnight 1/1/1970 = ");
     Serial.print(now.unixtime());
     Serial.print("s = ");
     Serial.print(now.unixtime() / 86400L);
     Serial.println("d");
     // calculate a date which is 7 days, 12 hours, 30 minutes, 6 seconds into the future
     DateTime future (now + TimeSpan(7,12,30,6));
     Serial.print(" now + 7d + 12h + 30m + 6s: ");
     Serial.print(future.year(), DEC);
     Serial.print('/');
     Serial.print(future.month(), DEC);
     Serial.print('/');
     Serial.print(future.day(), DEC);
     Serial.print(' ');
     Serial.print(future.hour(), DEC);
     Serial.print(':');
     Serial.print(future.minute(), DEC);
     Serial.print(':');
     Serial.print(future.second(), DEC);
     Serial.println();
     Serial.print("Temperature: ");
     Serial.print(rtc.getTemperature());
     Serial.println(" C");
     Serial.println();
     delay(3000);

      //UHRZEIT
     if (activeModifier != NULL)                               // wenn Modifikationskarte aktiv
      if (activeModifier->handlePause() == true)  return;      // wenn Pausetaste gesperrt -> Abbruch

habe versucht alles so auszukommentieren, mit //UHRZEIT und habe die jeweiligen code brocken davor und danach eingefügt, damit ihr vielleicht nachvollziehen könnt wo das ding jeweils liegt.

Danke :slight_smile:

EDIT:
Das habe ich selbstverständlich niemals selber geschrieben, sondern alles schön aus dem internet kopiert. Daher bin ich jetzt auch völlig überfordert wie ich diese bedingung in den übrigen code reinbekomme…