[ Foro de C++ ]
Hola tengo un problema con un codigo el cual necesito prender un mismo led, segun dos variables distintas, dos tipos de delay.
//Si creen que no se puede hacer haganmelo saber.
Ejemplo: que un led encienda a una hora 5segundos y a otra 3segundos.
Este es mi codigo:
#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,6,5,4,3,2); // inicializa la interfaz I2C del LCD 16x2
RTC_DS1307 RTC; // inicializa el modulo RTC
int r_diaSemana; // almacena el resultado del dia de la semana calculado
const int timbre = 8; // Pin 7 encargado de activar el timbre, se conecta al Rele
int minuto;
int hora;
int segundo;
int tiempo_timbre=5000; // Tiempo continuo que dura el timbre sonando, en milisegundos 5000 = 5 segundos
//////////////////////////////// Horario 1 /////////////////////////
// Hora en la que suena el timbre escrito h1=Hora, m1=Minutos, s1=Segundos
// Cuando no se programa ninguna hora se debe dejar escrito el numero 99
// se pueden programar 16 timbres por cada horario, _c1 indica que es el horario 1
int h1_c1=7; int m1_c1=25; int s1_c1=0;
int h2_c1=8; int m2_c1=05; int s2_c1=0;
int h3_c1=8; int m3_c1=45; int s3_c1=0;
int h4_c1=9; int m4_c1=40; int s4_c1=0;
int h5_c1=10; int m5_c1=20; int s5_c1=0;
int h6_c1=11; int m6_c1=15; int s6_c1=0;
int h7_c1=11; int m7_c1=55; int s7_c1=0;
int h8_c1=12; int m8_c1=35; int s8_c1=0;
int h9_c1=13; int m9_c1=45; int s9_c1=0;
int h10_c1=14; int m10_c1=44; int s10_c1=0;
int h11_c1=15; int m11_c1=05; int s11_c1=0;
int h12_c1=15; int m12_c1=28; int s12_c1=0;
int h13_c1=16; int m13_c1=35; int s13_c1=0;
int h14_c1=17; int m14_c1=58; int s14_c1=0;
int h15_c1=18; int m15_c1=05; int s15_c1=0;
int h16_c1=99; int m16_c1=0; int s16_c1=0;
//////////////////////////////// Horario 2 /////////////////////////
int h1_c2=99; int m1_c2=0; int s1_c2=0;
int h2_c2=99; int m2_c2=0; int s2_c2=0;
int h3_c2=99; int m3_c2=0; int s3_c2=0;
int h4_c2=99; int m4_c2=0; int s4_c2=0;
int h5_c2=99; int m5_c2=0; int s5_c2=0;
int h6_c2=99; int m6_c2=0; int s6_c2=0;
int h7_c2=99; int m7_c2=0; int s7_c2=0;
int h8_c2=99; int m8_c2=0; int s8_c2=0;
int h9_c2=99; int m9_c2=0; int s9_c2=0;
int h10_c2=99; int m10_c2=0; int s10_c2=0;
int h11_c2=99; int m11_c2=0; int s11_c2=0;
int h12_c2=99; int m12_c2=0; int s12_c2=0;
int h13_c2=99; int m13_c2=0; int s13_c2=0;
int h14_c2=99; int m14_c2=0; int s14_c2=0;
int h15_c2=99; int m15_c2=0; int s15_c2=0;
int h16_c2=99; int m16_c2=0; int s16_c2=0;
//////////////////////////////// Horario 3 /////////////////////////
int h1_c3=99; int m1_c3=0; int s1_c3=0;
int h2_c3=99; int m2_c3=0; int s2_c3=0;
int h3_c3=99; int m3_c3=0; int s3_c3=0;
int h4_c3=99; int m4_c3=0; int s4_c3=0;
int h5_c3=99; int m5_c3=0; int s5_c3=0;
int h6_c3=99; int m6_c3=0; int s6_c3=0;
int h7_c3=99; int m7_c3=0; int s7_c3=0;
int h8_c3=99; int m8_c3=0; int s8_c3=0;
int h9_c3=99; int m9_c3=0; int s9_c3=0;
int h10_c3=99; int m10_c3=0; int s10_c3=0;
int h11_c3=99; int m11_c3=0; int s11_c3=0;
int h12_c3=99; int m12_c3=0; int s12_c3=0;
int h13_c3=99; int m13_c3=0; int s13_c3=0;
int h14_c3=99; int m14_c3=0; int s14_c3=0;
int h15_c3=99; int m15_c3=0; int s15_c3=0;
int h16_c3=99; int m16_c3=0; int s16_c3=0;
////////////////////////////////// Void Setup() ///////////
void setup () {
pinMode(timbre, OUTPUT); // Configura como salida el pin 7
Wire.begin();
RTC.begin(); // Inicia la comunicaci¢n con el RTC
// RTC.adjust(DateTime(__DATE__, __TIME__)); // Lee la fecha y hora del PC (Solo en la primera carga)
// el anterior se usa solo en la configuracion inicial luego se pone como comentario
lcd.begin(16, 2); // y se vuelve a cargar el programa sin esa linea.
Serial.begin(9600); // Establece la velocidad de datos del puerto serie a 9600
lcd.clear(); // Borra el LCD
}
////////////////////////////////// Void loop() ///////////
void loop(){
DateTime now = RTC.now(); // Obtiene la fecha y hora del RTC
int contacto1 = analogRead(A0); //Lee el valor de los contactos para escoger el horario
int contacto2 = analogRead(A1);
int contacto3 = analogRead(A2);
int contacto4 = analogRead(A3); // contacto que activa o desactiva los fines de semana
Serial.print(now.year(), DEC); // A§o
Serial.print('/');
Serial.print(now.month(), DEC); // Mes
Serial.print('/');
Serial.print(now.day(), DEC); // Dia
Serial.print(' ');
Serial.print(now.hour(), DEC); // Horas
Serial.print(':');
Serial.print(now.minute(), DEC); // Minutos
Serial.print(':');
Serial.print(now.second(), DEC); // Segundos
Serial.println();
lcd.setCursor(0,0);
lcd.print("D:");
lcd.print(now.year(), DEC);
lcd.print("/");
lcd.print(now.month(), DEC);
lcd.print("/");
lcd.print(now.day(), DEC);
lcd.print(" ");
lcd.setCursor(0,1);
lcd.print("T: ");
lcd.print(now.hour(), DEC);
lcd.print(":");
lcd.print(now.minute(), DEC);
lcd.print(":");
lcd.print(now.second(), DEC);
segundo=now.second();
minuto=now.minute();
hora=now.hour();
if (contacto4 <= 1000){ // si el contacto 4 esta desactivado, despliega -e- entre semana funciona el timbre
}
else { // si el contacto 4 esta activado, despliega -F- el Fin de semana funciona el timbre
}
int r_diaSemana=dia_de_semana(); // llama a la funcion que calcula el dia de la semana y lo almacena en r_diaSemana
if ((r_diaSemana == 6 || r_diaSemana == 0)&&(contacto4 <= 1000)){ // si el contacto4 de Fin de semana esta apagado y es fin de semana no hace nada
}
else {
if (contacto1 >= 1000) // Si el contacto 1 esta activo (Horario 1)
horario_1(); // llama a la funcion que activa el horario 1
if (contacto2 >= 1000) // Si el contacto 2 esta activo (Horario 2)
horario_2(); // llama a la funcion que activa el horario2
if (contacto3 >= 1000) // Si el contacto 1 esta activo (Horario 3)
horario_3(); // llama a la funcion que activa el horario 3
}
digitalWrite(timbre, LOW); // apaga el timbre
delay(500); // La informaci¢n se actualiza cada 1/2 seg.
lcd.setCursor(9,0); // Borra parte de la pantalla del LCD
lcd.print(" ");
lcd.setCursor(8,1);
lcd.print(" ");
} //////////////////////////////// Fin del void loop(), inician las Funciones/////////////////////////
/////////////////////////////// Funcion que activa el Timbre //////////////////////////////////
void activar_timbre(){
digitalWrite(timbre, HIGH);
lcd.setCursor(0,0);
lcd.print("Timbre ON ");
Serial.println("Timbre Activo");
delay(tiempo_timbre);
}
/////////////////////////////// Calcula el dia de la Semana //////////////////////////////////
int dia_de_semana(){
// Encuentar el dia de la semana de una fecha
int n_dia;
int r_dia;
int n_mes;
int t_mes;
int n_anno;
int d_anno;
int t_siglo=6;
DateTime now = RTC.now(); //fecha y hora del RTC
lcd.setCursor(13,1);
n_anno=(now.year()-2000);
d_anno=n_anno/4;
n_dia=now.day();
n_mes=now.month();
switch (n_mes) {
case 1:
t_mes=0;
break;
case 2:
t_mes=3;
break;
case 3:
t_mes=3;
break;
case 4:
t_mes=6;
break;
case 5:
t_mes=1;
break;
case 6:
t_mes=4;
break;
case 7:
t_mes=6;
break;
case 8:
t_mes=2;
break;
case 9:
t_mes=5;
break;
case 10:
t_mes=0;
break;
case 11:
t_mes=3;
break;
case 12:
t_mes=5;
break;
default:
t_mes=t_mes;
break;
}
r_dia=n_dia+t_mes+n_anno+d_anno+t_siglo;
r_dia = r_dia % 7;
switch (r_dia) {
case 1:
lcd.print("Lun");
Serial.print(" Lun ");
break;
case 2:
lcd.print("Mar");
Serial.println(" Mar ");
break;
case 3:
lcd.print("Mie");
Serial.print(" Mie ");
break;
case 4:
lcd.print("Jue");
Serial.print(" Jue ");
break;
case 5:
lcd.print("Vie");
Serial.print(" Vie ");
break;
case 6:
lcd.print("Sab");
Serial.print(" Sab ");
break;
case 0:
lcd.print("Dom");
Serial.print(" Dom ");
break;
default:
lcd.print("---");
Serial.print(" ---");
break;
}
return r_dia;
}
/////////////////////Condicional del Horario 1 //////////////////////////////////
void horario_1(){
lcd.setCursor(13,0);
lcd.print("1");
Serial.print("Horario_1 ");
if ((hora==h1_c1) && (minuto==m1_c1) && (segundo==s1_c1)) activar_timbre();
if ((hora==h2_c1) && (minuto==m2_c1) && (segundo==s2_c1)) activar_timbre();
if ((hora==h3_c1) && (minuto==m3_c1) && (segundo==s3_c1)) activar_timbre();
if ((hora==h4_c1) && (minuto==m4_c1) && (segundo==s4_c1)) activar_timbre();
if ((hora==h5_c1) && (minuto==m5_c1) && (segundo==s5_c1)) activar_timbre();
if ((hora==h6_c1) && (minuto==m6_c1) && (segundo==s6_c1)) activar_timbre();
if ((hora==h7_c1) && (minuto==m7_c1) && (segundo==s7_c1)) activar_timbre();
if ((hora==h8_c1) && (minuto==m8_c1) && (segundo==s8_c1)) activar_timbre();
if ((hora==h9_c1) && (minuto==m9_c1) && (segundo==s9_c1)) activar_timbre();
if ((hora==h10_c1) && (minuto==m10_c1) && (segundo==s10_c1)) activar_timbre();
if ((hora==h11_c1) && (minuto==m11_c1) && (segundo==s11_c1)) activar_timbre();
if ((hora==h12_c1) && (minuto==m12_c1) && (segundo==s12_c1)) activar_timbre();
if ((hora==h13_c1) && (minuto==m13_c1) && (segundo==s13_c1)) activar_timbre();
if ((hora==h14_c1) && (minuto==m14_c1) && (segundo==s14_c1)) activar_timbre();
if ((hora==h15_c1) && (minuto==m15_c1) && (segundo==s15_c1)) activar_timbre();
if ((hora==h16_c1) && (minuto==m16_c1) && (segundo==s16_c1)) activar_timbre();
}
////////////////////Condicional del Horario 2 //////////////////////////////////
void horario_2(){
lcd.setCursor(14,0);
lcd.print("2");
Serial.print("Horario_2 ");
if ((hora==h1_c2) && (minuto==m1_c2) && (segundo==s1_c2)) activar_timbre();
if ((hora==h2_c2) && (minuto==m2_c2) && (segundo==s2_c2)) activar_timbre();
if ((hora==h3_c2) && (minuto==m3_c2) && (segundo==s3_c2)) activar_timbre();
if ((hora==h4_c2) && (minuto==m4_c2) && (segundo==s4_c2)) activar_timbre();
if ((hora==h5_c2) && (minuto==m5_c2) && (segundo==s5_c2)) activar_timbre();
if ((hora==h6_c2) && (minuto==m6_c2) && (segundo==s6_c2)) activar_timbre();
if ((hora==h7_c2) && (minuto==m7_c2) && (segundo==s7_c2)) activar_timbre();
if ((hora==h8_c2) && (minuto==m8_c2) && (segundo==s8_c2)) activar_timbre();
if ((hora==h9_c2) && (minuto==m9_c2) && (segundo==s9_c2)) activar_timbre();
if ((hora==h10_c2) && (minuto==m10_c2) && (segundo==s10_c2)) activar_timbre();
if ((hora==h11_c2) && (minuto==m11_c2) && (segundo==s11_c2)) activar_timbre();
if ((hora==h12_c2) && (minuto==m12_c2) && (segundo==s12_c2)) activar_timbre();
if ((hora==h13_c2) && (minuto==m13_c2) && (segundo==s13_c2)) activar_timbre();
if ((hora==h14_c2) && (minuto==m14_c2) && (segundo==s14_c2)) activar_timbre();
if ((hora==h15_c2) && (minuto==m15_c2) && (segundo==s15_c2)) activar_timbre();
if ((hora==h16_c2) && (minuto==m16_c2) && (segundo==s16_c2)) activar_timbre();
}
//////////////////////Condicional del Horario 3 //////////////////////////////////
void horario_3(){
lcd.setCursor(15,0);
lcd.print("3");
Serial.print("Horario_3 ");
if ((hora==h1_c3) && (minuto==m1_c3) && (segundo==s1_c3)) activar_timbre();
if ((hora==h2_c3) && (minuto==m2_c3) && (segundo==s2_c3)) activar_timbre();
if ((hora==h3_c3) && (minuto==m3_c3) && (segundo==s3_c3)) activar_timbre();
if ((hora==h4_c3) && (minuto==m4_c3) && (segundo==s4_c3)) activar_timbre();
if ((hora==h5_c3) && (minuto==m5_c3) && (segundo==s5_c3)) activar_timbre();
if ((hora==h6_c3) && (minuto==m6_c3) && (segundo==s6_c3)) activar_timbre();
if ((hora==h7_c3) && (minuto==m7_c3) && (segundo==s7_c3)) activar_timbre();
if ((hora==h8_c3) && (minuto==m8_c3) && (segundo==s8_c3)) activar_timbre();
if ((hora==h9_c3) && (minuto==m9_c3) && (segundo==s9_c3)) activar_timbre();
if ((hora==h10_c3) && (minuto==m10_c3) && (segundo==s10_c3)) activar_timbre();
if ((hora==h11_c3) && (minuto==m11_c3) && (segundo==s11_c3)) activar_timbre();
if ((hora==h12_c3) && (minuto==m12_c3) && (segundo==s12_c3)) activar_timbre();
if ((hora==h13_c3) && (minuto==m13_c3) && (segundo==s13_c3)) activar_timbre();
if ((hora==h14_c3) && (minuto==m14_c3) && (segundo==s14_c3)) activar_timbre();
if ((hora==h15_c3) && (minuto==m15_c3) && (segundo==s15_c3)) activar_timbre();
if ((hora==h16_c3) && (minuto==m16_c3) && (segundo==s16_c3)) activar_timbre();
}
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)