Estou a uma semana tentando fazer um programa bem simples mas até agora houveram bastante falhas e alguns erros de lógica. Quero automatizar um sistema de iluminação para que as lâmpadas acendam sozinhas conforme o horário que eu determinar para isso estou utilizando um RTC, mas até ai está tranquilo minha dificuldade é colocar uma intervenção no manual caso eu não queira que a lâmpada acenda antes ou depois do programada. 

Segundo meu professor ao invés de utilizar um botão de pulso, utilizar dois interruptores seria melhor um que selecionasse modo automático ou manual, e um segundo interruptor(chave) para ligar ou desligar no processo manual. Por favor me ajudem já tentei outras lógicas, com um botão dois botões, com interrupção sem interrupção com interruptor e até agora nada de funcionar =( Quem puder colaborar.....

Esse é meu ultimo código com chaves

#include <Wire.h>
#include "RTClib.h"


RTC_Millis rtc;

const int CIRC1 = 8;
const int AUTO = 3;
const int MANUAL = 4;


int estadobotao = 0;
int estadobotao2 = 0;


void setup(){

Serial.begin(57600);
// following line sets the RTC to the date & time this sketch was compiled
rtc.begin(DateTime(__DATE__, __TIME__));

delay(1000);

pinMode(CIRC1, OUTPUT);
pinMode(AUTO, INPUT);
pinMode(MANUAL, INPUT);


}

void loop (){

DateTime now = rtc.now();

estadobotao = digitalRead(AUTO);
estadobotao2 = digitalRead (MANUAL);

if(estadobotao == HIGH){
if((now.hour()==15)&& (now.minute()==55))
digitalWrite(CIRC1, HIGH);

if((now.hour()==15)&&(now.minute()==58))
digitalWrite(CIRC1, LOW);

else if(estadobotao2 == HIGH) {
digitalWrite(CIRC1, HIGH);}

else{
digitalWrite(CIRC1, LOW);}

Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
delay(3000);
}

}

Exibições: 634

Responder esta

Respostas a este tópico

Qual o horário você quer que fique ligado? 

Tem duas coisas possíveis:

Pelo que entendi, ele está programado para acender as 15:55 e apagar as 15:58.

1) vc pode colocar no modo manual e simplesmente desligar o sistema automático (ai é só colocar mais uma condição dentro dos IFs de horário)

if((now.hour()==15)&& (now.minute()==55) && ("botao= modo automatico") 

2)A outra opção seria o botão inverte o status atual (se está ON vai para OFF) até o próximo acionamento ou até o próximo horário programado (vale o qual vier antes).

Qual vc quer implementar r?

segue minha contribuição (a transformação em código fica por sua conta):

dados:

B1 = interruptor automático/manual 

B2 = interruptor liga/desliga (só funciona no modo manual)

if (  

      (  now.hour()==15 && now.minute()==55 && B1==automático  )

            ||

      (  B1==manual && B2=ligado )

)

{ liga cirtuito }

if (  

      (  now.hour()==15 && now.minute()==58 && B1==automático  )

            ||

      (  B1==manual && B2=desligado )

)

{ desliga cirtuito }

Tradução:

==> ligar circuito quando ( B1 estiver em automático e horário for 15h55) OU ( B1 estiver em manual e B2 estiver ligado)

==> desligar circuito quando ( B1 estiver em automático e horário for 15h58) OU ( B1 estiver em manual e B2 estiver desligado)

Jéssica, boa tarde!

Segue exemplo espero que seja oque procura,

#include <Wire.h>
#include "RTClib.h"

RTC_Millis rtc;
const int CIRC1 = 8;
const int AUTO = 3;
const int MANUAL = 4;

int horaLiga = 14;
int minutoLiga = 26;
int horaDesliga = 05;
int minutoDesliga = 27;

int estadobotao = 0;
int estadobotao2 = 0;

void setup(){

Serial.begin(57600);
// following line sets the RTC to the date & time this sketch was compiled
rtc.begin(DateTime(__DATE__, __TIME__));

delay(1000);

pinMode(CIRC1, OUTPUT);
pinMode(AUTO, INPUT);
pinMode(MANUAL, INPUT);

}
void loop (){

DateTime now = rtc.now();

alarme(now.hour(),now.minute());

Serial.print(now.day(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.year(), DEC);
Serial.print(' ');
Serial.print(zero(now.hour()));
Serial.print(':');
Serial.print(zero(now.minute()));
Serial.print(':');
Serial.print(zero(now.second()));
Serial.println();
delay(3000);
}

String zero(int digits){
String lead;
if (digits < 10){
lead ="0"+ String(digits);
}
else{
lead = String(digits);
}
return lead;
}

int alarme(int hora,int minuto){

int hAtual = ((hora*60) + minuto); // soma dos minutos hora atual
int hLiga = (horaLiga*60)+minutoLiga;
int hDesliga = (horaDesliga*60)+minutoDesliga;

if (hDesliga < hLiga){
if (hAtual >= hLiga){
digitalWrite(CIRC1,HIGH);
//Serial.println("teste") ;
}
if (hAtual >= hDesliga && hAtual < hLiga){
digitalWrite(CIRC1,LOW);
//Serial.println("teste2") ;
}
}
if (hDesliga > hLiga){
if (hAtual >= hLiga and hAtual <= hDesliga){
digitalWrite(CIRC1,HIGH);
}
if (hAtual >= hDesliga){
digitalWrite(CIRC1,LOW);
     }
   }
}

Caro Maurício, seu sketch faz acionamento da carga apenas no horário pré-determinado, ou seja, só contempla o modo automático.

Mas pelo relato da Jéssica, a dificuldade está na lógica para implementar o funcionamento do interruptor automático/manual, bem como do interruptor on/off da carga no modo manual.

jessica veja se eu entendi vc ja consegue fazer funcionar no modo automatico so falta fazer funcionar no modo manual?

se for isso fica mais facil

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço