Se que mas de uno se va a reír, ante todo decir que es lo primero que intento con arduino, llevo varias semanas intentando controlar 8 reles, con horarios distintos con arduino y la verdad es que no me aclaro. he cogido de aquí y de allí, pero no me aclaro. al final lo mejor que he logrado es el código que ahora voy a pegar, pero aunque cuando le doy a verificar no me sale error, no funcionan, o mejor dicho se quedan todos los reles activados, ayuda por favor.
El código es el siguiente:
#include <TimeAlarms.h>
// Date and time functions using a DS3231 RTC connected via I2C and Wire lib
#include <Wire.h>
#include "RTClib.h"
RTC_DS3231 rtc;
String daysOfTheWeek[7] = { "Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado" };
String monthsNames[12] = { "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre" };
void setup() {
Serial.begin(9600);
delay(1000);
if (!rtc.begin()) {
Serial.println(F("Couldn't find RTC"));
while (1);
}
// Si se ha perdido la corriente, fijar fecha y hora
if (rtc.lostPower()) {
// Fijar a fecha y hora de compilacion
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
// Fijar a fecha y hora específica. En el ejemplo, 21 de Enero de 2016 a las 03:00:00
// rtc.adjust(DateTime(2016, 1, 21, 3, 0, 0));
}
// Configurar los pines de salida de relevadores desactivados al inicio
// recordamos que los modulos de reles se activan con un estado bajo
pinMode(OUTPUT, 6);
digitalWrite(HIGH, 6);
pinMode(OUTPUT, 7);
digitalWrite(HIGH, 7);
pinMode(OUTPUT, 8);
digitalWrite(HIGH, 8);
pinMode(OUTPUT, 9);
digitalWrite(HIGH, 9);
pinMode(OUTPUT, 10);
digitalWrite(HIGH, 10);
pinMode(OUTPUT, 11);
digitalWrite(HIGH, 11);
pinMode(OUTPUT, 12);
digitalWrite(HIGH, 12);
pinMode(OUTPUT, 13);
digitalWrite(HIGH, 13);
// Crear las alarmas y configurar las funciones correspondientes a cada una
Alarm.alarmRepeat(12, 0, 0, EventoEnciendeLuz1); // Evento a las 12:00 diario (enciende luz1)
Alarm.alarmRepeat(19, 0, 0, EventoApagaLuz1); // Evento a las 7:05 diario (apaga luz1)
Alarm.alarmRepeat(13, 0, 0, EventoEnciendeLuz2); // Evento a las 13:00 diario (enciende luz2)
Alarm.alarmRepeat(20, 0, 0, EventoApagaLuz2); // Evento a las 20:00 diario (apaga luz2)
Alarm.alarmRepeat(14, 0, 0, EventoEnciendeLuz3); // Evento a las 14:00 diario (enciende luz3)
Alarm.alarmRepeat(21, 0, 0, EventoApagaLuz3); // Evento a las 21:00 diario (apaga luz3)
Alarm.alarmRepeat(15, 0, 0, EventoEnciendeLuz4); // Evento a las 15:00 diario (enciende luz4)
Alarm.alarmRepeat(22, 0, 0, EventoApagaLuz4); // Evento a las 22:00 diario (apaga luz4)
Alarm.alarmRepeat(16, 0, 0, EventoEnciendeLuz5); // Evento a las 16:00 diario (enciende luz5)
Alarm.alarmRepeat(23, 0, 0, EventoApagaLuz5); // Evento a las 23:00 diario (apaga luz5)
Alarm.alarmRepeat(12, 0, 0, EventoEnciendeLuz6); // Evento a las 12:00 diario (enciende luz6)
Alarm.alarmRepeat(23, 0, 0, EventoApagaLuz6); // Evento a las 23:00 diario (apaga luz6)
Alarm.alarmRepeat(23, 0, 0, EventoEnciendeLuz7); // Evento a las 23:00 diario (enciende luz7)
Alarm.alarmRepeat(12, 0, 0, EventoApagaLuz7); // Evento a las 12:00 diario (apaga luz7)
Alarm.alarmRepeat(12, 0, 0, EventoEnciendeLuz8); // Evento a las 12:00 diario (enciende luz8)
Alarm.alarmRepeat(23, 0, 0, EventoApagaLuz8); // Evento a las 23:00 diario (apaga luz8)
}
void printDate(DateTime date)
{
Serial.print(date.year(), DEC);
Serial.print('/');
Serial.print(date.month(), DEC);
Serial.print('/');
Serial.print(date.day(), DEC);
Serial.print(" (");
Serial.print(daysOfTheWeek[date.dayOfTheWeek()]);
Serial.print(") ");
Serial.print(date.hour(), DEC);
Serial.print(':');
Serial.print(date.minute(), DEC);
Serial.print(':');
Serial.print(date.second(), DEC);
Serial.println();
}
void loop() {
// Obtener fecha actual y mostrar por Serial
DateTime now = rtc.now();
printDate(now);
Serial.println();
delay(1000);
// Esperar 1 segundo y procesar las Alarmas mientras tanto...
// El metodo Alarm.delay() procesa en el fondo las alarmas y llamara a las funciones indicadas
Alarm.delay(1000);
}
/**
Funcion callback que activa el relevador en el pin 1 (enciende la luz)
*/
void EventoEnciendeLuz1()
{
Serial.println("Encendiendo Luz1!!!");
digitalWrite(LOW, 6);
}
/**
Funcion callback que desactiva el relevador en el pin 1 (apaga la luz)
*/
void EventoApagaLuz1()
{
Serial.println("Apagando Luz1!!!");
digitalWrite(HIGH, 6);
}
/**
Funcion callback que activa el relevador en el pin 2 (enciende la luz)
*/
void EventoEnciendeLuz2()
{
Serial.println("Encendiendo Luz2!!!");
digitalWrite(LOW, 7);
}
/**
Funcion callback que desactiva el relevador en el pin 2 (apaga la luz)
*/
void EventoApagaLuz2()
{
Serial.println("Apagando Luz2!!!");
digitalWrite(HIGH, 7);
}
/**
Funcion callback que activa el relevador en el pin 3 (enciende la luz)
*/
void EventoEnciendeLuz3()
{
Serial.println("Encendiendo Luz3!!!");
digitalWrite(LOW, 8);
}
/**
Funcion callback que desactiva el relevador en el pin 3 (apaga la luz)
*/
void EventoApagaLuz3()
{
Serial.println("Apagando Luz3!!!");
digitalWrite(HIGH, 8);
}
/**
Funcion callback que activa el relevador en el pin 4 (enciende la luz)
*/
void EventoEnciendeLuz4()
{
Serial.println("Encendiendo Luz4!!!");
digitalWrite(LOW, 9);
}
/**
Funcion callback que desactiva el relevador en el pin 4 (apaga la luz)
*/
void EventoApagaLuz4()
{
Serial.println("Apagando Luz4!!!");
digitalWrite(HIGH, 9);
}
/**
Funcion callback que activa el relevador en el pin 5 (enciende la luz)
*/
void EventoEnciendeLuz5()
{
Serial.println("Encendiendo Luz5!!!");
digitalWrite(LOW, 10);
}
/**
Funcion callback que desactiva el relevador en el pin 5 (apaga la luz)
*/
void EventoApagaLuz5()
{
Serial.println("Apagando Luz5!!!");
digitalWrite(HIGH, 10);
}
/**
Funcion callback que activa el relevador en el pin 6 (enciende la luz)
*/
void EventoEnciendeLuz6()
{
Serial.println("Encendiendo Luz6!!!");
digitalWrite(LOW, 11);
}
/**
Funcion callback que desactiva el relevador en el pin 6 (apaga la luz)
*/
void EventoApagaLuz6()
{
Serial.println("Apagando Luz6!!!");
digitalWrite(HIGH, 11);
}
/**
Funcion callback que activa el relevador en el pin 7 (enciende la luz)
*/
void EventoEnciendeLuz7()
{
Serial.println("Encendiendo Luz7!!!");
digitalWrite(LOW, 12);
}
/**
Funcion callback que desactiva el relevador en el pin 7 (apaga la luz)
*/
void EventoApagaLuz7()
{
Serial.println("Apagando Luz7!!!");
digitalWrite(HIGH, 12);
}
/**
Funcion callback que activa el relevador en el pin 8 (enciende la luz)
*/
void EventoEnciendeLuz8()
{
Serial.println("Encendiendo Luz8!!!");
digitalWrite(LOW, 13);
}
/**
Funcion callback que desactiva el relevador en el pin 8 (apaga la luz)
*/
void EventoApagaLuz8()
{
Serial.println("Apagando Luz8!!!");
digitalWrite(HIGH, 13);
}