Arduino e modulo DS1307

Pessoal tudo bem!

Sou novo por aqui, , tambem estou comecar com o arduino faz pouco tempo unicamento tenho feito codigos basicos

Agora tenho um desafio maior pela frente e sozinho não esta nada facil e resolvi pedir ajuda!

Bem tenho que fazer uma pequena automatização para uma estufa de plantas onde tem que estar 30 dias e ter uma janela de ventilação aberta um certo tempo e outro fechada!

Ou seja o arduino começao a contar os 30 dias a partir de quando è ligado e mostrar no LCD20X4(para eu nao ter engano nos dias ), e a janela esta 4 Horas aberta e passados 4 Horas fecha e assim sucessivamnte os 30 dias. mas estes tempo sacados do DS1307

A janela vai fincionar com um Motor de caixa redutora 12V 1A e com dois Switchs um fim de abertura da janela e outro quando fim de janela fechada !

Gente como disse jà pesquisei tudo e nao encontrei nada que me ajuda-se , por isso serà que algem deste Forum me pode ajudar a realizar Estas funcoes para o arduino com o descrito em cima ?

Sinceramente neste momento nao sei por onde pegar !! ainda comecei a fazer a contagem dos dias mas aparece varios numeros seguidos no LCD

Toda a ajuda è bem vinda

O codigo que fiz ate Agora è o seguinte:

#include <Wire.h>//livraria para o manejo do protocolo i2c
#include <LiquidCrystal_I2C.h>
#include “DHT.h”
#include “RTClib.h” //l
#define DHTPIN 7 //
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27,20,4);// Display 20x4
RTC_DS1307 RTC;//

int puls1=8;
int puls2=4;
int puls3=6;
int modo=9;
int led =13;
char texto[10];
int horas=17,minutos=16,segundos=0,anos,mess,dias=0;
int inicio=0;
//char daysOfTheWeek[7][14] = {“Domingo”, “Segunda-feira”, “Terça-feira”, “Quarta-feira”, “Quinta-feira”, “Sexta-feira”, “Sabado”};
//a linha acima é um array com os dias da semana

String zero(int n){ //função que verifica se o numero é menor
//que dez, e se for adiciona o 0 antes
if(n < 10){ //Exemplo: entra 5, sai 05-> 00:05:00
return “0” + String(n); //como seria-> 00:5:00
}else{
return String(n);
}
}

void setup ()
{
// serie, wire, modulo RTC y LCD
//Serial.begin(9600);
Wire.begin();
dht.begin();
RTC.begin();

lcd.backlight();
lcd.init();
//RTC.adjust(DateTime(DATE, TIME));//ajusta o relogio por software
//RTC.adjust(DateTime(2014, 1, 21, 3, 0, 0));//Se Ajusta la hora por Software
pinMode(8,INPUT);//pin de aumento
pinMode(9,INPUT);//pin configuracao
pinMode(led, OUTPUT);
}
void loop ()
{
// mostrar_lcd();
DateTime now = RTC.now(); //
float h = dht.readHumidity();// lê a humidade
float temp = dht.readTemperature(); //lê a temperatura

mostrar_lcd();
delay(50);
lcd.setCursor(0,0); //
lcd.print(“Temp.: “); // Prints string “Temp.” on the LCD
lcd.print(temp); // Prints the temperature value from the sensor
lcd.print(” C”);
lcd.setCursor(0,1);
lcd.print(“Humi.: “);
lcd.print(h);
lcd.print(” %”);

///////////////// Ajustar a Hora
int hora=now.hour();
int minuto=now.minute();
int segundo=now.second();
int ano=now.year();
int mes=now.month();
int dia=now.day();

//Comecei afazer a contagem dos dias mas aparece Numeros estranhos

if (hora==horas && minuto==minutos && segundo==segundos && inicio>0 )
{
inicio=inicio+1;
lcd.setCursor(17,0);
lcd.print(inicio);

delay(500);
}

void mostrar_lcd()
{
DateTime now = RTC.now(); //se accede a los datos del RTC

// Se imprime en el primer renglon posicion 0,0
lcd.setCursor(0,2);
//Se Imprime el data
lcd.print("date.: ");
lcd.print(zero(now.day()) + “/” + zero(now.month()) + “/” + now.year());
//Se Imprime el horario
lcd.setCursor(0,3);
lcd.print("time.: ");
lcd.print(zero(now.hour())+ “:” + zero(now.minute())+ “:” + zero(now.second()));

delay(50);
}

Eu vejo um pequeno erro... a variável inicio é inicializada a zero e só é alterada para algo superior a zero se o valor dela for maior que zero. Logo essa variável nunca é alterada e como tal aquele if bastante complexo nunca será corrido.

    if (hora==horas && minuto==minutos && segundo==segundos && inicio>0 )

Outro problema que eu vejo é que tu não fazes nenhuma instrução println quando escreves para o LCD, dessa forma, tudo o que escreves para o LCD aparece seguido tal como dizes.

Para fazeres a automatização da abertura e fecho, podes fazer de duas formas... Ou gravas a que hora (do RTC) é que o Arduino começou e abres logo a janela e contas 4 horas e daí em diante ou, o que eu acho ser mais simples, é teres horas certas de abertura e fecho da janela. meia noite às 4 aberta, 4 às 8 fechada, e assim sucessivamente. Desta maneira não tens de ir mantendo uma contagem das horas passadas e, caso falhe alimentação ao Arduino, não tens de acertar as horas que esteve aberto ou fechado. Basta ligar e deixar andar e chegando à hora certa ele abre ou fecha a janela.

Obrigado pelo suporte bubulindo!

Tudo que disseste è realmente o meu raciocinio , mas infelizmente não estou ao nivel de por em pratica a logica de progamação !

Por essa razão eu estou aqui a pedir ajuda! se aqui me mostrar ou fizer o basico eu depois tento denvolver mais o projeto,mas para isso preciso de uma base !

Antes de passar po aqui já estou a semanas a pesquisar a ver se descobro essas bases para eu poder desenvolver o que pertendo tal como o codigo aqui mostrado porque encontrei bastante informação !

Eu sei que o Pessoal pensa que quero as coisas de bandeija , mas não è assim infelimento sou novo neste mundo e cada obstaculo é um serio problema a resolver!

Espero vossa compreenção