Control de Puerta con Servo y LEDs en Arduino: Código Comentado y Explicado
Control de una puerta con servo y LEDs en Arduino
A continuación se muestra el código completo para controlar una puerta mediante un servo motor, varios LEDs y un potenciómetro, utilizando comandos enviados por el puerto serie.
Código fuente
#include <Servo.h>
Servo puerta;
int ledAzul = 6;
int ledAmarillo = 11;
int ledRojo = 5;
int ledVerde = 3;
int pot = A0;
int intensidad;
int espera;
int angulo;
char letra;
void setup()
{
puerta.attach(9);
pinMode(ledAzul, OUTPUT);
pinMode(ledAmarillo, OUTPUT);
pinMode(ledRojo, OUTPUT);
pinMode(ledVerde, OUTPUT);
pinMode(pot, INPUT);
Serial.begin(9600);
}
void loop()
{
int valor = analogRead(pot);
intensidad = valor * 255 / 1023;
espera = valor * 1400 / 1023 + 100;
angulo = valor * 90 / 1023;
analogWrite(ledVerde, intensidad);
Serial.print("intensidad = ");
Serial.println(intensidad);
if (Serial.available() > 0)
{
letra = Serial.read();
}
if (letra == 'P' || letra == 'p')
{
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, LOW);
digitalWrite(ledAzul, HIGH);
puerta.write(90);
}
if (letra == 'C' || letra == 'c')
{
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledAzul, LOW);
puerta.write(0);
}
if (letra == 'A' || letra == 'a')
{
digitalWrite(ledAzul, LOW);
digitalWrite(ledRojo, HIGH);
digitalWrite(ledAmarillo, LOW);
delay(300);
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, HIGH);
delay(300);
}
if (letra == 'S' || letra == 's')
{
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledAzul, LOW);
}
if (letra == 'F' || letra == 'f')
{
digitalWrite(ledRojo, HIGH);
digitalWrite(ledAmarillo, HIGH);
digitalWrite(ledAzul, HIGH);
analogWrite(ledVerde, intensidad);
puerta.write(angulo);
delay(espera);
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledAzul, LOW);
analogWrite(ledVerde, 0);
puerta.write(0);
delay(espera);
}
if (letra == 'T' || letra == 't')
{
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledAzul, LOW);
analogWrite(ledVerde, 0);
puerta.write(0);
}
}