Programação TCC

bubulindo:
Já viste isto:

Arduino Playground - HomePage
?

Nos exemplos creio que mostra como usar o millis para o que pretendes.

Em todo o caso, se não quiseres usar a biblioteca (que não é muito bom para trabalhos de escola). O que deves fazer é o contrário do que estavas a fazer.

unsigned char tempo_pre_definido = 23; //portanto a saída vais estar high durante 23 horas. 

unsigned long tempo = tempo_pre_definido * 60 60; //isto dá-te o numero de segundos.
tempo = tempo
1000; //tempo para comparacão com millis Neste caso deve ser algo como 82800000, verifica.
unsigned long tempo_agora = 0;

If (botao_pressionado == TRUE) { //inicia accão.
  tempo_agora = millis();
  digitalWrite(saida, HIGH);
}

if (millis() - tempo_agora >= tempo) { //passaram-se as 23 horas
  digitalWrite(saida, LOW);
}




Não inclui os cálculos para minutos e segundos para a variável tempo, mas acho que consegues chegar lá sozinho. 
A diferenca é que as horas apenas são usadas no interface com o utilizador e o resto do programa trabalha em milisegundos. A maneira que estavas a fazer complica mais pois estás sempre a usar horas e minutos para contar o tempo. 

Vais ter de incluir um relógio a contar o tempo em horas para apresentar? 

Nota também que o millis não é ideal para usar como um relógio. Seria bem melhor usar um RTC, ou um cristal de 32kHz com um chip separado.

A minha intenção era justamente essa usar as horas apenas na interface com o utilizador. Respondendo a sua pergunta, tenho que mostrar o tempo restante para disparar a ação(high no port de saída) em um lcd que vai estar no interface, quando este tempo chegar a 0, o tempo deve voltar ao estado inicial pré determinado.

Quanto ao RTC, no primeiro momento a intenção era de usa-lo porém o professor nos pediu para usarmos apenas código.

Neste momento não estou em casa, não vou poder colocar suas dicas em prática, amanhã quando estiver em casa mando um feedback para você sobre as minhas tentativas.

Abraços