Buen dia
Soy nuevo el foro.
Mi problema es que al cambiar de case se quede en el case 2 o simplemente no hace nada quería saber si me pueden decir si mi programa esta bien o que modificación necesita.
La finalidad del programa es para un proyecto de una banda transportadora que pare cuando pase por un sensor ultrasonico.
#include <Servo.h>
Servo servoMotor;
long dis;
long tiem;
int led1 = 11;
int botonState = 0;
int relay = 6;
int relay2= 7;
void setup()
{
Serial.begin(9600);
servoMotor.attach(12);
pinMode(relay, OUTPUT); // Configurar relay como salida o OUTPUT
pinMode(relay2, OUTPUT); // Configurar relay 2 como salida o OUTPUT
pinMode(10, OUTPUT); //salida del pulso generado por el sensor ultrasónico ECHO
pinMode(9, INPUT);//entrada del pulso generado por el sensor ultrasónico TRIGGER
pinMode(22, OUTPUT); //salida del pulso generado por el sensor ultrasónico 2 TRIGGER
pinMode(23, INPUT);//entrada del pulso generado por el sensor ultrasónico 2 ECHO
pinMode(11, INPUT);//Alarma de la distancia(encenderá el led)
pinMode(2, OUTPUT); //verde
pinMode(3, OUTPUT); //amarillo
pinMode(4, OUTPUT); //rojo
pinMode(5, OUTPUT); //azul
pinMode(8, INPUT_PULLUP); //Boton
}
void loop()
{
if (digitalRead(8) == 0)
{
// el operador % significa modulo
botonState = (botonState + 1) % 4;
delay(100);
}
switch (botonState) {
case 0:
digitalWrite(5, HIGH);
break;
case 1:
digitalWrite(10, LOW); //recibimiento del pulso.
delayMicroseconds(5);
digitalWrite(10, HIGH);//envió del pulso.
delayMicroseconds(10);
tiem = pulseIn(9, HIGH); //fórmula para medir el pulso entrante.
dis = long(0.017 * tiem); //fórmula para calcular la distancia del sensor ultrasónico.
if (dis > 10) { //comparativo para la alarma se ingresa la distancia en la que encenderá o apagara.
digitalWrite(11, LOW);
digitalWrite(2, LOW);
}
else
{
digitalWrite(11, HIGH);
digitalWrite(2, HIGH);
servoMotor.write(0);
// Esperamos 3 segundo
delay(3000);
// Desplazamos a la posición 90º
servoMotor.write(90);
// Esperamos 1 segundo
delay(3000);
}
Serial.println("LA DISTANCIA MEDIDA ES:");
Serial.println(dis);
Serial.println("cm");
delay(500);
break;
case 2:
digitalWrite(22, LOW); //recibimiento del pulso.
delayMicroseconds(5);
digitalWrite(22, HIGH);//envió del pulso.
delayMicroseconds(10);
tiem = pulseIn(23, HIGH); //fórmula para medir el pulso entrante.
dis = long(0.017 * tiem); //fórmula para calcular la distancia del sensor ultrasónico.
if (dis > 10) { //comparativo para la alarma se ingresa la distancia en la que encenderá o apagara.
digitalWrite(11, LOW);
digitalWrite(3, LOW);
digitalWrite(relay, HIGH); // envia señal alta al relay
Serial.println("Relay accionado");
}
else
{
digitalWrite(11, HIGH);
digitalWrite(3, HIGH);
digitalWrite(relay, LOW); // envia señal alta al relay
Serial.println("Relay accionado");
servoMotor.write(0);
// Esperamos 3 segundo
(3000);
// Desplazamos a la posición 90º
servoMotor.write(90);
// Esperamos 1 segundo
delay(3000);
}
Serial.println("LA DISTANCIA MEDIDA ES:");
Serial.println(dis);
Serial.println("cm");
delay(500);
break;
case 3:
digitalWrite(10, LOW); //recibimiento del pulso.
delayMicroseconds(5);
digitalWrite(10, HIGH);//envió del pulso.
delayMicroseconds(10);
tiem = pulseIn(9, HIGH); //fórmula para medir el pulso entrante.
dis = long(0.017 * tiem); //fórmula para calcular la distancia del sensor ultrasónico.
if (dis > 10) { //comparativo para la alarma se ingresa la distancia en la que encenderá o apagara.
digitalWrite(11, LOW);
digitalWrite(4, LOW);
digitalWrite(relay, HIGH); // envia señal alta al relay
Serial.println("Relay accionado");
}
else
{
digitalWrite(11, HIGH);
digitalWrite(4, HIGH);
digitalWrite(relay, LOW); // envia señal alta al relay
Serial.println("Relay accionado");
servoMotor.write(0);
// Esperamos 3 segundo
delay(3000);
// Desplazamos a la posición 90º
servoMotor.write(90);
// Esperamos 1 segundo
delay(3000);
// Desplazamos a la posición 180º
servoMotor.write(180);
// Esperamos 1 segundo
delay(3000);
}
Serial.println("LA DISTANCIA MEDIDA ES:");
Serial.println(dis);
Serial.println("cm");
delay(500);
break;
}
}