Ola pessoal, eu tenho o seguinte codigo a funcionar correctamente:

 

/*
* HeroAlarm
*
*
*/

#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
#include <TimeAlarms.h>

//////////////////

int calibrationTime = 0;
long unsigned int lowIn;
long unsigned int pause = 0;
boolean lockLow = true;
boolean takeLowTime;

int pirPin = 8; //SINAL DO PIR
int ledPin = 12; // LUZ DO SENSOR PIR RELE NUMERO 2
////////////////

int relePin = 13; // RELE connected to digital pin 2
int radioPin = 03; // RADIO connected to digital pin 3
//int releDiaEspecificoPin = 02; // RELE connected to digital pin 4
int numero;

#define RELE1 11 // ROUTER RELE NUMERO 1
#define RELE2 22
#define RELE3 20
#define RELE4 21

//int pirpin = HIGH;
//int ledpin = LOW;
int RELE1_STATE = HIGH;
int RELE2_STATE = LOW;
int RELE3_STATE = LOW;
int RELE4_STATE = LOW;

//=======================================================
// ENTRADAS DTMF DIGITAIS
//=======================================================
int pinBit01 = 7; // azul
int pinBit02 = 6; // branco
int pinBit03 = 5; // amarelo
int pinBit04 = 4; // verde
int pinBitSts= 3; // laranja

int bit01 = 0;
int bit02 = 0;
int bit03 = 0;
int bit04 = 0;
int bitSts= 0;

boolean proceed = false; //Fag que habilita o funcionamento dos comandos mediante senha digitada corretamente - inicializa falso!

String tmpPass =' '; //Armazenamento da senha digitada no telemóvel!

String password = "1234"; // Defina sua senha aqui - pode ser de quaisquer número de dígitos!

void setup() {
Serial.begin(9600);
// pinMode(relePin, OUTPUT);
// digitalWrite(relePin, LOW);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, HIGH);
digitalWrite(pirPin, HIGH);
pinMode(pirPin, INPUT);

//digitalWrite(pirPin, LOW);
pinMode(RELE1, OUTPUT); // ROUTER
// pinMode(RELE2, OUTPUT);
//pinMode(RELE3, OUTPUT);
//pinMode(RELE4, OUTPUT);

digitalWrite(RELE1, HIGH); //ROUTER
//digitalWrite(RELE2, LOW);
//digitalWrite(RELE3, LOW);
//digitalWrite(RELE4, LOW);

Serial.println("Aguardando comando...");

setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus()!= timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");

//Alarm.alarmRepeat(dowSaturday,00,57,30, ligarReleSegundaFeira); // Ligar todas as segundas feiras as 20:00:00 um rele
// Alarm.alarmRepeat(dowSaturday,00,58,00, desligarReleSegundaFeira); // Desligar á segunda feira também as 23:50:00.

//Alarm.alarmRepeat(8,00,0, ligarRadio); // Ligar todos os dias as 08:00:00 um radio
//Alarm.alarmRepeat(18,00,14, desligarRadio); // e desligar as 18:00:14

}

void loop(){
digitalClockDisplay();
//Alarm.delay(0); // wait one sec

bitSts= digitalRead(pinBitSts);
bit01 = digitalRead(pinBit01);
bit02 = digitalRead(pinBit02);
bit03 = digitalRead(pinBit03);
bit04 = digitalRead(pinBit04);

numero = (bit01 * 1) + (bit02 * 2) + (bit03 * 4) + (bit04 * 8);

if (bitSts == HIGH && numero < 13) {

Serial.print("Recebido: ");
switch (numero){
case 1:
Serial.println("1");
tmpPass += '1'; //Adiciona o número digitado em tmpPass

/* COMANDO PARA RELE1 */
if (proceed == true) // Se proceed é verdadeiro (a senha foi digitada corretamente) comando é executado!
{
RELE1_STATE = !RELE1_STATE; // Troca de estado (HIGH/LOW) cada vez que pressionar o botão.
digitalWrite(RELE1, RELE1_STATE); //Liga-desliga Relé.
}
break;

case 2:
Serial.println("2");
tmpPass += '2'; //Adiciona o número digitado em tmpPass

/* COMANDO PARA RELE2 */
if (proceed == true) // Se proceed é verdadeiro (a senha foi digitada corretamente) comando é executado!
{
RELE2_STATE = !RELE2_STATE; // Troca de estado (HIGH/LOW) cada vez que pressionar o botão.
digitalWrite(RELE2, RELE2_STATE); //Liga-desliga Relé.
}
break;

case 3:
Serial.println("3");
tmpPass += '3'; //Adiciona o número digitado em tmpPass

/* COMANDO PARA RELE3 */
if (proceed == true) // Se proceed é verdadeiro (a senha foi digitada corretamente) comando é executado!
{
RELE3_STATE = !RELE3_STATE; // Troca de estado (HIGH/LOW) cada vez que pressionar o botão.
digitalWrite(RELE3, RELE3_STATE); //Liga-desliga Relé.
}

break;

case 4:
Serial.println("4");
tmpPass += '4'; //Adiciona o número digitado em tmpPass

/* COMANDO PARA RELE4 */
if (proceed == true) // Se proceed é verdadeiro (a senha foi digitada corretamente) comando é executado!
{
RELE4_STATE = !RELE4_STATE; // Troca de estado (HIGH/LOW) cada vez que pressionar o botão.
digitalWrite(RELE4, RELE4_STATE); //Liga-desliga Relé.
}

break;

case 5:
Serial.println("5");
tmpPass += '5'; //Adiciona o número digitado em tmpPass
break;

case 6:
Serial.println("6");
tmpPass += '6'; //Adiciona o número digitado em tmpPass
break;

case 7:
Serial.println("7");
tmpPass += '7'; //Adiciona o número digitado em tmpPass
break;

case 8:
Serial.println("8");
tmpPass += '8'; //Adiciona o número digitado em tmpPass
break;

case 9:
Serial.println("9");
tmpPass += '9'; //Adiciona o número digitado em tmpPass
break;

case 10:
Serial.println("0");
tmpPass += '0'; //Adiciona o número digitado em tmpPass
break;

case 11: // Caractere '*'
Serial.println("*");
tmpPass =' '; //Limpa para armazenar a senha novamente!
proceed = false; //Desabilita todos os comandos até que a senha seja digitada novamente!
break;

case 12: // Caractere '#'
Serial.println("#");

tmpPass = tmpPass.trim();//Retira os espaços em branco - ver caractere '*'!

if (tmpPass == password) { // Se a senha digitada for igual a senha armazenada...
Serial.println("Senha correta!");
proceed = true; //Habilita todos os comandos via telemóvel
}else{
Serial.println("Senha ERRADA!");
proceed = false; //Desabilita todos os comandos via telemóvel
}

/*
//Caso queira ver a saida da senha é só descomentar
Serial.print("tmpPass= ");
Serial.println(tmpPass);
Serial.print("password= ");
Serial.println(password);
*/

break;
}

// Zeram todas as variáveis
numero = 0;
bit01 = 0;
bit02 = 0;
bit03 = 0;
bit04 = 0;
bitSts= 0;
delay (500);
}

if(digitalRead(pirPin) == LOW){
digitalWrite(ledPin, HIGH); //the led visualizes the sensors output pin state
if(lockLow){
lockLow = false;

delay(50);
}
takeLowTime = true;
}

if(digitalRead(pirPin) == HIGH){
digitalWrite(ledPin, LOW); //the led visualizes the sensors output pin state

if(takeLowTime){
lowIn = millis(); //save the time of the transition from high to LOW
takeLowTime = false; //make sure this is only done at the start of a LOW phase
}

if(!lockLow && millis() - lowIn > pause){
//makes sure this block of code is only executed again after
//a new motion sequence has been detected
lockLow = true;
delay(50);
}
}

}
////////////////////////////////////////////////////////

void ligarReleSegundaFeira() {
digitalWrite(relePin, HIGH); // Ligar um rele
}

void desligarReleSegundaFeira() {
digitalWrite(relePin, LOW); // Desligar um rele
}

void ligarRadio() {
digitalWrite(radioPin, HIGH); // Ligar um Radio
}

void desligarRadio() {
digitalWrite(radioPin, LOW); // Desligar um Radi
}

void digitalClockDisplay(){
Serial.print(hour());
printDigits(minute());
printDigits(second());
Serial.print(" ");
Serial.print(day());
Serial.print(" ");
Serial.print(month());
Serial.print(" ");
Serial.print(year());
Serial.println();
}

void printDigits(int digits){
//utility function for digital clock display: prints preceding colon and leading 0
Serial.print(":");
if(digits < 10)
Serial.print('0');
Serial.print(digits);

}

O que eu pretendia aqui, era que o sensor pir só se activasse entre as 21:00 e a 00:00, é possivel fazer isso? se sim , quem me ajuda a alterar o codigo? obrigado

Exibições: 238

Responder esta

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço