Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Definicoes ---------------------------------------------------------------
- // Programa : Data e Hora com DS1307
- // Autor : Rui
- #include "Wire.h"
- #include <LiquidCrystal.h> //Biblioteca do LCD
- #define Bomba 10 //variavel e pino do rele da bomba
- #define vs1 9 //variavel e pino do rele do setor1
- #define DS1307_ADDRESS 0x68
- LiquidCrystal lcd(12, 11, 5, 4, 3, 2);//Portas do lcd
- byte LigaSr1 = 0;
- byte LigaSr2 = 0;
- byte LigaSr3 = 0;
- byte LigaSr4 = 0;
- byte Di[7] = {0,1,2,3,8,8,8}; // Dias Semana programados (8 Não será ativado o sistema)
- byte Ho[] = {9,17,21}; // Horas programadas
- byte Mn[] = {8,34,47}; // Minutos programados
- byte Se[] = {2,22,54}; // Segundos programados
- byte diadasemana;
- byte horas;
- byte minutos;
- byte segundos;
- long Tempo;
- long Duracao;
- byte zero = 0x00;
- // Setup --------------------------------------------------------------
- void setup()
- {
- Wire.begin();
- Serial.begin(9600);
- lcd.begin(16, 2); // iniciando o lcd
- //A linha abaixo pode ser retirada apos setar a data e hora
- SelecionaDataeHora();
- }
- // SetTime ------------------------------------------------------------
- void SelecionaDataeHora() //Seta a data e a hora do DS1307
- {
- byte segundos = 40; //Valores de 0 a 59
- byte minutos = 59; //Valores de 0 a 59
- horas = 23; //Valores de 0 a 23
- byte diadasemana = 1; //Valores de 0 a 6 - 0=Domingo, 1 = Segunda, etc.
- byte diadomes = 17; //Valores de 1 a 31
- byte mes = 4; //Valores de 1 a 12
- byte ano = 13; //Valores de 0 a 99
- Wire.beginTransmission(DS1307_ADDRESS);
- Wire.write(zero); //Stop no CI para que o mesmo possa receber os dados
- //As linhas abaixo escrevem no CI os valores de
- //data e hora que foram colocados nas variaveis acima
- Wire.write(ConverteParaBCD(segundos));
- Wire.write(ConverteParaBCD(minutos));
- Wire.write(ConverteParaBCD(horas));
- Wire.write(ConverteParaBCD(diadasemana));
- Wire.write(ConverteParaBCD(diadomes));
- Wire.write(ConverteParaBCD(mes));
- Wire.write(ConverteParaBCD(ano));
- Wire.write(zero); //Start no CI
- Wire.endTransmission();
- }
- // CV_B ------------------------------------------------------------
- byte ConverteParaBCD(byte val){ //Converte o número de decimal para BCD
- return ( (val/10*16) + (val%10) );
- }
- // SetTime ------------------------------------------------------------
- byte ConverteparaDecimal(byte val) { //Converte de BCD para decimal
- return ( (val/16*10) + (val%16) );
- }
- // Diplay -------------------------------------------------------------
- void Mostrarelogio()
- {
- Wire.beginTransmission(DS1307_ADDRESS);
- Wire.write(zero);
- Wire.endTransmission();
- Wire.requestFrom(DS1307_ADDRESS, 7);
- segundos = ConverteparaDecimal(Wire.read());
- minutos = ConverteparaDecimal(Wire.read());
- horas = ConverteparaDecimal(Wire.read() & 0b111111);
- diadasemana = ConverteparaDecimal(Wire.read());
- // diadasemana = 4;
- int diadomes = ConverteparaDecimal(Wire.read());
- int mes = ConverteparaDecimal(Wire.read());
- int ano = ConverteparaDecimal(Wire.read());
- //Mostra a data no Serial Monitor
- Serial.print("Data: ");
- Serial.print(diadomes);
- Serial.print("/");
- Serial.print(mes);
- Serial.print("/");
- Serial.print(ano);
- Serial.print(" ");
- Serial.print("Hora : ");
- Serial.print(horas);
- Serial.print(":");
- Serial.print(minutos);
- Serial.print(":");
- Serial.println(segundos);
- switch(diadasemana)
- {
- case 0:Serial.println(", Domingo");
- break;
- case 1:Serial.println(", Segunda");
- break;
- case 2:Serial.println(", Terca");
- break;
- case 3:Serial.println(", Quarta");
- break;
- case 4:Serial.println(", Quinta");
- break;
- case 5:Serial.println(", Sexta");
- break;
- case 6:Serial.println(", Sabado");
- }
- }
- // Ativa Sv1 ----------------------------------------------------------
- void atv_Sr1()
- {
- if (LigaSr1 = 1)
- {
- digitalWrite(Bomba, LOW); // Liga bomba dágua
- digitalWrite(vs1, LOW); // Liga solenoide do setor1
- }
- else
- digitalWrite(vs1, HIGH); // Desliga solenoide do setor1
- }
- // Identificas dia Semana-------------------------------------------------------
- void Dia_irriga()
- {
- switch (Di[diadasemana])
- {
- case 0:Calc_Inicio();
- break;
- case 1:Calc_Inicio();
- break;
- case 2:Calc_Inicio();
- break;
- case 3:Calc_Inicio();
- break;
- case 4:Calc_Inicio();
- break;
- case 5:Calc_Inicio();
- break;
- case 6:Calc_Inicio();
- }
- }
- // Calc Inicio ---------------------------------------------------------------
- void Calc_Inicio()
- {
- Duracao = Tempo;
- for (byte i = 0; i<3;i++)
- {
- if ((Ho[i] == horas) & (Mn[i] == minutos) & (Se[i] == segundos) )
- {
- while (Duracao>0)
- {
- LigaSr1 = 0;
- Duracao--;
- }
- Duracao = Tempo;
- LigaSr1 = 1;
- while (Duracao>0)
- {
- LigaSr2 = 0;
- Duracao--;
- }
- Duracao = Tempo;
- LigaSr1 = 2;
- while (Duracao>0)
- {
- LigaSr3 = 0;
- Duracao--;
- }
- Duracao = Tempo;
- LigaSr1 = 3;
- while (Duracao>0)
- {
- LigaSr4 = 0;
- Duracao--;
- }
- Duracao = Tempo;
- LigaSr1 = 4;
- }
- }
- }
- // Loop ---------------------------------------------------------------
- void loop()
- {
- Mostrarelogio();
- delay(1000);
- Dia_irriga();
- Calc_Inicio();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement