Hola a todos.
Estoy realizando un proyecto para clase que consiste en una mano robotizada y cada dedo lo actúa un servomotor. La programación simple para que cada servomotor funcione lo tengo correcto.
El problema es que ahora me piden que le incluya 4 pulsadores para hacer como un selector de programa, los pulsadores haciendo como si fueran un código binario me permite hacer hasta 15 programas + el 0 que lo reservo para la posición inicial. Entonces lo que he pensado es hacerlo por etapas como si fuera un PLC, la etapa 0 la inicial y de aquí según la combinación de botones que pulse va a otra etapa y regresa a la 0.
Cuando tengo todo ya conectado, he probado con 5 etapas, del 1 al 4 una por dedo y el 5º dedo con los 4 botones pulsados. Esto me funcionaba bien hasta que vi que el 4º botón aunque no lo pulsara me saltaba a la etapa 4, y cuando miraba por que al desconectar los pines me hacia las acciones de la etapa 1 y 2.
Espero a ver si alguien me puede ayudar, soy bastante novato con arduino y no se por donde me equivoco, o si tienen alguna idea mejor.
Gracias de antemano.
Dejo el código y el esquema eléctrico de las conexiones.
#include <Servo.h>
//Servos
Servo servo1;
Servo servo2;
Servo servo3;
Servo servo4;
Servo servo5;
//Pulsadores
int puls1 = 2;
int puls2 = 4;
int puls3 = 7;
int puls4 = 8;
//Etapas
boolean e_0 = true, e_1 = false, e_2 = false, e_3 = false;
boolean e_4 = false, e_5 = false, e_6 = false, e_7 = false;
boolean e_8 = false, e_9 = false, e_10 = false, e_11 = false;
boolean e_12 = false, e_13 = false, e_14 = false, e_15 = false;
void setup() {
//Servos
servo1.attach(3);
servo2.attach(5);
servo3.attach(6);
servo4.attach(9);
servo5.attach(10);
//Pulsadores
pinMode(puls1, INPUT);
pinMode(puls2, INPUT);
pinMode(puls3, INPUT);
pinMode(puls4, INPUT);
}
void loop() {
//TRANSICIONES ETAPA 0
if (e_0 == true && digitalRead(puls4) == LOW && digitalRead(puls3) == LOW && digitalRead(puls2) == LOW && digitalRead(puls1) == HIGH) {
e_1 = true; e_0 = false;
}
if (e_0 == true && digitalRead(puls4) == LOW && digitalRead(puls3) == LOW && digitalRead(puls2) == HIGH && digitalRead(puls1) == LOW) {
e_2 = true; e_0 = false;
}
if (e_0 == true && digitalRead(puls4) == LOW && digitalRead(puls3) == HIGH && digitalRead(puls2) == LOW && digitalRead(puls1) == LOW) {
e_3 = true; e_0 = false;
}
if (e_0 == true && digitalRead(puls4) == HIGH && digitalRead(puls3) == LOW && digitalRead(puls2) == LOW && digitalRead(puls1) == LOW) {
e_4 = true; e_0 = false;
}
if (e_0 == true && digitalRead(puls4) == HIGH && digitalRead(puls3) == HIGH && digitalRead(puls2) == HIGH && digitalRead(puls1) == HIGH) {
e_5 = true; e_0 = false;
}
//ACCIONS ETAPAS
//ETAPA 0 - INICIAL
if (e_0 == true) {
servo1.write(0);
servo2.write(0);
servo3.write(0);
servo4.write(0);
servo5.write(0);
delay(1000);
}
//ETAPA 1
if (e_1 == true) {
servo1.write(100);
servo2.write(0);
servo3.write(0);
servo4.write(0);
servo5.write(0);
delay(2000);
e_0 = true;
e_1 = false;
}
//ETAPA 2
if (e_2 == true) {
servo1.write(0);
servo2.write(100);
servo3.write(0);
servo4.write(0);
servo5.write(0);
delay(2000);
e_0 = true;
e_2 = false;
}
//ETAPA 3
if (e_3 == true) {
servo1.write(0);
servo2.write(0);
servo3.write(100);
servo4.write(0);
servo5.write(0);
delay(2000);
e_0 = true;
e_3 = false;
}
//ETAPA 4
if (e_4 == true) {
servo1.write(0);
servo2.write(0);
servo3.write(0);
servo4.write(100);
servo5.write(0);
delay(2000);
e_0 = true;
e_4 = false;
}
//ETAPA 5
if (e_5 == true) {
servo1.write(0);
servo2.write(0);
servo3.write(0);
servo4.write(0);
servo5.write(100);
delay(2000);
e_0 = true;
e_5 = false;
}
}