#include <IRremote.h> // Añadimos la libreria necesaria para poder usar los diferentes comandos
// para poder controlar el "control remoto".
#include <Servo.h> // Añadimos la libreria necesaria para poder usar los diferentes comandos
// para poder controlar el "servomotor".
#include <RTClib.h> // Añadimos la libreria necesaria para poder usar los diferentes comandos
// para poder controlar el "reloj de tiempo real".
int led = 13; // Declaramos una variable tipo integer con el nombre "led" y le indicamos el pin que le
// corresponde es el "13". Esta variable la usaremos para controlar el led.
Servo servopract; // Declaramos la variable "Servo" para poder controlarlo mas adelante.
RTC_DS1307 rtc; // Declaramos la variable "RTC_DS1307" para poder controlarlo mas adelante.
char diassemana[7][12] = {"Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado"};
// Creamos una variable de tipo caracter llamada "diassemana" que hara de matriz y almacenara en cada
// slot de su memoria, un dia de la semana diferente.
#define PIN_RECEIVER 2 // Definimos con la funcion #define (Funcion que almacenara un valor y este solo
// se usara cuando el codigo lo pida y no consumira subprocesos) a la cual llamaremos "PIN_RECEIVER" y
// le indicaremos que se encuentra conectada al pin digital "2".
IRrecv receiver(PIN_RECEIVER); // Usando la libreria del "IRremote" colocaremos la variable a la cual le hemos
// indicado aanteriormente en el "define"
void setup() // Establecemos una orden la cual queremos que se ejecuta inmediatamente se inicie el
// programa.
{
Serial.begin(9600); // Esta instrucción le indica a la placa Arduino que inicie comunicación con el
// ordenador con una velocidad de comunicación serial de 9600 bits por segundo.
pinMode (led, OUTPUT); // Indica que el puerto de nuestra placa arduino a el que hemos llamado
// anteriormente “led” es un dispositivo que deje pasar el voltaje que recibe para transformarlo en luz.
receiver.enableIRIn();
Serial.println("ACTIVA EL SISTEMA. PULSA EL BOTON ROJO"); // Esta orden mostrara por el monitor serie
// una sentencia cada vez que se inicie el sistema.
if (! rtc.begin()) { // Con esta sentencia indicaremos que si por alguna casual no se recoge información
// que provenga del RTC conectado o directamnete no se encuentre, efectue las siguientes ordenes.
Serial.println("No se encuentra informacion del RTC"); // Se nos mostrara por pantalla un mensaje de error.
Serial.flush(); // Esta orden borra el buffer almacenado en el serial.
abort(); // En esta orden se abortara el proceso de el RTC.
}
}
void loop() // Establecemos una orden que repetirá infinitamente el código el cual le pongamos dentro.
{
if (receiver.decode()) { // Con esta sentencia indicaremos que si se recive algun tipo de dato proveniente
// del control remoto, se reproduzac los siguientes procesos.
translateIR(); // Con esta orden, redirigimos a una sentencia "void" que usaremos mas adelante y le
// introduciremos las ordenes que ser ejecutaran al pulsar cada boton correspondiente.
receiver.resume(); // Con esta orden esperaremos a que se recoja el siguiente valor para que se repita
// void loop.
}
}
void translateIR() // Esta orden esta enlazada con el void loop y se ejecutara dentro del if anterior.
{
switch (receiver.decodedIRData.command) { // La orden "switch" junto a el "case" y "break", son un
// grupo de sentencias muy parecidas a la orden "if" y "else". Estas nos permiten al igual que los if,
// poner una condicion que cuando se cumpla, ejecute una serie de ordenes. En el caso del "Switch",
// podemos empezar acompañandola con lo que seria la referencia a seguir (variable que va cambiando)
// para las condiciones o casos (case) que utilizaremos a continuacion.
case 162: // El "case" contiene la condicion que va a determinar a partir de la variable (numero que
// determina que tecla se esta pulsando) usada como referencia, si se tiene que ejecutar este caso o
//se tiene que ejutar cualquier otro que hayamos configurado.
Serial.println ("ON"); // Mostraremos por pantalla que el sistema se ha encendido.
digitalWrite (led, HIGH); // Encenderemos el led para indicar que el sistema se encuentra encendido.
servopract.attach(3); // Activamos el servomotor que se encuentra conectado en el pin "3" de la placa
// arduino.
break; // El "break" se usa para señalar que el conjunto de ordenes que queremos ejecutar en
// el "case" abierto se ha acabado, y que lo que sigue es parte de otro "case" o el final de
// "switch".
case 226: // El "case" contiene la condicion que va a determinar a partir de la variable (numero que
// determina que tecla se esta pulsando) usada como referencia, si se tiene que ejecutar este caso o
//se tiene que ejutar cualquier otro que hayamos configurado.
digitalWrite (led, LOW); // Apagaremos el led para indicar que el sistema se ha apagado correctamente
servopract.detach(); // Desconectaremos el servomotor para indicar que el sistema se ha apagado
// corectamente.
Serial.println("Desconexión del sistema efectuada correctamente"); // Mostraremos por el monitor serie los
// mensajes correspondientes a el boton pulsado.
Serial.println("................................................"); // Mostraremos por el monitor serie los
// mensajes correspondientes a el boton pulsado.
Serial.println("Si quiere volver a encender el sistema, PULSE EL BOTON ROJO"); // Mostraremos por el
// monitor serie los mensajes correspondientes a el boton pulsado.
break; // El "break" se usa para señalar que el conjunto de ordenes que queremos ejecutar en
// el "case" abierto se ha acabado, y que lo que sigue es parte de otro "case" o el final de
// "switch"
case 2: // El "case" contiene la condicion que va a determinar a partir de la variable (numero que
// determina que tecla se esta pulsando) usada como referencia, si se tiene que ejecutar este caso o
//se tiene que ejutar cualquier otro que hayamos configurado.
servopract.write(0); // Con esta orden, haremos que al pulsar el boton, el servomotor se mueva a la
// izquierda
break; // El "break" se usa para señalar que el conjunto de ordenes que queremos ejecutar en
// el "case" abierto se ha acabado, y que lo que sigue es parte de otro "case" o el final de
// "switch"
case 168: // El "case" contiene la condicion que va a determinar a partir de la variable (numero que
// determina que tecla se esta pulsando) usada como referencia, si se tiene que ejecutar este caso o
//se tiene que ejutar cualquier otro que hayamos configurado.
servopract.write(180); // Con esta orden, haremos que al pulsar el boton, el servomotor se mueva a la
// derecha
delay(1000); // Con esta orden, el servomotor tardara 1 segumndo en volver a moverse.
servopract.write(0); // Con esta orden, haremos que al pulsar el boton, el servomotor se mueva a la
// izquierda
delay(1000); // Con esta orden, el servomotor tardara 1 segumndo en volver a moverse.
servopract.write(180); // Con esta orden, haremos que al pulsar el boton, el servomotor se mueva a la
// derecha
delay(1000); // Con esta orden, el servomotor tardara 1 segumndo en volver a moverse.
servopract.write(0); // Con esta orden, haremos que al pulsar el boton, el servomotor se mueva a la
// izquierda
break; // El "break" se usa para señalar que el conjunto de ordenes que queremos ejecutar en
// el "case" abierto se ha acabado, y que lo que sigue es parte de otro "case" o el final de
// "switch"
case 152: // El "case" contiene la condicion que va a determinar a partir de la variable (numero que
// determina que tecla se esta pulsando) usada como referencia, si se tiene que ejecutar este caso o
//se tiene que ejutar cualquier otro que hayamos configurado.
servopract.write(180); // Con esta orden, haremos que al pulsar el boton, el servomotor se mueva a la
// derecha
break; // El "break" se usa para señalar que el conjunto de ordenes que queremos ejecutar en
// el "case" abierto se ha acabado, y que lo que sigue es parte de otro "case" o el final de
// "switch"
case 176: // El "case" contiene la condicion que va a determinar a partir de la variable (numero que
// determina que tecla se esta pulsando) usada como referencia, si se tiene que ejecutar este caso o
//se tiene que ejutar cualquier otro que hayamos configurado.
servopract.detach(); // Desconectaremos el servomotor para indicar que este se ha apagado
// corectamente.
Serial.println("Desconexión del servomotor efectuada correctamente"); // Mostraremos por el monitor serie
// los mensajes correspondientes a el boton pulsado.
Serial.println("...................................................."); // Mostraremos por el monitor serie
// los mensajes correspondientes a el boton pulsado.
Serial.println("Si quiere activar el servomotor, PULSE EL BOTON ROJO"); // Mostraremos por el monitor serie
// los mensajes correspondientes a el boton pulsado.
Serial.println("...................................................."); // Mostraremos por el monitor serie
// los mensajes correspondientes a el boton pulsado.
break; // El "break" se usa para señalar que el conjunto de ordenes que queremos ejecutar en
// el "case" abierto se ha acabado, y que lo que sigue es parte de otro "case" o el final de
// "switch"
case 34: // El "case" contiene la condicion que va a determinar a partir de la variable (numero que
// determina que tecla se esta pulsando) usada como referencia, si se tiene que ejecutar este caso o
//se tiene que ejutar cualquier otro que hayamos configurado.
DateTime now = rtc.now(); // Recpoje la hora actual del dispositivo conectado.
Serial.print("Fecha y hora actual: "); // Mostraremos por el monitor serie una sentencia para, a
// continuacion se muestre el dia, hora, minutos y segundos actuales.
Serial.print(diassemana[now.dayOfTheWeek()]); // En esta orden, se mostrara por el monitor serie
// el dia (Expresado en letras) basandose en la matriz utilizado anteriormente.
Serial.print(' '); // Dejaremos un espacio en blanco
Serial.print(now.day(), DEC); // En esta orden, se mostrara por el monitor serie el dia actual en
// formato decimal.
Serial.print('/'); // Colocaremos una barra para poder poner la fecha correspondiente.
Serial.print(now.month(), DEC); // En esta orden, se mostrara por el monitor serie el mes actual en
// formato decimal.
Serial.print('/'); // Colocaremos una barra para poder poner la fecha correspondiente.
Serial.print(now.year(), DEC); // En esta orden, se mostrara por el monitor serie el año actual en
// formato decimal.
Serial.print(' '); // Dejaremos un espacio en blanco
Serial.print(now.hour(), DEC); // En esta orden, se mostrara por el monitor serie la hora actual en
// formato decimal.
Serial.print(':'); // Colocaremos dos puntos para poder poner la hora correspondiente.
Serial.print(now.minute(), DEC); // En esta orden, se mostrara por el monitor serie el minuto actual en
// formato decimal.
Serial.print(':'); // Colocaremos dos puntos para poder poner la hora correspondiente.
Serial.print(now.second(), DEC); // En esta orden, se mostrara por el monitor serie el segundo actual en
// formato decimal.
Serial.println(); // Haremos un salto de linea para cuando se introduzca la siguiente sentencia.
break; // El "break" se usa para señalar que el conjunto de ordenes que queremos ejecutar en
// el "case" abierto se ha acabado, y que lo que sigue es parte de otro "case" o el final de
// "switch"
}
}