Go Down

Topic: Problema con automatización en brazo robotico (Read 258 times) previous topic - next topic

Balotox

Hola buenas noches
Estoy haciendo un proyecto de brazo robotico con 6 servos en el que pulso un switch para activar una función automática, esto funciona casi bien el problema es que el servo de la garra es el único que no hace la instrucción correctamente, en vez de que el servo se mueva para cerrarse se abre cada vez mas.
Aquí esta el código, espero y me puedan ayudar.
Gracias.

Code: [Select]

#include <Servo.h>

Servo myservo1;

Servo myservo2;

Servo myservo3;

Servo myservo4;

Servo myservo5;

Servo myservo6; //el servomotor de la garra

int potpin1=0;

int potpin2=1;

int potpin3=2;

int potpin4=3;

int potpin5=4;

int potpin6=5;

int val1=0;

int val2=0;

int val3=0;

int val4=0;

int val5=0;

int val6=0;

int pulsador=8;

void setup()
{
myservo1.attach(3);
myservo2.attach(5);
myservo3.attach(6);
myservo4.attach(9);
myservo5.attach(10);
myservo6.attach(11);
pinMode(pulsador, INPUT);
}

void loop() {
  if (digitalRead(pulsador)==HIGH)
   {
  for (int i = 50; i <= 110; i++)
  {
    myservo2.write(i);
    delay(50);
  }

  for (int i = 1; i <= 10; i++)
  {
    myservo6.write(i);
    delay(25);
  }
   
  for (int i = 110; i > 50; i--)
  {
    myservo2.write(i);
    delay(50);
  }

    for (int i = 0; i <= 90; i++)
  {
    myservo1.write(i);
    delay(25);
  }
 
  for (int i = 50; i <= 110; i++)
  {
    myservo2.write(i);
    delay(50);
  }

    for (int i = 10; i > 1; i--)
  {
    myservo6.write(i);
    delay(25);
  }

    for (int i = 110; i > 50; i--)
  {
    myservo2.write(i);
    delay(50);
  }

  for (int i = 90; i > 0; i--)
  {
    myservo1.write(i);
    delay(25);
  } 
   }
     else
val1 = analogRead(potpin1);

val1 = map(val1, 3, 1023, 0, 176);

myservo1.write(val1);

delay(25);

val2 = analogRead(potpin2);

val2 = map(val2, 3, 1023, 0, 176);

myservo2.write(val2);

delay(25);

val3 = analogRead(potpin3);

val3 = map(val3, 3, 1023, 0, 175);

myservo3.write(val3);

delay(25);

val4 = analogRead(potpin4);

val4 = map(val4, 3, 1023, 0, 175);

myservo4.write(val4);

delay(25);

val5 = analogRead(potpin5);

val5 = map(val5, 3, 1023, 0, 175);

myservo5.write(val5);

delay(25);

val6 = analogRead(potpin6);

val6 = map(val6, 0, 1023, 0, 175);

myservo6.write(val6);

delay(25);
}

surbyte

Mas alla de varias cosas para conversar, que pasa en el else?

Tu else solo ejecutará
Code: [Select]
else
val1 = analogRead(potpin1);


esa es la idea?

Balotox

Mas alla de varias cosas para conversar, que pasa en el else?

Tu else solo ejecutará
Code: [Select]
else
val1 = analogRead(potpin1);


esa es la idea?
El else me sirve para controlar los servos del brazo con potenciometros

surbyte

#3
Dec 13, 2018, 08:05 pm Last Edit: Dec 13, 2018, 08:07 pm by surbyte
No Sr. El else esta mal empleado

El else solo esta actuando con una instrucción tal como te expliqué y no has comprendido.

solo esta diciendo que si tu digitalRead(pulsador) no es HIGH haga

Code: [Select]
val1 = analogRead(potpin1);

y todo lo demas se ejecuta SIEMPRE.

Ahora si quieres que haga una cosa o la otra entoces debería ser asi

Code: [Select]
    else {
val1 = analogRead(potpin1);
val1 = map(val1, 3, 1023, 0, 176);
myservo1.write(val1);
delay(25);
val2 = analogRead(potpin2);
val2 = map(val2, 3, 1023, 0, 176);
myservo2.write(val2);
delay(25);
val3 = analogRead(potpin3);
val3 = map(val3, 3, 1023, 0, 175);
myservo3.write(val3);
delay(25);
val4 = analogRead(potpin4);
val4 = map(val4, 3, 1023, 0, 175);
myservo4.write(val4);
delay(25);
val5 = analogRead(potpin5);
val5 = map(val5, 3, 1023, 0, 175);
myservo5.write(val5);
delay(25);
val6 = analogRead(potpin6);
val6 = map(val6, 0, 1023, 0, 175);
myservo6.write(val6);
delay(25);
}

Go Up