TEMPORIZADOR + 2 POTENCIOMETROS (MIN:SEG) + LCD ERROR CON EL CONTADOR

HOLA A TODOS UN SALUDOS,

He posteando este código , para entenderlo y adaptarlo según la necesidad que se tenga pero casi siempre hay que modificar y agregar lineas para que haga la función que uno quiere. En este caso , he intentado agregar y/o modificar varias lineas para poder hacer este temporizador de mayor tamaño de tiempo en formato (MIN : SEG) (59:59) donde ingreso los datos con 2 potenciometro para individualizar al ingresar el tiempo min , seg , tengo un detalle con el contador regresivo es cuando comienza la cuenta atras al cabo de pasar unos segundo no sigue su curso , si no que salta o comienza a contar donde empieza y no hace conteo normal . he intentado de todas formas por ensayo error… pero nada

adjunto el codigo completo para que me puedan orientar

#define   ST_MIN    A0
#define   ST_SEG    A1
#define   START     A2
#define   STOP      A3
#define   LED_SET   A4

#define   LED_PRO   5
#define   BUZZER    6

#define   LCD_RS    7
#define   LCD_EN    8
#define   LCD_D4    9
#define   LCD_D5    10
#define   LCD_D6    11
#define   LCD_D7    12

#define   SSR       13

unsigned int tiempo, tiempo2 = 0;
unsigned long PREV_MILLIS = 0;
const int FALSE = 0;
const int TRUE = 1;
short FLAG_STOP = 0;
char buffer[16];

#include <LiquidCrystal.h>
LiquidCrystal lcd(LCD_RS, LCD_EN, LCD_D4, LCD_D5, LCD_D6, LCD_D7);


void setup()
{
  pinMode(START, INPUT_PULLUP); // Habilita Pullup Interna
  pinMode(STOP, INPUT_PULLUP);  // Habilita Pullup Interna
  pinMode(BUZZER, OUTPUT);
  pinMode(LED_PRO, OUTPUT);
  pinMode(LED_SET, OUTPUT);
  pinMode(SSR, OUTPUT);
  lcd.begin(16, 2);
  mensaje_bienvenida();
  lcd.clear();

  while (digitalRead(START) || tiempo2 == 0 && tiempo == 0)
  {
    tiempo2 = analogRead(ST_MIN) * 0.850; // 14 MIN
    display_minuto();
    tiempo = analogRead(ST_SEG) * 0.0580; // 59 SEG
    display_segundo();

  }

  digitalWrite(LED_PRO, HIGH);  //  INDICADOR
  pinMode(LED_SET, HIGH);
  digitalWrite(SSR, HIGH);
}

//////////////////////////////////////////////////////////////////

void loop()
{
  while (FLAG_STOP == FALSE)
  {

    unsigned long CURRENT_MILLIS = millis();
    display_minuto();
    display_segundo();

    if (CURRENT_MILLIS - PREV_MILLIS >= 1000)
    {
      tiempo2--;
      tiempo--;

      PREV_MILLIS = CURRENT_MILLIS;

    }

    if (!digitalRead(STOP) || (tiempo2 == 0 && tiempo == 0))
    {
      FLAG_STOP = TRUE;
    }
  }

  //////////////////////////////////////////////////////////////////
  while (FLAG_STOP)
  {
    final_proceso();
    lcd.clear();

    while (digitalRead(START) || tiempo2  == 0 && tiempo == 0 )
    {
      tiempo2 = analogRead(ST_MIN) * 0.850; //
      display_minuto();
      tiempo = analogRead(ST_SEG) * 0.0580; //
      display_segundo();

    }

    digitalWrite(LED_PRO, HIGH);  // ACTIVA INDICADOR MODO PROCESO
    digitalWrite(SSR, HIGH);
    pinMode(LED_SET, HIGH);
    FLAG_STOP = FALSE;
  }
}

//////////////////////////////////////////////////////////////////

void mensaje_bienvenida()
{
  lcd.clear();
  lcd.print("  TEMPORIZADOR");
  lcd.setCursor(0, 1);
  lcd.print("   AUTOMATICO");
  delay(1000);

  lcd.clear();
  lcd.print("INICIALIZANDO");
  delay(200);
  lcd.print(".");
  delay(200);
  lcd.print(".");
  delay(200);
  lcd.print(".");
  delay(100);
}

//////////////////////////////////////////////////////////////////


void display_minuto()
{
  unsigned int  minuto;
  minuto = tiempo2 / 60;
  lcd.setCursor(1, 0);
  sprintf(buffer, "TEMPORIZACION");
  lcd.print(buffer);
  lcd.setCursor(5, 1);
  sprintf(buffer, "%0.2u", minuto);
  lcd.print(buffer);
}

void display_segundo()
{
  unsigned int segundo;
  segundo = tiempo  % 60;
  lcd.setCursor(7, 1);
  sprintf(buffer, "");
  lcd.print(buffer);
  sprintf(buffer, ":%0.2u", segundo);
  lcd.print(buffer);
}

void final_proceso()
{
  lcd.clear();
  lcd.print("    PROCESO ");
  lcd.setCursor(0, 1);
  lcd.print("   FINALIZADO ");
  digitalWrite(LED_PRO, LOW);
  digitalWrite(LED_SET, LOW);
  digitalWrite(SSR, LOW);
  digitalWrite(BUZZER, HIGH);
  delay(1000);
  digitalWrite(BUZZER, LOW);
  delay(1000);

}