Hola.
Lo que quiero hacer es que al presionar un pulsador y usando switch case, me haga el cambio de rutina (una para controlar el brazo con Joysticks y la otra se mueva de forma "automática").
Mi problema es que el brazo se queda en la rutina "automata ()" y no deja seleccionar la que sigue, es como si dejara de comunicarse con la placa Arduino hasta que termina la rutina automata () y solo deja un espacio de unos mili segundos en el que puede mandar información al monitor serial y recibir la señal del pulsador siendo que en la rutina de los Joysticks puedo presionar el botón y cambia sin problemas a "default".
De verdad no sé qué es lo que está mal con el programa, estoy usando una placa Arduino UNO y alimento los servos independientemente (con su respectivo común).
Ojalá puedan resolver mi duda.
#include <Servo.h>
const int servo1 = 5;
const int servo2 = 6;
const int servo3 = 7;
const int servo4 = 9;
const int joy1 = A0;
const int joy2 = A1;
const int joy3 = A2;
const int joy4 = A3;
int servoVal;
int bstate = 0;
Servo myservo1;
Servo myservo2;
Servo myservo3;
Servo myservo4;
void setup() {
pinMode(13, INPUT_PULLUP);
myservo1.attach(servo1);
myservo2.attach(servo2);
myservo3.attach(servo3);
myservo4.attach(servo4);
Serial.begin(9600);
}
void loop() {
Serial.println(bstate);
if (digitalRead (13) == 0) {
bstate = (bstate + 1) % 3;
delay(5000);
}
switch (bstate) {
case 1:
automata();
break;
case 2:
servoVal = analogRead(joy1);
servoVal = map(servoVal, 0, 1023, 0, 180);
myservo1.write(servoVal);
servoVal = analogRead(joy2);
servoVal = map(servoVal, 0, 1023, 0, 180);
myservo2.write(servoVal);
servoVal = analogRead(joy3);
servoVal = map(servoVal, 0, 1023, 0, 180);
myservo3.write(servoVal);
servoVal = analogRead(joy4);
servoVal = map(servoVal, 0, 1023, 0, 180);
myservo4.write(servoVal);
break;
default:
myservo4.write(0);
myservo3.write(160);
myservo2.write(50);
myservo1.write(90);
}
}
void automata(){
myservo1.write(10);
delay(1000);
myservo2.write(120);
myservo3.write(90);
delay(1000);
myservo4.write(30);
delay(1000);
myservo2.write(90);
myservo3.write(150);
delay(1000);
myservo1.write(160);
delay(1000);
myservo4.write(0);
delay(1000);
}