Go Down

Topic: ¿Cómo agregar otro servomotor a mi programación que haga lo mismo? (Read 812 times) previous topic - next topic

C.Dharém

Jul 14, 2012, 06:00 pm Last Edit: Jul 14, 2012, 06:03 pm by C.Dharém Reason: 1
Hola, tengo mi programación que consiste en enviar pulsos para mover un servomotor de izquierda a derecha, ahora quiero que haga lo mismo otro servomotor pero con diferentes teclas de pulso. ¿Cómo le modifico al original?

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

Servo nazza;
int nazzaPos = 90;


void setup() {
 
 Serial.begin (9600);
 nazza.attach(10);
 nazza.write(nazzaPos);  // Colocamos el servomotor a 90° para tomarlo de 0-90 por izquierda, y 90-180 por derecha.
             
            }

void loop () {
 
 if (Serial.available () > 0) {
 
   int jul = Serial.read();
   
   
   if (jul == 'a'){     // asignamos una variable "a" para mover posiciones a derecha
     nazzaPos -= 10;
     nazza.write(nazzaPos);
   
   }
   
 if (jul == 'b'){       // asignamos una variable "b" para mover posiciones a izquierda.
   nazzaPos += 10;
  nazza.write(nazzaPos);
 }
 
 if (jul== 'h'){
 nazza.write(nazzaPos);
 }
 }
 delay (15);
}





De antemano gracias.
Polytechnic University.

Obakemono

La instrucción

Code: [Select]
Servo nazza;

Crea un objeto de la clase Servo llamado nazza que es con el que estás trabajando en tu programa.
Tienes que crear otro objeto de la clase Servo, con un nombre distinto, por ejemplo:

Code: [Select]
Servo nazzb

Inicializarlo en el setup, indicando a que pin está conectado:

Code: [Select]
nazzb.attach(pin donde esté conectado)

Y ahora ya puedes hacer que se mueva:

Code: [Select]
nazzb.write(posición a la que quieras llevar el servo)

Un saludo.


C.Dharém

Gracias, entonces es correcto dejarlo como queda asi:

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

Servo nazza;
Servo galaxia;

int nazzaPos = 90;
int galaxiaPos = 90;

void setup() {
 
  Serial.begin (9600);
  nazza.attach(10);
  galaxia.attach(9);
  nazza.write(nazzaPos);  // Colocamos el servomotor a 90° para tomarlo de 0-90 por izquierda, y 90-180 por derecha.
  galaxia.write(galaxiaPos);
             
             }

void loop () {
 
  if (Serial.available () > 0) {
   
    int jul = Serial.read();
    int san = Serial.read();
   
    if (jul == 'a'){     // asignamos una variable "a" para mover posiciones a derecha
      nazzaPos -= 10;
      nazza.write(nazzaPos);
     
    }
   
    if(san == 'w'){
   
    galaxiaPos -= 10;
    galaxia.write(galaxiaPos);
    }
   
  if (jul == 'b'){       // asignamos una variable "b" para mover posiciones a izquierda.
    nazzaPos += 10;
   nazza.write(nazzaPos);
  }
 
  if (san == 's'){
  galaxiaPos +=10;
  galaxia.write(galaxiaPos);
 
  }
 
 
  if (jul== 'h'){
  nazza.write(nazzaPos);
  }
  }
  delay (15);
}


Polytechnic University.

Obakemono

En principio no veo nada mal, así que debería funcionar, lo único cambiaría tanto if por un switch, sobre todo si usas letras distintas para cada servo.

Code: [Select]
void loop() {
 
  if (Serial.available () > 0) {
   
    int jul = Serial.read();
   
    switch(jul) {
      case 'a':
        nazzaPos -= 10;
        nazza.write(nazzaPos);
        break;
      case 'b':
        nazzaPos += 10;
        nazza.write(nazzaPos);
        break;
      case 'h':
        nazza.write(nazzaPos);
        break;
      case 'w':
        galaxiaPos -= 10;
        galaxia.write(galaxiaPos);
        break;
      case 's':
        galaxiaPos += 10;
        galaxia.write(galaxiaPos);
        break;
    }
    delay(15);
  }
}

Obakemono

Claro que si necesitas que los dos servos se muevan a la vez, entonces un switch por servo con dos solo las opciones de ese servo.

Go Up