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;
}
}
Tags:
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
#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
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por