2.1. Rotación de las salidas digitales
/*
* Rotación de las salidas para el microPLC - arduino
*
* Descripción: Rotar las salidas activando una encada momento con un tiempo de retardo
* encada movimiento de 5 segundos.
*
* Autor: Rafa Aranda
* Fecha: 13-12-2013
* Versión: 1.0
*/
// Pins de salida
#define Rele_1 6
#define Rele_2 7
#define Rele_3 8
#define Rele_4 9
// Pins de entrada (están ordenados de forma decreciente por necesidades del PCB)
#define In_1 5
#define In_2 4
#define In_3 3
#define In_4 2
// Librerías
// Funciones prototipo
boolean GetInput(byte);
// Variables globales
/* setup
* Tareas iniciales de preparación
*/
void setup(){
// Establecer los pins de salida de los reles
pinMode(Rele_1, OUTPUT);
pinMode(Rele_2, OUTPUT);
pinMode(Rele_3, OUTPUT);
pinMode(Rele_4, OUTPUT);
// Establecer los pins de entradas digitales optoacopladas
pinMode(In_1, INPUT);
pinMode(In_2, INPUT);
pinMode(In_3, INPUT);
pinMode(In_4, INPUT);
// Preparar las variables
digitalWrite(Rele_4, LOW);
digitalWrite(Rele_1, LOW);
digitalWrite(Rele_2, LOW);
digitalWrite(Rele_3, LOW);
}
/* loop
* Programa principal
*/
void loop() {
// Activar los relés de forma consecutiva
digitalWrite(Rele_4, LOW);
digitalWrite(Rele_1, HIGH);
delay(5000);
digitalWrite(Rele_1, LOW);
digitalWrite(Rele_2, HIGH);
delay(5000);
digitalWrite(Rele_2, LOW);
digitalWrite(Rele_3, HIGH);
delay(5000);
digitalWrite(Rele_3, LOW);
digitalWrite(Rele_4, HIGH);
delay(5000);
}
/* GetInput
* Lee el estado de la entrada indicada en el parámetro y retorna el valor invertido
* in: Entrada (1 a 4)
* return: estado (true, false)
*/
boolean GetInput(byte in){
boolean estado = false;
switch(in){
case 1:
if(digitalRead(In_1))estado=true;
break;
case 2:
if(digitalRead(In_2))estado=true;
break;
case 3:
if(digitalRead(In_3))estado=true;
break;
case 4:
if(digitalRead(In_4))estado=true;
break;
}
return estado;
}