Ir ao conteúdo
  • Cadastre-se

Outro como acionar uma lampada em um dia especifico da semana?


Posts recomendados

Boa noite pessoal.

Estou usando um rtc3231, uma fonte, um arduino uno e um relé para poder ligar e desligar uma lâmpada no tempo predeterminado em uma loja, ele funciona no horário certo, porém tenho que adicionar o dia da semana, pois ela só vai funcionar de segunda a sábado de 8:00 as 18:00 mas tem que ficar desligada no domingo, e é essa variável de dia da semana que eu não consigo criar uma const int e colocar junto com hora e minuto no comando if.

Alguém poderia me ajudar?

/Inclusao das bibliotecas

#include <Wire.h>

#include "RTClib.h"

int Relay = 3;



const int OnHour = 8;

const int OnMin = 00;



const int OffHour = 18;

const int OffMin = 00;



RTC_DS3231 rtc; //Objeto rtc da classe DS3132

     

char diasDaSemana[7][12] = {"Domingo", "Segunda", "Terca", "Quarta", "Quinta", "Sexta", "sábado"}; //Dias da semana



void setup () {

  Serial.begin(57600);                          //Inicializa a comunicacao serial

  if (!rtc.begin()) {                          //Se o RTC nao for inicializado, faz

    Serial.println("RTC NAO INICIALIZADO"); //Imprime o texto

    while (1);                                 //Trava o programa

  }

  //rtc.adjust(DateTime(2019, 3, 18, 10, 53, 00)); //Ajusta o tempo do RTC para a data e hora definida pelo usuario.

  delay(100);                                      //100 Milissegundos



  pinMode(Relay, OUTPUT);

  digitalWrite(Relay,  HIGH);

}



void loop ()

{

  DateTime agora = rtc.now();            // Faz a leitura de dados de data e hora

  Serial.print("Data: ");

  Serial.print(agora.day(), DEC);        //Imprime dia

  Serial.print('/');                     //Imprime barra

  Serial.print(agora.month(), DEC);      //Imprime mes

  Serial.print('/');                     //Imprime barra

  Serial.print(agora.year(), DEC);       //Imprime ano

  Serial.print(" / Dia da semana: ");                       //Imprime texto

  Serial.print(diasDaSemana[agora.dayOfTheWeek()]);         //Imprime dia da semana

  Serial.print(" / Horas: ");                               //Imprime texto

  Serial.print(agora.hour(), DEC);                          //Imprime hora

  Serial.print(':');                                        //Imprime dois pontos

  Serial.print(agora.minute(), DEC);                        //Imprime os minutos

  Serial.print(':');                                        //Imprime dois pontos

  Serial.print(agora.second(), DEC);                        //Imprime os segundos

  Serial.println();                                         //Quebra de linha

  delay(1000);                                              //1 Segundo



 if ((agora.hour() == OnHour) && (agora.minute() == OnMin)){

    digitalWrite(Relay,LOW);

    Serial.println("LIGHT ON");

    }else

 if ((agora.hour() == OffHour) && (agora.minute() == OffMin)){

      digitalWrite(Relay,HIGH);

      Serial.println("LIGHT OFF");

    }

}

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Um minimalismo baseado na entrada:

8 horas atrás, Ulysses De Paulo Araujo disse:

só vai funcionar de segunda a sábado de 8:00 as 18:00 mas tem que ficar desligada no domingo

 

Que tal se comparasse o dia da semana com domingo e só faça as operações se não for ... domingo? Algo como:

if (agora.dayOfTheWeek()!=0) //domingo é zero? veja no d.s. do seu ci
{
// núcleo do programa
}
else
digitalWrite(Relay,LOW);

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

Boa noite.

Fiz como você disse e funcionou perfeitamente, obrigado pela ajuda Isadora.

O código ficou assim, caso alguém queira copiar:

 

//Inclusao dessas duas bibliotecas

#include <Wire.h>

#include "RTClib.h"

int Relay = 3;//pino do arduino

 

const int OnHour = 8;  //hora ligar

const int OnMin = 00;  //minuto ligar

 

 

const int OffHour = 18;  //hora desligar

const int OffMin = 00;  //minuto desligar

 

 

 

 

 

     

//As linhas de codigo a seguir devem ser comentadas, ou descomentadas, de acordo com o modelo de RTC utilizado (DS1307 ou DS3132)

//RTC_DS1307 rtc; //Objeto rtc da classe DS1307

RTC_DS3231 rtc; //Objeto rtc da classe DS3132

     

char diasDaSemana[7][12] = {"Domingo", "Segunda", "Terca", "Quarta", "Quinta", "Sexta", "sábado"}; //Dias da semana em que 1 e segunda e 7 domingo

 

void setup () {

  Serial.begin(57600);                          //Inicializa a comunicacao serial

  if (!rtc.begin()) {                          //Se o RTC nao for inicializado, faz

    Serial.println("RTC NAO INICIALIZADO"); //Imprime o texto

    while (1);                                 //Trava o programa

  }

  //rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); //CAPTURA A DATA E HORA EM QUE O SKETCH É COMPILADO

  //rtc.adjust(DateTime(2019, 3, 18, 10, 53, 00)); //Ajusta o tempo do RTC para a data e hora definida pelo usuario.

  delay(100);                                      //100 Milissegundos

 

  pinMode(Relay, OUTPUT);

  digitalWrite(Relay,  HIGH);

}

 

void loop ()

{

  DateTime agora = rtc.now();            // Faz a leitura de dados de data e hora

  Serial.print("Data: ");

  Serial.print(agora.day(), DEC);        //Imprime dia

  Serial.print('/');                     //Imprime barra

  Serial.print(agora.month(), DEC);      //Imprime mes

  Serial.print('/');                     //Imprime barra

  Serial.print(agora.year(), DEC);       //Imprime ano

  Serial.print(" / Dia da semana: ");                       //Imprime texto

  Serial.print(diasDaSemana[agora.dayOfTheWeek()]);         //Imprime dia da semana

  Serial.print(" / Horas: ");                               //Imprime texto

  Serial.print(agora.hour(), DEC);                          //Imprime hora

  Serial.print(':');                                        //Imprime dois pontos

  Serial.print(agora.minute(), DEC);                        //Imprime os minutos

  Serial.print(':');                                        //Imprime dois pontos

  Serial.print(agora.second(), DEC);                        //Imprime os segundos

  Serial.println();                                         //Quebra de linha

  delay(1000);                                              //1 Segundo

 

 if ((agora.dayOfTheWeek()!=7) && (agora.hour() == OnHour) && (agora.minute() == OnMin)){

    digitalWrite(Relay,LOW);

    Serial.println("LIGHT ON");

    }else

   

   

 if ((agora.dayOfTheWeek()!=7) && (agora.hour() == OffHour) && (agora.minute() == OffMin)){

      digitalWrite(Relay,HIGH);

      Serial.println("LIGHT OFF");

    }

}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!