Dúvida no programa

Bom Dia Pessoal!

Estou com 2 dúvidas a respeito de um programa que estou desenvolvendo, pesquisei em diversos lugares e não achei a solução, creio que seja algo simples.

Descrição do funcionamento do programa:

É uma especie de elevador, o funcionamento é:

Subir: 4 segundos (led verde)

Aguardar: 2 segundos (em cima)

Descer: 3 segundos (led vermelho)

Aguardar: 1 segundo (em baixo) (led amarelo)

REPETIR O LAÇO (5000 vezes)

Adicionei um display de 16 x 2 para exibir o numero de vezes que o "elevador" subiu.

1º Problema:

O LCD, no campo em que aparece a contagem de ciclos, (segunda linha do display), toda vez que o programa roda 1 vez, ele apaga toda a linha para exibir o numero de ciclos, (ele conta e exibe certo, porem apagar cada vez que o laço repete uma vez).

2º Problema:

Necessito inserir um botão (Push BUtton sem retenção) de Start do programa e um botão de Stop do programa, porém já tentei com comando While e comando For e não tive sucesso.

Segue programa abaixo:

//Programa: Teste de Display LCD 16 x 2
//Autor: FILIPEFLOP

//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);

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

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

}

void loop()
{

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

SOBE= 4000;
DESCE= 3000;
Intervalo= 2000;

for (i=0; i<5000;i++){

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

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

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

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

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

//Limpa a tela
lcd.clear();
//Posiciona o cursor na coluna 3, linha 0;
lcd.setCursor(0, 0);
//Envia o texto entre aspas para o LCD
lcd.print("ENSAIO DINAMICO");
delay(5000);
lcd.setCursor(0, 2);
lcd.print("N. CICLOS:");
delay(5000);
lcd.setCursor (11,2);
lcd.print (i);
delay(5000);
}

}

1º problema:
O programa está a fazer o que pedes para fazer... se não tivesses uma instrução para bloquear o programa ao escrever a segunda linha, não aconteceria o problema 1.

2º problema:
Antes de tentares meter um botão tens de resolver o problema das temporizações sem a função delay(). Os laços while e for não são a solução para este problema, a utilização da função delay é que é.
Vê o exemplo blink without delay ou um conceito chamado máquina de estados.

outros problemas:
a tua indentação está errada... isso torna as coisa difíceis de ver.