Pues tengo que ser mas tonto de lo que pensaba jeje porque no soy capaz de implementarlo a mi codigo jejeje.
Este es el codigo con el aviso de presencia mediante 2 pir, mostrandolo en LCD junto con la fecha y la hora he iluminando el led del pin 13 de la placa.
// Alarma Chalet
#include <Wire.h> // Libreria para I2C
#include <LiquidCrystal_I2C.h> // Libreria para LCD
#define DS1307_I2C_ADDRESS 0x68 // Direccion bus Reloj
LiquidCrystal_I2C lcd(0x27,16,2); // Direccion de bus pantalla
const int pir1 = 2; // Pin de entrada señal Pir 1
const int pir2 = 4; // Pin de entrada señal Pir 2
const int ledEstado = 13; // Led en pin 13 salto Pir 1 y Pir 2
int estadoPir1 = 0; // Estado de Pir 1 "0"
int estadoPir2 = 0; // Estado de Pir 2 "0"
byte decToBcd(byte val)
{
return ( (val/10*16) + (val%10) );
}
// Convierte BCD (binario decimal codificado) a números normales decimales
byte bcdToDec(byte val)
{
return ( (val/16*10) + (val%16) );
}
// 1) Sets the date and time on the ds1307
// 2) Starts the clock
// 3) Sets hour mode to 24 hour clock
void setDateDs1307(byte second, // 0-59
byte minute, // 0-59
byte hour, // 1-23
byte dayOfWeek, // 1-7
byte dayOfMonth, // 1-28/29/30/31
byte month, // 1-12
byte year) // 0-99
{
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.send(decToBcd(second));
Wire.send(decToBcd(minute));
Wire.send(decToBcd(hour));
Wire.send(decToBcd(dayOfWeek));
Wire.send(decToBcd(dayOfMonth));
Wire.send(decToBcd(month));
Wire.send(decToBcd(year));
Wire.endTransmission();
}
// Establece la fecha y la hora del reloj
void getDateDs1307(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
// Resetea el registro puntero
Wire.beginTransmission(DS1307_I2C_ADDRESS);
Wire.send(0);
Wire.endTransmission();
Wire.requestFrom(DS1307_I2C_ADDRESS, 7);
// Alguno de estos necesitan enmascarar porque ciertos bits son bits de control
*second = bcdToDec(Wire.receive() & 0x7f);
*minute = bcdToDec(Wire.receive());
*hour = bcdToDec(Wire.receive() & 0x3f);
*dayOfWeek = bcdToDec(Wire.receive());
*dayOfMonth = bcdToDec(Wire.receive());
*month = bcdToDec(Wire.receive());
*year = bcdToDec(Wire.receive());
}
void setup()
{
lcd.init(); // Inicializacion LCD
pinMode(ledEstado, OUTPUT); // Funcion de salida LedEstado pin 13
pinMode(pir1, INPUT); // Funcion de entrada Pir 1 pin 2
pinMode(pir2, INPUT); // Funcion de entrada Pir 2 pin 4
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
Wire.begin();
// la primera vez debemos poner en hora, active esta parte y luego vuelva a quitarla
/*second = 00;
minute = 24;
hour = 12;
dayOfWeek = 7;
dayOfMonth = 01;
month = 4;
year = 12;
setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year); */
}
void loop()
{
lcd.backlight(); // Iluminacion LCD
lcd.setCursor(0,0); // Seleccionamos posicion del cursor
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
lcd.setCursor(6,0);
lcd.print(year, DEC);
lcd.setCursor(2,0);
lcd.print("/");
lcd.setCursor(3,0);
if (month < 10) lcd.print("0");
lcd.print(month, DEC);
lcd.setCursor(5,0);
lcd.print("/");
lcd.setCursor(0,0);
if (dayOfMonth < 10) lcd.print("0");
lcd.print(dayOfMonth, DEC);
lcd.print("");
lcd.setCursor(0,1);
if (hour < 10) lcd.print("0");
lcd.print(hour, DEC);
lcd.setCursor(2,1);
lcd.print(":");
lcd.setCursor(3,1);
if (minute < 10) lcd.print("0");
lcd.print(minute, DEC);
lcd.setCursor(5,1);
lcd.print(":");
if (second < 10) lcd.print("0");
lcd.print(second, DEC);
switch (dayOfWeek)
{
case 1:
lcd.setCursor(9,0);
lcd.print("Lunes");
break;
case 2:
lcd.setCursor(9,0);
lcd.print("Martes");
break;
case 3:
lcd.setCursor(9,0);
lcd.print("Miercoles");
break;
case 4:
lcd.setCursor(9,0);
lcd.print("Jueves");
break;
case 5:
lcd.setCursor(9,0);
lcd.print("Viernes");
break;
case 6:
lcd.setCursor(9,0);
lcd.print("Sabado");
break;
case 7:
lcd.setCursor(9,0);
lcd.print("Domingo");
break;
}
delay(1000); //Pausa durante 1 segundo
estadoPir1 = digitalRead(pir1); // Leer estado Pir 1
estadoPir2 = digitalRead(pir2); // Leer estado Pir 2
lcd.backlight(); // Iluminacion LCD
if (estadoPir1 == HIGH) { // Si esta sl sensor Pir 1 activado activa led Pin 13
lcd.setCursor(9,1);
lcd.print("5 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("4 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("3 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("2 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("1 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("0 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("Pir 1"); // Aparece en pantalla Pir 1
digitalWrite(ledEstado, HIGH); //Pone led Estado pin 13 a nivel alto
}
else { // Si no se da las condiciones anteriores pone led Estado a nivel bajo
digitalWrite(ledEstado, LOW);
if (estadoPir2 == HIGH) { // Si esta sl sensor Pir 2 activado activa led Pin 13
lcd.setCursor(9,1);
delay (1000);
lcd.print("6 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("5 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("4 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("3 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("2 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("1 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("0 ");
lcd.setCursor(9,1);
delay (1000);
lcd.print("Pir 2"); // Aparece en pantalla Pir 2
digitalWrite(ledEstado, HIGH); //Pone led Estado pin 13 a nivel alto
}
else { // Si no se da las condiciones anteriores pone led Estado a nivel bajo
digitalWrite(ledEstado, LOW);
lcd.setCursor(9,1);
lcd.print("OK "); // Aparece en pantalla OK
}
}
}
y este otro el codigo que empece a modificar para implementarlo a mi codigo, pero me extraña que tenga que poner yo todos los numeros de la cuenta atras como en este codigo, y luego no se como hacer que empiece la cuenta atras justo cuando salta algun Pir..
// Se inicializan las constantes (variables cuyo valor no cambiara durante la ejecución del programa) y se le asignan los números de pin.
const int buzzerPin = 9;
const int ledPin = 13;
void setup(){
// Se asignan los pines.
pinMode(ledPin, OUTPUT);
pinMode(buzzerPin, OUTPUT);
// Se ajusta la salida de datos del puerto serie a 9600 baudios.
Serial.begin(9600);
};
void loop(){
// Se inicializa un array de tipo char (texto/string) con los valores que se mostraran por el puerto serie.
// El asterisco aun no tengo claro que función tiene, pero sin él da error la compilación.
char* cuentaAtras[] = {"Sirena!", "1", "2", "3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26"};
// Se inicia un bucle que va marcha atrás de modo que a cada vuelta obtenemos que i vale: 3, 2, 1 y 0.
for ( int i=26; i>=0; i-- ){
// Se imprime en pantalla el valor del array que corresponda a la vuelta del for.
Serial.println(cuentaAtras*);*
- // Además, cuando el valor del array contenga la palabra "Despegue!" se encenderá el ledPin y a continuación el buzzerPin con sus tiempos correspondientes.*
_ if ( cuentaAtras == "Despegue!" ){_
* digitalWrite(ledPin, HIGH);*
* delay(800);*
* digitalWrite(buzzerPin, HIGH);*
* digitalWrite(ledPin, LOW);*
* delay(200);*
* digitalWrite(buzzerPin, LOW);*
* }*
* else{*
* delay(1000);*
* }*
* }*
}[/quote]
Saludos y perdon por ser tan ceporro 