Help projeto timer RTC com rele

Boa tarde gente

Sou novo aqui e gostaria de uma ajuda se fosse possivel.

Eu gravo time-lapse passagem de tempo. pra fazer aqueles filmes repidinhos.

estou fazendo um projeto para ligar minha camera de filmar em horarios especificos.

sao 20 horarios 10 minutos por vez.

problemas:

nao funcionam todos os horarios só os 3 primeiros.

ele nao começa no meio do caminho.

exemplo: o primeiro horario e as 6 da manha se eu ligar o arduino as 15 horas so começa a funcionar 6 horas do outro dia e somente os 3 primeiros alarmes funcionam.

A compilaçao nao da erro os reles ligam e desligam corretamente os leds ligam ligam e desligam correto tambem.

Se alguem puder ajudar eu agradeço.

projeto.txt (14.1 KB)

O que é que isto:

// Horario RTC para iniciar ativação porta
setTime(sHour1, sMinute1, sSecond1, current.day(), current.month(), current.year());
setTime(sHour2, sMinute2, sSecond2, current.day(), current.month(), current.year());
setTime(sHour3, sMinute3, sSecond3, current.day(), current.month(), current.year());
setTime(sHour4, sMinute4, sSecond4, current.day(), current.month(), current.year());
setTime(sHour5, sMinute5, sSecond5, current.day(), current.month(), current.year());
setTime(sHour6, sMinute6, sSecond6, current.day(), current.month(), current.year());
setTime(sHour7, sMinute7, sSecond7, current.day(), current.month(), current.year());
setTime(sHour8, sMinute8, sSecond8, current.day(), current.month(), current.year());
setTime(sHour9, sMinute9, sSecond9, current.day(), current.month(), current.year());
setTime(sHour10, sMinute10, sSecond10, current.day(), current.month(), current.year());
setTime(sHour11, sMinute11, sSecond11, current.day(), current.month(), current.year());
setTime(sHour12, sMinute12, sSecond12, current.day(), current.month(), current.year());
setTime(sHour13, sMinute13, sSecond13, current.day(), current.month(), current.year());
setTime(sHour14, sMinute14, sSecond14, current.day(), current.month(), current.year());
setTime(sHour15, sMinute15, sSecond15, current.day(), current.month(), current.year());
setTime(sHour16, sMinute16, sSecond16, current.day(), current.month(), current.year());
setTime(sHour17, sMinute17, sSecond17, current.day(), current.month(), current.year());
setTime(sHour18, sMinute18, sSecond18, current.day(), current.month(), current.year());
setTime(sHour19, sMinute19, sSecond19, current.day(), current.month(), current.year());
setTime(sHour20, sMinute20, sSecond20, current.day(), current.month(), current.year());
time_t s = now();


// Horario RTC para terminar ativação porta
setTime(eHour1, eMinute1, eSecond1, current.day(), current.month(), current.year());
setTime(eHour2, eMinute2, eSecond2, current.day(), current.month(), current.year());
setTime(eHour3, eMinute3, eSecond3, current.day(), current.month(), current.year());
setTime(eHour4, eMinute4, eSecond4, current.day(), current.month(), current.year());
setTime(eHour5, eMinute5, eSecond5, current.day(), current.month(), current.year());
setTime(eHour6, eMinute6, eSecond6, current.day(), current.month(), current.year());
setTime(eHour7, eMinute7, eSecond7, current.day(), current.month(), current.year());
setTime(eHour8, eMinute8, eSecond8, current.day(), current.month(), current.year());
setTime(eHour9, eMinute9, eSecond9, current.day(), current.month(), current.year());
setTime(eHour10, eMinute10, eSecond10, current.day(), current.month(), current.year());
setTime(eHour11, eMinute11, eSecond11, current.day(), current.month(), current.year());
setTime(eHour12, eMinute12, eSecond12, current.day(), current.month(), current.year());
setTime(eHour13, eMinute13, eSecond13, current.day(), current.month(), current.year());
setTime(eHour14, eMinute14, eSecond14, current.day(), current.month(), current.year());
setTime(eHour15, eMinute15, eSecond15, current.day(), current.month(), current.year());
setTime(eHour16, eMinute16, eSecond16, current.day(), current.month(), current.year());
setTime(eHour17, eMinute17, eSecond17, current.day(), current.month(), current.year());
setTime(eHour18, eMinute18, eSecond18, current.day(), current.month(), current.year());
setTime(eHour19, eMinute19, eSecond19, current.day(), current.month(), current.year());
setTime(eHour20, eMinute20, eSecond20, current.day(), current.month(), current.year());

Faz???

Aqui estás a mudar o tempo do sistema para a hora que pretendes iniciar os alarmes... é normal que não funcione, não achas?

O que é que pretendes com isto??

Alarm.delay(60000);

Tens imensos bytes desperdiçados com as definições dos segundos... podes ganhar80 bytes de memória se trocares as variáveis eSecond e sSecond por 0.

Quando dizes que não funciona, que mais é que vez no Serial Port?

No final da função de setup coloca algo como:

Serial.println("Setup finished");

Isto dir-te-á se estás a ficar sem memória para correr o programa.

O que pretendes atingir com isto?

// Sintax de ação da porta por comparação de estados baseados nos horarios (s=hora definida / n=hora atual / e=hora final)
if (s <= n && n <= e) { 
digitalWrite(lightRelay, HIGH); // liga //ainda nao usado
digitalWrite(lightRelay1, HIGH); // liga //ainda nao usado
digitalWrite(Relay1, LOW); // liga
digitalWrite(Relay2, LOW); // liga
digitalWrite(Relay3, LOW); // liga

A mim parece-me que pode dar asneira, não??

No final, em vez de usares bibliotecas que pareces não ter o domínio completo, ser-te-ia mais fácil fazeres essa lógica de liga/desliga com ciclos e ifs... provavelmente com metade do numero de linhas total que tens agora:

Seria algo como:

Lê tempo actual;

Se hora está entre 6 e 22 e minuto == 0 e a luz apagada Então
liga luz.
Se hora está entre 6 e 22 e minuto == 10 e a luz esta acesa Então
Apaga luz.

Repetias isto para as horas mais esquisitas e pronto.

Estou farto de dar voltas à cabeça e não consigo entender para que servem as linhas com o setTime:

 // Horario RTC para iniciar ativação porta

  setTime(sHour1, sMinute1, sSecond1, current.day(), current.month(), current.year());

  setTime(sHour2, sMinute2, sSecond2, current.day(), current.month(), current.year());

  setTime(sHour3, sMinute3, sSecond3, current.day(), current.month(), current.year());

  setTime(sHour4, sMinute4, sSecond4, current.day(), current.month(), current.year());

  setTime(sHour5, sMinute5, sSecond5, current.day(), current.month(), current.year());

  setTime(sHour6, sMinute6, sSecond6, current.day(), current.month(), current.year());

  setTime(sHour7, sMinute7, sSecond7, current.day(), current.month(), current.year());

  setTime(sHour8, sMinute8, sSecond8, current.day(), current.month(), current.year());

  setTime(sHour9, sMinute9, sSecond9, current.day(), current.month(), current.year());

  setTime(sHour10, sMinute10, sSecond10, current.day(), current.month(), current.year());

  setTime(sHour11, sMinute11, sSecond11, current.day(), current.month(), current.year());

  setTime(sHour12, sMinute12, sSecond12, current.day(), current.month(), current.year());

  setTime(sHour13, sMinute13, sSecond13, current.day(), current.month(), current.year());

  setTime(sHour14, sMinute14, sSecond14, current.day(), current.month(), current.year());

  setTime(sHour15, sMinute15, sSecond15, current.day(), current.month(), current.year());

  setTime(sHour16, sMinute16, sSecond16, current.day(), current.month(), current.year());

  setTime(sHour17, sMinute17, sSecond17, current.day(), current.month(), current.year());

  setTime(sHour18, sMinute18, sSecond18, current.day(), current.month(), current.year());

  setTime(sHour19, sMinute19, sSecond19, current.day(), current.month(), current.year());

  setTime(sHour20, sMinute20, sSecond20, current.day(), current.month(), current.year());

  time_t s = now();





  // Horario RTC para terminar ativação porta

  setTime(eHour1, eMinute1, eSecond1, current.day(), current.month(), current.year());

  setTime(eHour2, eMinute2, eSecond2, current.day(), current.month(), current.year());

  setTime(eHour3, eMinute3, eSecond3, current.day(), current.month(), current.year());

  setTime(eHour4, eMinute4, eSecond4, current.day(), current.month(), current.year());

  setTime(eHour5, eMinute5, eSecond5, current.day(), current.month(), current.year());

  setTime(eHour6, eMinute6, eSecond6, current.day(), current.month(), current.year());

  setTime(eHour7, eMinute7, eSecond7, current.day(), current.month(), current.year());

  setTime(eHour8, eMinute8, eSecond8, current.day(), current.month(), current.year());

  setTime(eHour9, eMinute9, eSecond9, current.day(), current.month(), current.year());

  setTime(eHour10, eMinute10, eSecond10, current.day(), current.month(), current.year());

  setTime(eHour11, eMinute11, eSecond11, current.day(), current.month(), current.year());

  setTime(eHour12, eMinute12, eSecond12, current.day(), current.month(), current.year());

  setTime(eHour13, eMinute13, eSecond13, current.day(), current.month(), current.year());

  setTime(eHour14, eMinute14, eSecond14, current.day(), current.month(), current.year());

  setTime(eHour15, eMinute15, eSecond15, current.day(), current.month(), current.year());

  setTime(eHour16, eMinute16, eSecond16, current.day(), current.month(), current.year());

  setTime(eHour17, eMinute17, eSecond17, current.day(), current.month(), current.year());

  setTime(eHour18, eMinute18, eSecond18, current.day(), current.month(), current.year());

  setTime(eHour19, eMinute19, eSecond19, current.day(), current.month(), current.year());

  setTime(eHour20, eMinute20, eSecond20, current.day(), current.month(), current.year());

  time_t e = now(); 



  // Usar RTC para exibir hora atual

  setTime(current.hour(), current.minute(), current.second(), current.day(), current.month(), current.year()); 

  time_t n = now();

@bubulindo: tivemos a mesma ideia praticamente à mesma hora.

Nunca usei, mas existem algumas libs que simulam o crontab (do linux), pode te servir:

Você agenda as tarefas de forma simples:

// create timed command objects for each timed command
//                     s.m.h.d.M.y,comand,parameters for command
TimedCommand command1("0.*.*.*.*.*",&sonCommand,"13");
TimedCommand command2("5.*.*.*.*.*",&sOffCommand,"13");

Conseguiu?