Problema Codigo Temporizador e Termostato

Ola,
Estou com um problema em um codigo de temporizador, na verdade o codigo do temporizador esta certinho. sozinho. quando tento juntar um outro codigo de termostato que esta o problema, o tempo fica todo louco botoes param de funcionar etc. dessa maneira que esta o codigo agora tudo esta funcionando, mas o problema é que o tempo ficou fora de sincronia e os botoes só funcionam depois de segurar por uns 2 segundos e soltar, se so apertar e soltar nao funciona, alguem poderia me dar uma luz ai,

Segue o Codigo

//Programa: Arduino e DS18B20 controle de rele por temperatura e timer
//Autor: Junior Oliveira

#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>

int posicao = 0;
int temp_min = 24; // TEMPERATURA MINIMA PARA DESLIGAR
int temp_max = 28; // TEMPERATURA MAXIMA PARA LIGAR
int ahoras = 0;            //VARIAVEL PARA MOSTRAR HORAS NO LCD
int aminutos = 0;          //VARIAVEL PARA MOSTRAR MINUTOS NO LCD
int asegundos = 0;         //VARIAVEL PARA MOSTRAR SEGUNDOS NO LCD
int segundostotal = 0;     //Tempo total
int msg = 0;               //BARREIRA PARA MENSAGEM DE BEM VINDO
int empieza = 1024;        // VARIAVEL PARA BOTAO DE START FUNCIONAR
int varbuth = 0;           //VARIAVEL PARA MUDAR VALOR DE HORAS
int varbutm = 0;           //VARIAVEL PARA MUDAR VALOR DE MINUTOS
int varbuts = 0;           //VARIAVEL PARA MUDAR VALOR DE SEGUNDOS

// CONFIGURACOES DE PINOS PARA O CIRCUITO

int rele_timer = 13;           // PINO DIGITAL PARA RELE TIMER
int rele_temp = 12; // PINO DIGITAL RELE TEMPERATURA
int start = A2;            //PINO ANALOGICO PARA BOTAO DE START
int buth = A0;             //PINO ANALOGICO BOTAO HORAS
int butm = A1;             //PINO ANALOGICO BOTAO MINUTOS
int buts = A3;             //PINO ANALOGICO BOTAO SEGUNDOS
#define ONE_WIRE_BUS 10  // PINO DIGITAL SENSOR DE TEMPERATURA
#define pino_aumenta 2 // BOTAO AUMENTA TEMPERATURA MAXIMA
#define pino_diminui 3 // DIMINUI TEMPERATURA MAXIMA

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

LiquidCrystal lcd(9, 8, 7, 6, 5, 4);

int temperatura;
int aumenta, diminui;

unsigned long previousMillis = 0;
//Intervalo de medicao temperatura
const long interval = 2000;

void setup(void)
{
  lcd.begin(16, 2);
  Serial.begin(9600);
  pinMode(rele_temp, OUTPUT);
  pinMode(rele_timer, OUTPUT);
  pinMode(pino_aumenta, INPUT);
  pinMode(pino_diminui, INPUT);
  digitalWrite(rele_timer, HIGH);
  digitalWrite(rele_temp, LOW);
  msg = 0;                  //BARREIRA MENSAGEM BEM VINDO
  empieza = 1024;           //BARREIRA START

  varbuth = 1;              //BARREIRA DE HORAS
  varbutm = 1;              //BARREIRA DE MINUTOS
  varbuts = 1;              //BARREIRA DE SEGUNDOS
  sensors.begin();
}

void loop(void)
{
  do
  {
    sensors.requestTemperatures(); // REQUISITA TEMPERATURA DOS SENSORES

    varbuth = analogRead(buth);   //LEITURA BOTAO HORAS
    varbutm = analogRead(butm);   //LEITURA BOTAO MINUTOS
    varbuts = analogRead(buts);   //LEITURA BOTAO SEGUNDOS

    if (varbuth == 0)             //SE PRESSIONAR O BOTAO AUMENTA UMA HORA
    {
      ahoras = ahoras + 1 ;
      delay(250);
    }

    if (varbutm == 0)           //SE PRESSIONAR O BOTAO AUMENTA UM MINUTO
    {
      aminutos = aminutos + 1;
      delay(250);
    }

    if (varbuts == 0)           //SE PRESSIONAR O BOTAO AUMENTA UM SEGUNDO
    {
      asegundos = asegundos + 1;
      delay(250);
    }
    lcd.setCursor(1, 1);

    if (ahoras < 10) lcd.print("0");    // SE AS HORAS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
    lcd.print(ahoras);                 // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S  (1:M:S)
    lcd.print(":");

    if (aminutos < 10) lcd.print("0");  // SE OS MINUTOS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
    lcd.print(aminutos);               // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S  (H:1:S)

    lcd.print(":");
    if (asegundos < 10) lcd.print("0"); // SE OS SEGUNDOS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
    lcd.print(asegundos);              // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S  (H:M:1)

    empieza = analogRead(start);   //LEITURA DO BOTAO DE START

    if (empieza == 0)              //Si el boton de arranque, fue pulsado...
    {
      segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60);  // CONVERTE TEMPO TOTAL EM SEGUNDOS
    }
  
    //botao aumenta temperatura
    aumenta = digitalRead(pino_aumenta);
    if (aumenta == 0)
    {
      temp_max++;
    }
    while (digitalRead(pino_aumenta) == 0)
    {
      delay(10);
    }

    //botao diminui temperatura
    diminui = digitalRead(pino_diminui);
    if (diminui == 0)
    {
      temp_max--;
    }
    while (digitalRead(pino_diminui) == 0)
    {
      delay(10);
    }
    lcd.setCursor(0, 0);
    lcd.print(temperatura);
    lcd.setCursor(2, 0);
    lcd.print("C");
    lcd.setCursor(4, 0);
    lcd.print("MIN");
    lcd.setCursor(8, 0);
    lcd.print(temp_max);
    lcd.setCursor(10, 0);
    lcd.print("C");
    if (temp_min >= temperatura)
{
   digitalWrite(rele_temp, LOW);
}
else if (temp_max <= temperatura)
{
   digitalWrite(rele_temp, HIGH);
}
    unsigned long currentMillis = millis();
    //Timer para ler o valor da temperatura
    if (currentMillis - previousMillis >= interval)
    {
      temperatura = sensors.getTempCByIndex(0);
      previousMillis = currentMillis;
    }
  } while (empieza != 0); // VOLTA AO MENU DE AJUSTE PARA APENAS APERTAR O BOTAO START
  while (segundostotal > 0)
  {
    sensors.requestTemperatures(); // REQUISITA TEMPERATURA DOS SENSORES
    delay (235);          //DESCONTADO 1 SEGUNDO DO TIMER
    segundostotal--;

    ahoras = ((segundostotal / 60) / 60);  //CONVERTE OS SEGUNDOS TOTAIS EM HORAS
    aminutos = (segundostotal / 60) % 60;  //CONVERTE OS SEGUNDOS TOTAIS EM MINUTOS
    asegundos = segundostotal % 60;        //CONVERTE OS SEGUNDOS TOTAIS EM SEGUNDOS

    lcd.setCursor(1, 1);
    if (ahoras < 10) lcd.print("0");     // SE AS HORAS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
    lcd.print(ahoras);                   // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S  (1:M:S)
    lcd.print(":");

    if (aminutos < 10) lcd.print("0");   // SE OS MINUTOS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
    lcd.print(aminutos);                 // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S  (H:1:S)

    lcd.print(":");
    if (asegundos < 10) lcd.print("0");  // SE OS SEGUNDOS FOREM MENOR QUE "10" É COLOCADO UM "0" NA FRENTE
    lcd.print(asegundos);                // SEM ESSE CODIGO SE MOSTARIA ASSIM: H:M:S  (H:M:1)

    if (segundostotal == 0)            //FINALIZA O TEMPO DO TIMER
    {
      while (1)                       //FINALIZA O TEMPO E DESARMA O RELE
      {
        digitalWrite(rele_timer, LOW);
        delay(200);
        lcd.clear();
        lcd.setCursor(1, 0);
        lcd.print("TEMPO ESGOTADO");
        lcd.setCursor(5, 1);
        lcd.print("By: Jr");
      }
    }
    //botao aumenta temperatura
    aumenta = digitalRead(pino_aumenta);
    if (aumenta == 0)
    {
      temp_max++;
    }
    while (digitalRead(pino_aumenta) == 0)
    {
      delay(10);
    }

    //botao diminui temperatura
    diminui = digitalRead(pino_diminui);
    if (diminui == 0)
    {
      temp_max--;
    }
    while (digitalRead(pino_diminui) == 0)
    {
      delay(10);
    }
    lcd.setCursor(0, 0);
    lcd.print(temperatura);
    lcd.setCursor(2, 0);
    lcd.print("C");
    lcd.setCursor(4, 0);
    lcd.print("MIN");
    lcd.setCursor(8, 0);
    lcd.print(temp_max);
    lcd.setCursor(10, 0);
    lcd.print("C");
    if (temp_min >= temperatura)
{
   digitalWrite(rele_temp, LOW);
}
else if (temp_max <= temperatura)
{
   digitalWrite(rele_temp, HIGH);
}
    unsigned long currentMillis = millis();
    //Timer para ler o valor da temperatura
    if (currentMillis - previousMillis >= interval)
    {
      temperatura = sensors.getTempCByIndex(0);
      previousMillis = currentMillis;
    }
  }
}