- Portada
- Ensamblaje mecánico
-
Montaje eléctrico y programación
-
Introducción al Montaje Electrónico
-
Resistencias y Ejemplos de cálculo
-
La protoboard y los LEDs
-
Motores DC
-
Puente en H
-
Actividad 1: Uso de los motores
-
El pulsador
-
Actividad 2: Uso de los motores con pulsadores
-
El Zumbador
-
Actividad 3: Uso del zumbador y el servomotor
-
El Servomotor
-
Actividad 4: El ascensor (básico)
-
Introducción a funciones
-
Las funciones
-
Actividad 5: El ascensor (con funciones)
-
- Para terminar
Actividad 5: El ascensor (con funciones)
Actividad 5: El ascensor con funciones

Esta actividad va a consistir en desarrollar todo el código hecho en la actividad anterior pero simplificando el código.
Para ello se usarán las funciones.
Pista 1: Función para control de LEDs
void LED_ON(bool led_1, bool led_2, bool led_3){
...
}
Pista 2: Función para control del motor DC
void Girar_motores(bool giro, int velocidad){
digitalWrite(Gir1, giro);
digitalWrite(Gir2, !giro);
analogWrite(vel, velocidad);
}
Pista 3: Ejemplo de uso de función para motor DC
...
Girar_motores(0, 0);
...
Girar_motores(0, 0);
...
Solución código C++
// Se declaran las librerias que se van a utilizar en la practica
#include <Servo.h>
// Se definen los pines que se van a utilizar
#define BA1 13
#define BA2 12
#define BA3 3
#define vel 9
#define Gir1 10
#define Gir2 11
#define Led1 4
#define Led2 7
#define Led3 8
#define Zumbador 6
#define servo 5
Servo servoMotor;
int Planta = 1;
int Configurar = 1;
void LED_ON(bool led_1, bool led_2, bool led_3){
digitalWrite(Led1,led_1);
digitalWrite(Led2,led_2);
digitalWrite(Led3,led_3);
}
void Sonar_zumbador(int veces, int frecuencia){
for(int i = 1; i <= veces ; i++){
digitalWrite(Zumbador,HIGH);
delay(frecuencia);
digitalWrite(Zumbador,LOW);
if(i == veces){
// la ultima vez no hay delay
}else{
delay(frecuencia);
}
}
}
void Girar_motores(bool giro, int velocidad){
if(velocidad>255){
velocidad = 255;
}
digitalWrite(Gir1, giro);
digitalWrite(Gir2, !giro);
analogWrite(vel, velocidad);
}
void setup() {
// Se configuran los pines como entradas
pinMode(BA1,INPUT);
pinMode(BA2,INPUT);
pinMode(BA3,INPUT);
// Se configuran los pines como salidas
pinMode(vel,OUTPUT);
pinMode(Gir1,OUTPUT);
pinMode(Gir2,OUTPUT);
pinMode(Zumbador,OUTPUT);
pinMode(Led1,OUTPUT);
pinMode(Led2,OUTPUT);
pinMode(Led3,OUTPUT);
Serial.begin(9600);
servoMotor.attach(servo);
servoMotor.write(180);
// Se apagan todas las salidas
LED_ON(0, 0, 0);
digitalWrite(Zumbador,LOW);
Girar_motores(0, 0); // Parar motores
}
void loop() {
/*
Se añade un pequeño apartado para configurar el offset de la altura del ascensor
y corregir las desviaciones provocadas por diferentes cargas y/o tensiones de alimentacion
*/
if (Configurar == 1){
//El pulsador de la Planta 3 sube el ascensor
if(digitalRead(BA3)==1){
Girar_motores(1, 255);
}
//El pulsador de la Planta 1 baja el ascensor
if(digitalRead(BA1)==1){
Girar_motores(0, 255);
}
//Si no pulsamos nigún pulsador el ascensor se para
if(digitalRead(BA1) == 0 && digitalRead(BA3) == 0){
Girar_motores(0, 0);
}
// Si pulsamos el boton central se sale del modo de configuracion
if(digitalRead(BA2) == 1){
// Esperamos a que se deje de pulsar el boton
while (digitalRead(BA2) == 1){}
Sonar_zumbador(2, 100);
Configurar = 0;
}
}
// Entramos en el modo de funcionamiento normal
if (Configurar == 0){
// Si estamos en la primera planta
if (Planta == 1){
// Si no se pulsa el boton de ninguna otra planta
if(digitalRead(BA2) == 0 && digitalRead(BA3) == 0){
LED_ON(0, 0, 1); // Encender led de la planta 1
Girar_motores(0, 0); // No mover motores
delay(350);
}
// Si se pulsa el boton de planta 2
if(digitalRead(BA2)==1){
while(digitalRead(BA2)==1){} // Esperar a que se deje de pulsar el boton 2
LED_ON(0, 0, 0); // Apagar todos los leds
Girar_motores(1, 255); // Encender el motor DC
Sonar_zumbador(2, 330); // Hacer sonido con el zumbador
Girar_motores(0, 0); // Parar motores
Planta = 2; // Nueva posicicion del ascensor
}
// Si se pulsa el boton de planta 3
else if(digitalRead(BA3)==1){
while(digitalRead(BA3)==1){} // Esperar a que se deje de pulsar el boton 3
LED_ON(0, 0, 0); // Apagar todos los leds
Girar_motores(1, 255); // Encender el motor DC
Sonar_zumbador(3, 430); // Hacer sonido con el zumbador
Girar_motores(0, 0); // Parar motores
Planta = 3; // Nueva posicicion del ascensor
}
}
// Si estamos en la segunda planta
if (Planta == 2){
// Si no se pulsa el boton de ninguna otra planta
if(digitalRead(BA1) == 0 && digitalRead(BA3) == 0){
LED_ON(0, 1, 0); // Encender led de la planta 2
Girar_motores(0, 0); // No mover motores
servoMotor.write(90); // Se abre la barrera
delay(250);
}
// Si se pulsa el boton de planta 1
if(digitalRead(BA1)==1){
while(digitalRead(BA1)==1){} // Esperar a que se deje de pulsar el boton 1
delay(100);
servoMotor.write(180); // Bajar la barrera del servo
delay(100);
LED_ON(0, 0, 0); // Apagar todos los leds
Girar_motores(0, 255); // Encender el motor DC
Sonar_zumbador(3, 240); // Hacer sonido con el zumbador
Girar_motores(0, 0); // Parar motores
Planta = 1; // Nueva posicicion del ascensor
}
// Si se pulsa el boton de planta 3
else if(digitalRead(BA3)==1){
while(digitalRead(BA3)==1){} // Esperar a que se deje de pulsar el boton 3
delay(100);
servoMotor.write(180); // Bajar la barrera del servo
delay(100);
LED_ON(0, 0, 0); // Apagar todos los leds
Girar_motores(1, 255); // Encender el motor DC
Sonar_zumbador(2, 330); // Hacer sonido con el zumbador
Girar_motores(0, 0); // Parar motores
Planta = 3; // Nueva posicicion del ascensor
}
}
if (Planta == 3){
// Si no se pulsa el boton de ninguna otra planta
if(digitalRead(BA2) == 0 && digitalRead(BA3) == 0){
LED_ON(1, 0, 0); // Encender led de la planta 3
Girar_motores(0, 0); // No mover motores
delay(250);
}
// Si se pulsa el boton de planta 1
if(digitalRead(BA1)==1){
while(digitalRead(BA1)==1){} // Esperar a que se deje de pulsar el boton 1
LED_ON(0, 0, 0); // Apagar todos los leds
Girar_motores(0, 255); // Encender el motor DC
Sonar_zumbador(5, 270); // Hacer sonido con el zumbador
Girar_motores(0, 0); // Parar motores
Planta = 1; // Nueva posicicion del ascensor
}
// Si se pulsa el boton de planta 2
else if(digitalRead(BA2)==1){
while(digitalRead(BA2)==1){} // Esperar a que se deje de pulsar el boton 2
LED_ON(0, 0, 0); // Apagar todos los leds
Girar_motores(0, 255); // Encender el motor DC
Sonar_zumbador(3, 230); // Hacer sonido con el zumbador
Girar_motores(0, 0); // Parar motores
Planta = 2; // Nueva posicion del ascensor
}
}
}
}
| Vistas | |
|---|---|
| 2 | Número de vistas |
| 2 | Vistas de miembros |
| 0 | Vistas públicas |
| Acciones | |
|---|---|
| 0 | Gustos |
| 0 | No me gusta |
| 0 | Comentarios |
Compartir por correo
Por favor iniciar sesión para compartir esto webpage por correo.