Erro básico Código Dsiplay

Boa tarde galera!

Preciso de uma pequena ajudinha com um programa bem simples que fiz. Porém é quase uma emergência.

Elaborei um descritivo do que tem que acontecer, e tbm um descritivo do que está tendo problemas, e logo abaixo estou postando o código para que possam ver meu erro.

O funcionamento é o seguinte:

*Elevador começa parado no chão.

Pino 8 – HIGH – Aciona Relé 01, por 12 segundos (Tempo que o elevador demora para subir)

*Elevador chegou em cima.

Pino 9 – HIGH – Desliga os relés por 2 segundos (Para não dar problema de acionar os dois relés juntos).

Pino 10 – HIGH – Aciona relé 02, por 7 segundos (Tempo que o elevador demora para descer)

*Elevador chegou no chão.

Pino 9 – HIGH – Desliga os relés por 2 segundos

---- TOTAL 1 CICLO-------

Pino 9 – HIGH – Desliga os relés por 4 minutos

Após os 4 minutos recomeça tudo novamente, isso por 5000 vezes.

*** Problemas que estão acontecendo:

  • Na troca de ciclo, entre subida e descida, um relé, fica levemente acionado, ainda passando corrente.

  • Cada troca de ciclo, o display apaga todos os dados, e reinicia novamente, porém com incremento de número de ciclos.

O que está sendo utilizado:

  • 01 módulo de relé 24 v – Controlado por 5vcc (específico para arduíno) ( Alimentação VCC e GND é por fonte externa)

  • 01 diplay LCD 16 x 2 – Alimentação de GND e VCC pelo arduíno

  • 01 arduíno UNO

-----------------------CÓDIGO-------------------------

//Programa: ENSAIO DINAMICO ELAVADOR
//Autor: MATHEUS TUZZIN

//Carrega a biblioteca LiquidCrystal
#include <LiquidCrystal.h>

//Define os pinos que serão utilizados para ligação ao display
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int SOBE;
int DESCE;
int Intervalo;
int i=0;

byte fase;

void setup()
{
lcd.begin(16, 2); //Define o número de colunas e linhas do LCD
lcd.clear(); // Limpa a tela do LCD

pinMode(8, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);

}

void loop()
{
SOBE= 12000;
DESCE= 7000;
Intervalo= 3000;
DESLSAIDA= 1000;

{
if(fase == 1) {
fase = 0;
}
else if(fase == 0) {
fase = 1;
}
}

if (fase == 1)
{
for (i=0; i<5000;i++)
{
digitalWrite(8,HIGH);//SOBE
digitalWrite(9,LOW);//INTERVALO
digitalWrite(10,LOW);//DESCE
delay(SOBE);

digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
delay(Intervalo);

digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,HIGH);
delay(DESCE);

digitalWrite(8,LOW);
digitalWrite(9,HIGH);
digitalWrite(10,LOW);
delay(Intervalo);

digitalWrite(8,LOW);
digitalWrite(9,LOW);
digitalWrite(10,LOW);
delay(240);

//Posiciona o cursor na coluna 0, linha 0;
lcd.setCursor(0, 0);
//Envia o texto entre aspas para o LCD
lcd.print(“ENSAIO DINAMICO”);
delay(5);
lcd.setCursor(0, 1);
//Envia o texto entre aspas para o LCD
lcd.print(“N. CICLOS:”);
delay(5);
lcd.setCursor (11,1);
lcd.print (i);
delay(5);

}

}
else if(fase == 0){
digitalWrite(10,HIGH);
digitalWrite(8,HIGH);
digitalWrite(9,HIGH);
delay(10000);
}
}