Buenas!
Soy nuevo en el foro y estoy teniendo algún problema para realizar un proyecto con un servomotor y una señal de entrada externa.
El proyecto en sí consiste en mover un servomotor de 0 a una posición dada por un potenciómetro cuando la señal de entrada es un 0 y de la posición dada por el potenciómetro a cero cuando la señal de entrada es un 1.
Para ello he programado una máquina de estados con dos estados donde al completar el movimiento sea de 0 a "x" o de "x" a 0 este se pare. Es decir, si entra un 1 cuando ya ha llegado a la posición "x" que no siga girando.
El problema está en que al conectar la señal la placa no detecta ni 1 ni 0 y por lo tanto no realiza ningún movimiento excepto el de
La señal haría las veces de interruptor.
Adjunto el código que he hecho hasta la fecha.
#include <Servo.h>
Servo motor;
byte valor_entrada = 0;
int entrada = 5;
int pos = 0;
const int poten = A0;
int giro ;
// declaración de estados del motor
enum estado_pinza
{
m_cerrado,
m_abierto
};
// e_motor: estado en el que está el motor.
estado_pinza e_motor = m_abierto;
void setup() {
motor.attach (9);
motor.write (pos);
pinMode (entrada, INPUT);
e_motor = m_abierto;
}
void apertura () {
for (pos = giro; pos > 0; pos -=1) {
motor.write (pos);
delay (15);
}
e_motor = m_abierto;
}
void cierre () {
for (pos = 0; pos <= giro; pos +=1) {
motor.write (pos);
delay (15);
}
e_motor = m_cerrado;
}
void loop() {
delay (550);
valor_entrada = digitalRead (entrada);
giro = analogRead (poten);
giro = map (giro, 0, 1023, 0, 180);
switch (e_motor) {
case m_cerrado:
if (valor_entrada == LOW){
apertura ();}
else ;{}
break;
case m_abierto:
if (valor_entrada == HIGH){
cierre ();}
else;{}
break;
}
}
Gracias. Un saludo