Go Down

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

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
        }
      }
    }
  }
}

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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy