Que tal colegas, tengo una duda respecto a un codigo que encontre en internet,es un temporizador programable que utiliza la libreria DS1307, el problema es que la tengo instalada y al momento de compilar el codigo me marca el siguiente error:
Investigue, pregunte y no eh podido resolver el problema y al parecer es mas comun de lo que pense, pero sinceramente soy nuevo en arduino, me dijeron que era porque no estaba declarado DS1307 pero no logro entender como se declara puesto que en el codigo ya esta incluido, tambien intente crear un call por asi decirlo reetiquetando la libreria DS1307 con otro nombre y tampoco me funciono, la verdad no se a que se debe el error y me gustaria saber como solucionarlo y porque representa un error, adjunto el codigo, saludos colegas.
Investigue, pregunte y no eh podido resolver el problema y al parecer es mas comun de lo que pense, pero sinceramente soy nuevo en arduino, me dijeron que era porque no estaba declarado DS1307 pero no logro entender como se declara puesto que en el codigo ya esta incluido, tambien intente crear un call por asi decirlo reetiquetando la libreria DS1307 con otro nombre y tampoco me funciono, la verdad no se a que se debe el error y me gustaria saber como solucionarlo y porque representa un error, adjunto el codigo, saludos colegas.
Código:
#include <DS1307.h>
#include <Wire.h>
#include <EEPROM.h>
#include <LiquidCrystal.h>
#define MEMORY 100
#define RELAY 16
#define BUZZER 17
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
char tempo[9] = "";
char data[9] = "";
int DataTime[7];
byte TimeActiveDevice[2], TimeDeactiveDevice[2];
byte SegAnt = 0, SegAtual = 0;
byte ReadKeyPad(void);
void AdjustTime(void);
void ActivationHour(void);
void DeactivationHour(void);
void setup()
{
Serial.begin(9600);
DS1307.begin();
//Config pins to control columns of the matrix keyboard
for(int key = 8; key < 12; key++)
{
pinMode(key, OUTPUT);
}
//Config pins to read lines of the matrix keyboard
for(int key = 12; key < 16; key++)
{
pinMode(key, INPUT);
}
for(int key = 8; key < 12; key++)
{
digitalWrite(key, LOW);
}
lcd.begin(16,2);
TimeActiveDevice[0] = EEPROM.read(1);
TimeActiveDevice[1] = EEPROM.read(2);
TimeDeactiveDevice[0] = EEPROM.read(3);
TimeDeactiveDevice[1] = EEPROM.read(4);
pinMode(RELAY, OUTPUT);
pinMode(BUZZER, OUTPUT);
digitalWrite(RELAY, HIGH);
}
void loop()
{
if(EEPROM.read(MEMORY) != 73)
{
AdjustTime();
lcd.clear();
ActivationHour();
lcd.clear();
DeactivationHour();
lcd.clear();
EEPROM.write(MEMORY, 73);
TimeActiveDevice[0] = EEPROM.read(1);
TimeActiveDevice[1] = EEPROM.read(2);
TimeDeactiveDevice[0] = EEPROM.read(3);
TimeDeactiveDevice[1] = EEPROM.read(4);
}
DS1307.getDate(DataTime);
SegAtual = DataTime[6];
if(ReadKeyPad() == 10)
{
AdjustTime();
lcd.clear();
ActivationHour();
lcd.clear();
}
if(abs(SegAtual - SegAnt) >= 1)
{
sprintf(tempo, "%02d:%02d:%02d", DataTime[4], DataTime[5], DataTime[6]);
sprintf(data, "%02d/%02d/%02d", DataTime[2], DataTime[1], DataTime[0]);
lcd.setCursor(4,1);
lcd.print(tempo);
lcd.setCursor(4,0);
lcd.print(data);
SegAnt = SegAtual;
}
//Active and Deactive the device according to the time
if(DataTime[4] == TimeActiveDevice[0] && DataTime[5] == TimeActiveDevice[1])
{
digitalWrite(RELAY, LOW);
}
if(DataTime[4] == TimeDeactiveDevice[0] && DataTime[5] == TimeDeactiveDevice[1])
{
digitalWrite(RELAY, HIGH);
}
}
byte ReadKeyPad(void)
{
byte teclado[4][4] = {
{1,2,3,10},
{4,5,6,11},
{7,8,9,12},
{14,0,15,13}};
byte coluna[4] = {8,9,10,11};
byte linha[4] = {12,13,14,15};
bool tecla;
byte digito_tecla = 16;
for(byte y = 0; y <= 3; y++)
{
digitalWrite(coluna[y], LOW);
}
for(byte y = 0; y <= 3; y++)
{
digitalWrite(coluna[y], HIGH);
for(byte x = 0; x <= 3; x++)
{
tecla = digitalRead(linha[x]);
if(tecla == 1)
{
digito_tecla = teclado[x][y];
digitalWrite(BUZZER, HIGH);
delay(100);
digitalWrite(BUZZER, LOW);
return digito_tecla;
}
}
digitalWrite(coluna[y], LOW);
}
return digito_tecla;
}
void AdjustTime()
{
int times[6];
int DadosTempo[7];
bool controle = 0;
bool EstadoSobe = 0, EstadoDesce = 0;
byte cont = 0;
byte number = 0;
int digitos[6];
byte PosCursor = 0;
byte t = 0;
bool Validate = 0;
char tempo[7] = "";
char data[15] = "";
DS1307.getDate(DadosTempo);
sprintf(tempo, "%02d:%02dh", DadosTempo[4], DadosTempo[5]);
sprintf(data, "%02d/%02d/%02d", DadosTempo[2], DadosTempo[1], DadosTempo[0]);
times[4] = DadosTempo[4];
times[5] = DadosTempo[5];
times[3] = DadosTempo[3];
times[2] = DadosTempo[2];
times[1] = DadosTempo[1];
times[0] = DadosTempo[0];
times[6] = DadosTempo[6];
digitos[0] = times[4]/10; //Armazena a Dezena das Horas
digitos[1] = times[4]%10; //Armazena a Unidade das Horas
digitos[2] = times[5]/10; //Armazena a Dezena dos Minutos
digitos[3] = times[5]%10; //Armazena a Unidade dos Minutos
do
{
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(2,0);
lcd.print("Adjust hour:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print(tempo);
PosCursor = 5;
Validate = 0;
do
{
number = ReadKeyPad();
delay(100);
if( (number >= 0 && number <= 9) && (controle == 0) && (cont < 4) )
{
digitos[cont] = number;
cont++;
controle = 1;
lcd.setCursor(PosCursor,1);
lcd.print(number);
PosCursor++;
if(cont == 2 || cont == 4)
{
PosCursor = PosCursor + 1;
}
}
if(number == 16 && controle == 1)
{
controle = 0;
}
if(number == 12)
{
for(cont = 0; cont < 4; cont++)
{
digitos[cont] = 0;
}
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
PosCursor = 5;
cont = 0;
for(int i = 4; i < 6; i++)
{
times[i] = 0;
}
}
}while(number != 13);
times[4] = (digitos[0]*10) + digitos[1];
times[5] = (digitos[2]*10) + digitos[3];
if((times[4] < 0 || times[4] > 23) || (times[5] < 0 || times[5] > 59))
{
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Invalid");
lcd.setCursor(6,1);
lcd.print("Hour");
delay(2000);
Validate = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(1,0);
lcd.print("Adjust Hours:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
sprintf(tempo, "%02d:%02dh", 0, 0);
PosCursor = 5;
cont = 0;
for(int i = 0; i < 4; i++)
{
digitos[i] = 0;
}
}
}while(Validate == 1);
do
{
number = ReadKeyPad();
delay(200);
}while(number != 16);
/*----------------------------------------Date Configuration-----------------------------------------------*/
PosCursor = 4;
do
{
//Transformacao dos digitos da data para dezenas e unidades
digitos[0] = times[2]/10; //Armazena a Dezena da Data
digitos[1] = times[2]%10; //Armazena a Unidade da Data
digitos[2] = times[1]/10; //Armazena a Dezena do Mes
digitos[3] = times[1]%10; //Armazena a Unidade do Mes
digitos[4] = times[0]/10; //Armazena a Dezena do Ano
digitos[5] = times[0]%10; //Armazena a Unidade do Ano
sprintf(data, "%02d/%02d/%02d", times[2], times[1], times[0]);
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(2,0);
lcd.print("Adjust Date:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(4,1);
lcd.print(data);
PosCursor = 4;
cont = 0;
Validate = 0;
do
{
number = ReadKeyPad();
delay(100);
if( (number >= 0 && number <= 9) && (controle == 0) && (cont < 6) )
{
digitos[cont] = number;
cont++;
controle = 1;
lcd.setCursor(PosCursor,1);
lcd.print(number);
PosCursor++;
if(cont == 2 || cont == 4)
{
PosCursor = PosCursor + 1;
}
}
if(number == 16 && controle == 1)
{
controle = 0;
}
if(number == 12)
{
for(cont = 0; cont < 6; cont++)
{
digitos[cont] = 0;
}
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(4,1);
lcd.print("00/00/00");
PosCursor = 4;
cont = 0;
}
}while(number != 13);
times[2] = (digitos[0]*10) + digitos[1]; //Transformando os numeros lidos para data do mes em dois dígitos
times[1] = (digitos[2]*10) + digitos[3]; //Transformando os numeros lidos para mes em dois dígitos
times[0] = (digitos[4]*10) + digitos[5]; //Transformando os numeros lidos para ano em dois dígitos
if((times[2] <= 0 || times[2] > 31) || (times[1] <= 0 || times[1] > 12) || times[0] <= 0)
{
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Invalid");
lcd.setCursor(6,1);
lcd.print("Date");
delay(2000);
Validate = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(2,0);
lcd.print("Adjuste Date:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(3,1);
lcd.print("00/00/00");
PosCursor = 5;
cont = 0;
for(byte i = 0; i < 3; i++)
{
digitos[i] = 0;
}
}
}while(Validate == 1);
do
{
number = ReadKeyPad();
delay(200);
}while(number != 16);
lcd.clear();
DS1307.setDate(times[0],times[1],times[2],times[3],times[4],times[5],00);//year,month,date of month, day of week,hour,minutes,second
}
void ActivationHour(void)
{
int times[6];
int DadosTempo[7];
bool controle = 0;
bool EstadoSobe = 0, EstadoDesce = 0;
byte cont = 0;
byte number = 0;
int digitos[6];
byte PosCursor = 0;
bool Validate = 0;
lcd.clear();
for(byte i = 0; i < 6; i++)
{
digitos[i] = 0;
}
do
{
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
lcd.print("Activation Hour:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
PosCursor = 5;
Validate = 0;
do
{
number = ReadKeyPad();
delay(100);
if( (number >= 0 && number <= 9) && (controle == 0) && (cont < 4) )
{
digitos[cont] = number;
cont++;
controle = 1;
lcd.setCursor(PosCursor,1);
lcd.print(number);
PosCursor++;
if(cont == 2 || cont == 4)
{
PosCursor = PosCursor + 1;
}
}
if(number == 16 && controle == 1)
{
controle = 0;
}
if(number == 12)
{
for(cont = 0; cont < 4; cont++)
{
digitos[cont] = 0;
}
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
PosCursor = 5;
cont = 0;
for(int i = 4; i < 6; i++)
{
digitos[i] = 0;
}
}
}while(number != 13);
times[4] = (digitos[0]*10) + digitos[1];
times[5] = (digitos[2]*10) + digitos[3];
if((times[4] < 0 || times[4] > 23) || (times[5] < 0 || times[5] > 59))
{
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Invalid");
lcd.setCursor(6,1);
lcd.print("Hour");
delay(2000);
Validate = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(1,0);
lcd.print("Activation Hour:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
sprintf(tempo, "%02d:%02dh", 0, 0);
PosCursor = 5;
cont = 0;
for(cont = 0; cont < 4; cont++)
{
digitos[cont] = 0;
}
}
}while(Validate == 1);
EEPROM.write(1, times[4]);
EEPROM.write(2, times[5]);
do
{
number = ReadKeyPad();
delay(200);
}while(number != 16);
}
void DeactivationHour(void)
{
int times[6];
int DadosTempo[7];
bool controle = 0;
bool EstadoSobe = 0, EstadoDesce = 0;
byte cont = 0;
byte number = 0;
int digitos[6];
byte PosCursor = 0;
bool Validate = 0;
lcd.clear();
for(byte i = 0; i < 6; i++)
{
digitos[i] = 0;
}
do
{
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(1,0);
lcd.print("Shutdown Hour:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
PosCursor = 5;
Validate = 0;
do
{
number = ReadKeyPad();
delay(100);
if( (number >= 0 && number <= 9) && (controle == 0) && (cont < 4) )
{
digitos[cont] = number;
cont++;
controle = 1;
lcd.setCursor(PosCursor,1);
lcd.print(number);
PosCursor++;
if(cont == 2 || cont == 4)
{
PosCursor = PosCursor + 1;
}
}
if(number == 16 && controle == 1)
{
controle = 0;
}
if(number == 12)
{
for(cont = 0; cont < 4; cont++)
{
digitos[cont] = 0;
}
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
PosCursor = 5;
cont = 0;
for(int i = 4; i < 6; i++)
{
times[i] = 0;
}
}
}while(number != 13);
times[4] = (digitos[0]*10) + digitos[1];
times[5] = (digitos[2]*10) + digitos[3];
EEPROM.write(3, times[4]);
EEPROM.write(4, times[5]);
Serial.println(times[4]);
Serial.println(times[5]);
if((times[4] < 0 || times[4] > 23) || (times[5] < 0 || times[5] > 59))
{
lcd.clear();
lcd.setCursor(4,0);
lcd.print("Invalid");
lcd.setCursor(6,1);
lcd.print("Hour");
delay(2000);
Validate = 1;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(1,0);
lcd.print("Shutdown Hour:");
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(5,1);
lcd.print("00:00h");
sprintf(tempo, "%02d:%02dh", 0, 0);
PosCursor = 5;
cont = 0;
for(cont = 0; cont < 4; cont++)
{
digitos[cont] = 0;
}
}
}while(Validate == 1);
do
{
number = ReadKeyPad();
delay(200);
}while(number != 16);
}
Última edición: