Configurar hora de rtc sin necesidad del computador

Buenas me explico deseo modificar la hora sin necesidad de usar el monitor serie en el computador, de esta manera puedo hacer una app y configurar desde un movil con un bluetooth
cambiando Serial.available por la varibla que asigne a serial pero deseo preguntar si hay alguna manera mas eficiente de hacerlo en esta tendria que mandar esta cadena

y17m10d15

siendo

año=y
mes=m
d=d
int Yarray[2];
int Marray[2];
int Darray[3];
char XY;

#include <DS3231.h>
#include <Wire.h>
DS3231 Clock;
int  y=0,m=0,d=0, h=0, minute_mod=2, second_mod=1;

void setup() {
    // Se inicial la interfaz I2c
  Wire.begin();
  Serial.begin (9600);
     Serial.setTimeout(100);
}

void loop() {
  if (Serial.available() > 0) {
    XY = Serial.read();
    if (XY == 'Y' || XY == 'y') {
      for (int a = 0; a < 2; a++) {
        Yarray[a] = (Serial.read() - 48);
        delay(10);
      }
    }
    if (XY == 'M' || XY == 'm') {
      for (int a = 0; a < 2; a++) {
        Marray[a] = (Serial.read() - 48);
        delay (10);
      }
    }
    if (XY == 'D' || XY == 'd') {
      for (int a = 0; a < 2; a++) {
        Darray[a] = (Serial.read() - 48);
        delay (10);
      }
    }
  }
  y = ( (Yarray[0] * 10) + Yarray[1]);
  m = ( (Marray[0] * 10) + Marray[1]);
  d = ( (Darray[0] * 10) + Darray[1]);
  //Esta parte la he hecho para comprobar los valores que se graban
  Serial.print ("y=");
  Serial.print (y);
  Serial.print (" m=");
  Serial.println (m);
    Serial.print (" d=");
  Serial.println (d);
  Clock.setClockMode(true); 
    Clock.setYear((byte)y);
    Clock.setMonth((byte)m);
    Clock.setDate((byte)d);
  delay (10);

}

jaanredi:
deseo preguntar si hay alguna manera mas eficiente de hacerlo

¿Es mucho pedir hacer que la aplicación mande solamente un byte por dato? De hacerlo así, el ajetreo de procesarlo sería menor.

me podrias facilitar un ejemplo?
te agradecería

#include <DS3231.h>
#include <Wire.h>
#include <SoftwareSerial.h>

DS3231 Clock;
byte year, month, date, DoW, hour, minute, second;
int var;

int Yarray[2];
int Marray[2];
int Darray[2];
int Harray[2];
int Narray[2];
int Sarray[2];
char XY;
int  y=0,m=0,d=0, h=0, n=0, s=0;

///////////////////////////////////////////////////// 
void setup() {
  // Se inicial la interfaz I2c
  Wire.begin();
  // Se inicia la Comunicación Serial
  Serial.begin(9600);
  Serial.setTimeout(100);
}
///////////////////////////////////////////////////// 
void loop() {
  if (Serial.available()>0){
  var=(Serial.read());
  
  if (var=='a'){
  Serial.print ("la fecha del dispositivo es: \n" );
  ver_fecha();
  }
    if (var=='b'){
  Serial.print ("modificar fecha de dispositivo: \n");
  Serial.print ("año/mes/dia/hora/min/sg: \n ");
  Serial.print ("y/m/d/h/n/s: \n ");
  mod_fecha();
  }  
    }
      }
/////////////////////////////////////////////////////

void ver_fecha()
{
  delay(1000);
  //Se rescata la información
  Clock.getTime(year, month, date, DoW, hour, minute, second);
  //Se imprime
  Serial.print(date, DEC);
  Serial.print("/");
  Serial.print(month, DEC);
  Serial.print("/");
  Serial.print(year, DEC);
  Serial.print("  ");
  Serial.print(hour, DEC);
  Serial.print(":");
  Serial.print(minute, DEC);
  Serial.print(":");
  Serial.println(second, DEC);
  {
  return loop();
  }
}
/////////////////////////////////////////////////////
void mod_fecha()
{
if (Serial.available() > 0) {
    XY = Serial.read();
    if (XY == 'Y' || XY == 'y') {
      for (int a = 0; a < 2; a++) {
        Yarray[a] = (Serial.read() - 48);
        delay(10);
      }
    }
    if (XY == 'M' || XY == 'm') {
      for (int a = 0; a < 2; a++) {
        Marray[a] = (Serial.read() - 48);
        delay (10);
      }
    }
    if (XY == 'D' || XY == 'd') {
      for (int a = 0; a < 2; a++) {
        Darray[a] = (Serial.read() - 48);
        delay (10);
      }
    }
        if (XY == 'H' || XY == 'h') {
      for (int a = 0; a < 2; a++) {
        Harray[a] = (Serial.read() - 48);
        delay (10);
      }
    }
        if (XY == 'n' || XY == 'n') {
      for (int a = 0; a < 2; a++) {
        Narray[a] = (Serial.read() - 48);
        delay (10);
      }
    }
        if (XY == 'S' || XY == 's') {
      for (int a = 0; a < 2; a++) {
        Sarray[a] = (Serial.read() - 48);
        delay (10);
      }
    }
  }
  y = ( (Yarray[0] * 10) + Yarray[1]);
  m = ( (Marray[0] * 10) + Marray[1]);
  d = ( (Darray[0] * 10) + Darray[1]);
  h = ( (Harray[0] * 10) + Harray[1]);
  n = ( (Narray[0] * 10) + Narray[1]);
  s = ( (Sarray[0] * 10) + Sarray[1]);
  //Esta parte la he hecho para comprobar los valores que se graban
  Serial.print ("y=");
  Serial.print (y);
  Serial.print (" m=");
  Serial.println (m);
    Serial.print (" d=");
  Serial.println (d);
      Serial.print (" h=");
  Serial.println (h);
      Serial.print (" n=");
  Serial.println (n);
      Serial.print (" s=");
  Serial.println (s);
  Clock.setClockMode(true); 
  Clock.setYear((byte)y);
  Clock.setMonth((byte)m);
  Clock.setDate((byte)d);
  Clock.setHour((byte)h);
  Clock.setMinute((byte)n);
  Clock.setSecond((byte)s);
  delay (10);
}

de esta manera me muestra la fecha pero a momento de modificarla en la opcion b no me deja dado que Serial.available aun esta activo, como lo puedo pausar mientras corre ese void

Para hacer que espere por alguna entrada, has lo siguiente:

while (!Serial.available());

Lo malo es que el programa se bloqueará indefinidamente hasta algo llegue.