Go Down

Topic: ayuda con mi programa de arduino!! (Read 458 times) previous topic - next topic

elvis_jagger

Hola, tengo unas dudas con el programa arduino, y necesito ayuda para poder terminarlo..
Mi objetivo es controlar 5 servomotores con un botón cada uno.

solo he logrado mover un servomotor con un botón.
aquí esta el código para que le den una checada..


#include <Servo.h>

const int servoPin = 3; //Pin del servo 1
const int buttonPin = 2; //Pin del Boton 1

int buttonState = 0; //Variable para leer el estado del pulsador
int directionState = 0; //Variable para leer la dirección del servo 1

Servo myservo; //Crear el objeto servo para controlar el servo

int pos = 0; //Variable para almacenar la posición del servo

void setup(){
myservo.attach(3); //Conectar servo al pin 3
pinMode(buttonPin, INPUT); //Iniciar pin del boton como entrada
}

void loop(){
//lee el estado del valor del boton
buttonState = digitalRead(buttonPin);

if (directionState == 0){
//boton presionado
if(buttonState == HIGH) {
directionState = 1; //la direccion del servo es a la derecha

//va desde 0 grados a 180 grados en pasos de 1 grado
for(pos = 0; pos < 180; pos=pos+1)
{
myservo.write(pos); //Dice al servo que valla a la posicion de la variable ¨pos¨
delay(15); // espera 15ms para que el servo llegue a su posición
}
}
} else if (directionState == 1) {
// boton presionado
if (buttonState == HIGH) {
directionState = 0; // la dirección del servo es a la izquierda

// va de 180 grados a 0 grados en pasos de 1 grado
for(pos = 180; pos>=1; pos=pos-1)

{
myservo.write(pos); //dice al servo que valla a la posición de la variable ¨pos¨
delay(15); //Espera 15ms para que el servo llegue a su posición
}
}
}
}


Marcial

Aun que nunca he jugado con servos, prueba algo así

Code: [Select]
#include <Servo.h>

const int servoPin[5] = {3,5,7,9,11};       //Pin del servo
const int buttonPin[5] = {2,4,6,8,10};      //Pin del Boton

int buttonState[5] = {0,0,0,0,0};           //Variable para leer el estado del pulsador
int directionState[5] = {0,0,0,0,0};        //Variable para leer la dirección del servo

Servo myservo[5];                           //Crear el objeto servo para controlar el servo

int pos[5] = {0,0,0,0,0};                   //Variable para almacenar la posición del servo

void setup()
{
  for (int i=0; i < 5; i++)
  {
    myservo[i].attach(servoPin[i]);         //Conectar servo al pin
    pinMode(buttonPin[i], INPUT);           //Iniciar pin del boton como entrada
  }
}

void loop()
{
  for (int i=0; i < 5; i++)
  {
    buttonState[i] = digitalRead(buttonPin[i]);    //lee el estado del valor del boton
    if (directionState[i] == 0)
    {
      if(buttonState[i] == HIGH)                   //boton presionado
      {
        directionState[i] = 1;                     //la direccion del servo es a la derecha
        for(pos[i] = 0; pos[i] < 180; pos[i]++)    //va desde 0 grados a 180 grados en pasos de 1 grado
        {
          myservo[i].write(pos[i]);                //Dice al servo que valla a la posicion de la variable ¨pos¨
          delay(15);                               // espera 15ms para que el servo llegue a su posición
        }
      }
    }
    else if (directionState[i] == 1)
    {     
      if (buttonState[i] == HIGH)                 // boton presionado
      {
        directionState[i] = 0;                    // la dirección del servo es a la izquierda
        for(pos[i] = 180; pos[i]>=1; pos[i]--)    // va de 180 grados a 0 grados en pasos de 1 grado
        {
          myservo[i].write(pos[i]);               //dice al servo que valla a la posición de la variable ¨pos¨
          delay(15);                              //Espera 15ms para que el servo llegue a su posición
        }
      }
    }
  }
}

JohnnyDeauville

Te pego un código tal cual que he utilizado para mover un servo (funcionando)

Code: [Select]


#include <Servo.h>                  // Servo

Servo dosificador;                  // Servo
byte SERVOS =  9;              // Servo, creo recordar que el pin utilizado era importante
                                                    // el uso de Servo.h inutiliza PWM en los pines 9 y 10... que por algo será
                                                    // echa un vistazo en http://arduino.cc/en/Reference/Servo

#define SERVO_EMPUJA          70
#define SERVO_RETIRA           0
#define SERVO_CICLO           15
#define SERVO_PAUSA         3975

dentro de la función donde se activan los servos...
void activa_servo() {

              dosificador.attach( SERVOS );   // Servo
      for( pos = SERVO_RETIRA; pos < SERVO_EMPUJA; pos++ ) {
        dosificador.write( pos );
        delay( CICLO_SERVO );
      }
      delay( SERVO_PAUSA );
      for( pos = SERVO_EMPUJA; pos > SERVO_RETIRA; pos-- ) {
        dosificador.write( pos );
        delay( CICLO_SERVO );
      }
      dosificador.detach();

}

Go Up