//Programa para controlar 2 motores con control de velocidad y giro con un L293
const int sensor1= 2;
const int sensor2= 4;
int callbutton1 = 7; // switch
int motor1Pin1 = 10; // Motor 1 adelante
int motor1Pin2 = 9; // Motor 1 atras
int speedPin1 = 4; // Motor 1 aceleracion
int motor2Pin1 = 5; // Motor 2 adelante
int motor2Pin2 = 6; // Motor 2 atras
int sensor1sense = 0; // variable para leer el estado de los sensores de planta
int sensor2sense = 0;
int boton1 = 0; // variable para leer el estado de los pulsadores para los pisos
int callelevator2 = 0; // variable para leer el estado de los pulsadores para los pisos// variable para leer el estado de los sensores de planta
void setup() {
pinMode(floor1, INPUT);
pinMode(floor2, INPUT);
Serial.begin (9600);
//configuracion de pines
//pinMode(switchPin2, INPUT); //no usado
// Control Motor 1
pinMode(motor1Pin1, OUTPUT);
pinMode(motor1Pin2, OUTPUT);
pinMode(speedPin1, OUTPUT);
//Control Motor 2
pinMode(motor2Pin1, OUTPUT);
pinMode(motor2Pin2, OUTPUT);
pinMode(speedPin2, OUTPUT);
// comprobacion de reseteo, si el led parpadea solo 3 veces, todo esta bien
// si vuelve a parpadear, significa que ha hecho un reset, revisar conexiones
// por si hubiera un corto
}
void loop()
{
callelevator1 = digitalRead(callbutton1);
floor1sense = digitalRead(floor1);
floor2sense = digitalRead(floor2);
//Si el switch no esta pulsado, gira en una direccion, si no en la contraria
if (callelevator1 == HIGH) {
delay(200);// software de rebote del botón
while(callelevator1 == HIGH)
{
callelevator1 = digitalRead(callbutton1);// comprobar el valor de nuevo el botón
delay(10);// mantener funcionando sin problemas
}// esperar a la liberación del botón para continuar
delay(1000);
floor1function();
funcionparar();// ir a la función de la planta 1 del ascensor
funcionDEF();
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, LOW);
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
}
delay(10);
}
void funcionparar()
{
if(floor2sense != HIGH) // Comprobar el sensor de proximidad del primer piso para ver si el ascensor está allí
{// si el ascensor no está allí lo llaman
while( floor2sense==LOW) //compruebe que la proximidad de la primera planta es baja
// el motor comienza y se detiene cuando la proximidad piso apropiado dar la señal
{
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, LOW);
digitalWrite(motor2Pin1, HIGH);
digitalWrite(motor2Pin2, LOW);
delay(300);// algun retardo para mantener funcionando la rutina sin problemas
}
}
}
void funcionDEF()
{
if(floor2sense != HIGH) // Comprobar el sensor de proximidad del primer piso para ver si el ascensor está allí
{// si el ascensor no está allí lo llaman
while( floor2sense==LOW) //compruebe que la proximidad de la primera planta es baja
// el motor comienza y se detiene cuando la proximidad piso apropiado dar la señal
{
digitalWrite(motor2Pin1, LOW);
digitalWrite(motor2Pin2, LOW);
delay(300);// algun retardo para mantener funcionando la rutina sin problemas
}
}
}
void floor1function()
{
if(floor1sense != HIGH) // Comprobar el sensor de proximidad del primer piso para ver si el ascensor está allí
{// si el ascensor no está allí lo llaman
while( floor1sense==LOW) //compruebe que la proximidad de la primera planta es baja
// el motor comienza y se detiene cuando la proximidad piso apropiado dar la señal
{
digitalWrite(motor1Pin1, HIGH);
digitalWrite(motor1Pin2, LOW);
;// manejar el ascensor
floor1sense = digitalRead(floor1);
delay(300);// algun retardo para mantener funcionando la rutina sin problemas
}
}
else if(floor1sense != LOW) // Comprobar el sensor de proximidad del primer piso para ver si el ascensor está allí
{// si el ascensor no está allí lo llaman
while( floor1sense==HIGH) //compruebe que la proximidad de la primera planta es baja
// el motor comienza y se detiene cuando la proximidad piso apropiado dar la señal
{
digitalWrite(motor1Pin1, LOW);
digitalWrite(motor1Pin2, HIGH);
;// manejar el ascensor
floor1sense = digitalRead(floor1);
delay(300);// algun retardo para mantener funcionando la rutina sin problemas
}
}
}