Buenas, soy medio nuevo por aquí y en el mundo de Arduino. La verdad no sé demasiado y tengo una duda medio estúpida jajaja.
Cuestión que ando haciendo un ascensor para un proyecto del colegio, tengo 4 pulsadores de llamada para ir a "x" piso y también un Sensor Infrarrojo CNY70 que está dentro del ascensor para detectar los diferentes pisos.
Mi problema es que tengo el siguiente código:
//Determinamos los pines.
int PulsadorP1 = 8; // Pulsador de Llamada Piso 1.
int PulsadorP2 = 9; // Pulsador de Llamada Piso 2.
int PulsadorP3 = 10; // Pulsador de Llamada Piso 3.
int PulsadorP4 = 11; // Pulsador de Llamada Piso 4.
int SensorAsc = A0; // Sensor Detector del Ascensor.
int DisplayA = 22; // Display A.
int DisplayB = 23; // Display B.
int DisplayC = 24; // Display C.
int DisplayD = 25; // Display D.
int DisplayE = 26; // Display E.
int DisplayF = 27; // Display F.
int DisplayG = 28; // Display G.
int Motor1 = 7; // Señal Motor.
int Motor2 = 6; // Señal Motor.
int EstadoPulsador1; // Declaramos para void loop.
int EstadoPulsador2; // Declaramos para void loop.
int EstadoPulsador3; // Declaramos para void loop.
int EstadoPulsador4; // Declaramos para void loop.
int EstadoSensor; // Declaramos para void loop.
void setup() {
pinMode (PulsadorP1, INPUT);
pinMode (PulsadorP2, INPUT);
pinMode (PulsadorP3, INPUT);
pinMode (PulsadorP4, INPUT);
pinMode (SensorAsc, INPUT);
pinMode (DisplayA, OUTPUT);
pinMode (DisplayB, OUTPUT);
pinMode (DisplayC, OUTPUT);
pinMode (DisplayD, OUTPUT);
pinMode (DisplayE, OUTPUT);
pinMode (DisplayF, OUTPUT);
pinMode (DisplayG, OUTPUT);
pinMode (Motor1, OUTPUT);
pinMode (Motor2, OUTPUT);
Serial.begin(9600);
}
void loop() {
EstadoPulsador1 = digitalRead(PulsadorP1);
EstadoPulsador2 = digitalRead(PulsadorP2);
EstadoPulsador3 = digitalRead(PulsadorP3);
EstadoPulsador4 = digitalRead(PulsadorP4);
EstadoSensor = analogRead(SensorAsc);
Serial.println (EstadoSensor);
delay (50);
/*
Valores de los Pisos.
Piso 1 : 15 - 30.
Piso 2 : 39 - 55.
Piso 3 : 68 - 90.
Piso 4 : 110 - 155.
*/
// PISO 1, PULSADOR 1. PISO 1, PULSADOR 1. PISO 1, PULSADOR1.
// PISO 1, PULSADOR 1. PISO 1, PULSADOR 1. PISO 1, PULSADOR1.
// PISO 1, PULSADOR 1. PISO 1, PULSADOR 1. PISO 1, PULSADOR1.
if (EstadoPulsador1 == HIGH && EstadoSensor > 15 && EstadoSensor < 30 && EstadoPulsador2 == LOW && EstadoPulsador3 == LOW && EstadoPulsador4 == LOW) {
digitalWrite (Motor1, LOW);
digitalWrite (Motor2, LOW); // Se mantiene en el piso el ascensor, sin moverse.
digitalWrite (DisplayA, HIGH);
digitalWrite (DisplayB, LOW);
digitalWrite (DisplayC, LOW);
digitalWrite (DisplayD, HIGH);
digitalWrite (DisplayE, HIGH);
digitalWrite (DisplayF, HIGH);
digitalWrite (DisplayG, HIGH);
}
// PISO 2, PULSADOR 2. PISO 2, PULSADOR 2. PISO 2, PULSADOR 2.
// PISO 2, PULSADOR 2. PISO 2, PULSADOR 2. PISO 2, PULSADOR 2.
// PISO 2, PULSADOR 2. PISO 2, PULSADOR 2. PISO 2, PULSADOR 2.
// IDEA (Esto se me ocurrió hacer por eso lo marqué como IDEA)
if (EstadoPulsador2 == HIGH && EstadoSensor > 15 && EstadoSensor < 30 && EstadoPulsador1 == LOW && EstadoPulsador3 == LOW && EstadoPulsador4 == LOW) { // Si llamo al Piso 2 y el ascensor se encuentra en el piso 1.
while (EstadoSensor != (EstadoSensor > 32 && EstadoSensor < 55)) {
digitalWrite (Motor1, LOW);
digitalWrite (Motor2, HIGH); // Sube el ascensor.
digitalWrite (DisplayA, LOW);
digitalWrite (DisplayB, LOW);
digitalWrite (DisplayC, HIGH);
digitalWrite (DisplayD, LOW);
digitalWrite (DisplayE, LOW);
digitalWrite (DisplayF, HIGH);
digitalWrite (DisplayG, LOW); // Marca un 2 en el display.
Serial.println (EstadoSensor);
}
digitalWrite (Motor1, LOW);
digitalWrite (Motor2, LOW);
digitalWrite (DisplayA, LOW);
digitalWrite (DisplayB, LOW);
digitalWrite (DisplayC, HIGH);
digitalWrite (DisplayD, LOW);
digitalWrite (DisplayE, LOW);
digitalWrite (DisplayF, HIGH);
digitalWrite (DisplayG, LOW);
Serial.println (EstadoSensor);
}
}
Como dije anteriormente no tengo muchísima idea de esto de Arduino, pero básicamente ando viendo que estoy haciendo mal ahí.
Cuando llamo al piso 1, y el ascensor se encuentra en el piso 1 el motor no se moverá y marcará un 1 en el display. Eso me funciona de 10, pero luego cuando hice para el piso 2 es mi problema, lo que pasa es lo siguiente:
Presiono el pulsador 2 para que suba al piso 2, lo que sucede es que sube y todo, pero no se detiene en dicho piso. Me he fijado por el Monitor Serial y cuando presiono 2 automáticamente se congela y deja de marcar o otra es que marca pero siempre el mismo número y supuestamente tiene que variar, no?.
Quizás hice todo mal la programación ahí donde marque IDEA, si alguien me puede dar una mano desde ya gracias!