Cuenta atras para alarma Nuevo PROBLEMA

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.

asi es como lo puse anteriormente, pero claro son muchas lineas:

// 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 :cold_sweat: