/*
Este código crea objetos para controlar dos LED, un LED RGB, un servo, dos botones y
dos sensores analógicos. En el `setup()`, se configuran los pines de cada objeto.
En el `loop()`, se realiza la lectura de los valores de los sensores y se encenden
los LED dependiendo de los valores leídos. También se controla el color del LED RGB
dependiendo de la pulsación de los botones y se controla la posición del servo con la
lectura del primer sensor analógico.
*/
#include <Servo.h>
class LED {
public:
int Pin;
void configurarlo(int p) {
Pin = p;
pinMode(Pin, OUTPUT);
}
void encender() {
digitalWrite(Pin, HIGH);
}
void apagar() {
digitalWrite(Pin, LOW);
}
};
class LED_RGB : public LED {
public:
int R, G, B;
void configurarlo(int r, int g, int b) {
LED::configurarlo(r);
R = r;
LED::configurarlo(g);
G = g;
LED::configurarlo(b);
B = b;
}
void encender(int color) {
switch (color) {
case 0:
digitalWrite(R, HIGH);
digitalWrite(G, LOW);
digitalWrite(B, LOW);
break;
case 1:
digitalWrite(R, LOW);
digitalWrite(G, HIGH);
digitalWrite(B, LOW);
break;
case 2:
digitalWrite(R, LOW);
digitalWrite(G, LOW);
digitalWrite(B, HIGH);
break;
default:
digitalWrite(R, LOW);
digitalWrite(G, LOW);
digitalWrite(B, LOW);
break;
}
}
};
class MOTOR {
public:
int Pin;
void configurarlo(int p) {
Pin = p;
pinMode(Pin, OUTPUT);
}
};
class SERVOMO : public MOTOR {
public:
Servo servo;
void configurarlo(int p) {
MOTOR::configurarlo(p);
servo.attach(Pin);
}
void mover(int pos) {
servo.write(pos);
}
};
class Boton {
public:
int Pin;
int EstadoAnterior;
void configurarlo(int p) {
Pin = p;
pinMode(Pin, INPUT);
EstadoAnterior = digitalRead(Pin);
}
int leer() {
int EstadoActual = digitalRead(Pin);
int Pulsacion = 0;
if (EstadoActual != EstadoAnterior) {
if (EstadoActual == LOW) {
Pulsacion = 1;
}
EstadoAnterior = EstadoActual;
}
return Pulsacion;
}
};
class SensorAnalogico {
public:
int Pin;
int Valor;
void configurarlo(int p) {
Pin = p;
pinMode(Pin, INPUT);
}
int leer() {
Valor = analogRead(Pin);
return Valor;
}
};
//Creo los objetos
LED LED1, LED2;
LED_RGB LED_RGB1;
Servo Servo1;
Boton Boton1, Boton2;
SensorAnalogico Sensor1, Sensor2;
void setup() {
LED1.configurarlo(12);
LED2.configurarlo(13);
LED_RGB1.configurarlo(9, 10, 11);
Servo1.attach(3);
Boton1.configurarlo(7);
Boton2.configurarlo(6);
Sensor1.configurarlo(A4);
Sensor2.configurarlo(A5);
Serial.begin(9600);
}
void loop() {
int valorSensor1 = Sensor1.leer();
int valorSensor2 = Sensor2.leer();
if (valorSensor1 > 512) {
LED1.encender();
} else {
LED1.apagar();
}
if (valorSensor2 > 512) {
LED2.encender();
} else {
LED2.apagar();
}
int pulsacionBoton1 = Boton1.leer();
int pulsacionBoton2 = Boton2.leer();
//Serial.println(Boton1.leer());
if (pulsacionBoton1 == 1) {
LED_RGB1.encender(0);
}
if (pulsacionBoton2 == 1) {
LED_RGB1.encender(1);
}
Servo1.write(valorSensor1 / 4);
delay(10);
}