Caros

 Estou montando um projeto de automação do meu aquário, onde preciso que a luz acenda as 08:00 e apague as 20:00 e para isso uso um RTC 3231(ZS-042).

 Tentei alguns comandos para fazer isso como por exemplo:

if(t.hour() > 15 && t.hour() <16) {
digitalWrite(8, HIGH);}

 Mas não passa nem pela compilação.

 Segue a baixo o código completo.

#include <IRremote.h>
#include <Wire.h>
#include <DS3231.h>
#include <LiquidCrystal_I2C.h>
#define BUFF_MAX 128
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

#define I2C_ADDR 0x27 // Define I2C Address for the PCF8574T

#define Rs_pin 0
#define Rw_pin 1
#define En_pin 2
#define BACKLIGHT_PIN 3
#define D4_pin 4
#define D5_pin 5
#define D6_pin 6
#define D7_pin 7

#define LED_OFF 0
#define LED_ON 1

LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

uint8_t time[8];
char recv[BUFF_MAX];
unsigned int recv_size = 0;
unsigned long prev, interval = 1000;

int RECV_PIN = 6; /
IRrecv irrecv(RECV_PIN);
decode_results results;

byte setabfull[8] = {
B11111,
B00100,
B00100,
B00100,
B00100,
B11111,
B01110,
B00100
};

byte setafull[8] = {
B00100,
B01110,
B11111,
B00100,
B00100,
B00100,
B00100,
B11111
};

byte on[8] = {
B00000,
B10010,
B01100,
B01100,
B01100,
B10010,
B00000,
B00000
};

boolean ligado11=false;

void setup()
{
Serial.begin(9600);
Wire.begin();
irrecv.enableIRIn();
sensors.begin();

memset(recv, 0, BUFF_MAX);

pinMode(8,OUTPUT);// LED
pinMode(9,OUTPUT);// Lampada fluorescente
pinMode(10,OUTPUT);//Bomba de ar
pinMode(11,OUTPUT);//Ventiladores

lcd.begin (16,2); // initialize the lcd
// Switch on the backlight
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(LED_ON);

lcd.createChar(2, setabfull);
lcd.createChar(1, setafull);
lcd.createChar(3, on);

//
//setTheTime("300812123040717"); // ssmmhhWDDMMYYYY set time once in the given format
//

}

void loop()
{

if(t.hour() > 15 && t.hour() <16) {
digitalWrite(8, HIGH);
}

if (irrecv.decode(&results)) {
Serial.println(results.value, DEC);
irrecv.resume();
}

if(results.value==3778927144){
digitalWrite(9, HIGH);
lcd.setCursor(3,1);
lcd.write(3);
}
else if(results.value==4120482440){
digitalWrite(9, LOW);
lcd.setCursor(3,1);
lcd.print(" ");

}

if(results.value==2908251746){
digitalWrite(10, HIGH);
lcd.setCursor(5,1);
lcd.write(3);
}
else if(results.value==1931099650){
digitalWrite(10, LOW);
lcd.setCursor(5,1);
lcd.print(" ");
}

if(sensors.getTempCByIndex(0) > 31 && ligado11==false) {
digitalWrite(11, HIGH);
lcd.setCursor(7,1);
lcd.write(3);
ligado11=true;
}
else if(sensors.getTempCByIndex(0) < 30.99 && ligado11==true) {
digitalWrite(11, LOW);
lcd.setCursor(7,1);
lcd.print(" ");
ligado11=false;
}

char tempF[6];
float temperature;
char buff[BUFF_MAX];
unsigned long now = millis();
struct ts t;
// show time once in a while
if (now - prev > interval){
DS3231_get(&t); //Get time
temperature = DS3231_get_treg();
dtostrf(temperature, 5, 2, tempF);

lcd.setCursor(0,0);
lcd.print(t.hour);
lcd.print(":");
if(t.min<10)
{
lcd.print("0");
}
lcd.print(t.min);
lcd.print(":");
if(t.sec<10)
{
lcd.print("0");
}
lcd.print(t.sec);

lcd.setCursor(10,0);
lcd.print(tempF);
lcd.print((char)223);
prev = now;
lcd.setCursor(9, 0);
lcd.write(1);

lcd.setCursor(10,1);
sensors.requestTemperatures();
lcd.print(sensors.getTempCByIndex(0));
lcd.print((char)223);

lcd.setCursor(9, 1);
lcd.write(2);

lcd.setCursor(0,1);
lcd.print ("L");
lcd.setCursor(2,1);
lcd.print("F");
lcd.setCursor(4,1);
lcd.print("O");
lcd.setCursor(6,1);
lcd.print("V");

}

}

void setTheTime(char *cmd)
{
struct ts t;

// ssmmhhWDDMMYYYY set time

t.sec = inp2toi(cmd, 0);
t.min = inp2toi(cmd, 2);
t.hour = inp2toi(cmd, 4);
t.wday = inp2toi(cmd, 6);
t.mday = inp2toi(cmd, 7);
t.mon = inp2toi(cmd, 9);
t.year = inp2toi(cmd, 11) * 100 + inp2toi(cmd, 13);
DS3231_set(t);

}

void printMonth(int month)
{
switch(month)
{
case 1: lcd.print(" January ");break;
case 2: lcd.print(" February ");break;
case 3: lcd.print(" March ");break;
case 4: lcd.print(" April ");break;
case 5: lcd.print(" May ");break;
case 6: lcd.print(" June ");break;
case 7: lcd.print(" July ");break;
case 8: lcd.print(" August ");break;
case 9: lcd.print(" September ");break;
case 10: lcd.print(" October ");break;
case 11: lcd.print(" November ");break;
case 12: lcd.print(" December ");break;
default: lcd.print(" Error ");break;
}

}

Exibições: 996

Responder esta

Respostas a este tópico

boa noite!
tenho um projeto parecido com o seu, mas o meu é para ligar a bomba da piscina

1- você precisa fazer é armazenar a hora por inteiro (12:35:00) em uma variável.
2- separar a hora em partes (hora),(minuto) e (segundo)
3- com as 3 partes já separadas ai sim você começa a logica de programação

poderia disponibilizar o codigo do timer com 3231, que usa na sua piscina?

Sou novato nisso.

Como faço para armazenar a hora?

seria mais ou menos assim

String hora () {//faz a leitura do RTC DS3231
char hora[30];
DateTime now = rtc.now();
sprintf( hora, "%02d:%02d:%02d", now.hour(), now.minute(), now.second() );
Serial.println (hora);
return hora;
}

desculpa a demora, vou tentar extrair apenas a parte de timmer do programa e te enviar

Muito obrigado

#include <DS3231.h> //relogio
//-INICIO--------------------------VARIAVEIS DE RELOGIO------------------------------------------
// SDA pino -> conectar na porta A4(SDA)// SCL pino -> conectar na porta A5(SCL)
DS3231 rtc(SDA, SCL); // Comunicação I2C
String tempo_atual; String hora_atual; String minuto_atual; String segundo_atual;

//-INICIO---------------------------SETUP--------------------------------------------------------
void setup(){
Serial.begin(115200); //inicia serial convencional
rtc.begin(); //inicia o relogico

//Descomente as linhas a seguir para configurar o horário, após comente e faça o upload novamente para o Arduino
//rtc.setDOW(TUESDAY); // colocar o dia da semana em ingles
//rtc.setTime(12,16,0); // colocar: hora, minuto, segundo (12:00:00) (formato 24hr)
//rtc.setDate(19,4,2017); //colocar: Data Mes, Dia, Ano

}//-FINAL-----------------------------------SETUP-----------------------------------------------
void separa_tempo() {
tempo_atual = rtc.getTimeStr(); //armazena em formato de string a hora atual na variavel (tempo_atual)

hora_atual = tempo_atual.substring(0,(tempo_atual.indexOf(":")));
minuto_atual = tempo_atual.substring(5,(tempo_atual.indexOf(":"))+1);
segundo_atual = tempo_atual.substring(6,(tempo_atual.indexOf(" ")));}

//-INICIO-----------------------------------LOOP---------------------------------------------------------------------------------------------------------------------------------------------------
void loop(){
separa_tempo();
Serial.print("hora: "); Serial.print(hora_atual);
Serial.print(" Min: "); Serial.print(minuto_atual);
Serial.print(" Seg: "); Serial.print(segundo_atual);
Serial.println();
}//-FINAL-----------------------------------LOOP------------------------------------------------

andre eu tenho um exemplo que uso para alimentar meus peixes, mas sem lcd, mas é parecida a ideia.

da uma estudada nele qq duvida é só perguntar

Anexos

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço