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;
}
}
E quais são os erros que aparecem na compilação??
Segue o Erro
exit status 1
't' was not declared in this scope
Se retirar o t e deixar:
if(hour() > 15 && hour() <16)
{ digitalWrite(8, HIGH);}
Aparece esse erro:
'hour' was not declared in this scope