10-06-2016, 16:00
Si te sirve, este código lo uso actualmente; no es mío, sino un copia y pega (algo modificado) de los foros de arduino.
Manejo el servo con un switch de dos posiciones. Servos tipo 9g.
Se mueven entre 86º y 94º. Pausa de 50.
Antes, con el servo en 90º (ini1=fin1=90) fijo el eje en la posición adecuada; después cambio el código y listo.
Con un arduino uno r3. Si alimentas por separado, une las masas.
Saludos.
============================================================
=== Inicio código===
/*
Probado con seis servos
En el switch(ACB), conector A a pinintX y a través de 10K ohm a +5v,
conector central C a masa 0v. y el otro conector B sin uso.
En el servo, la señal conectará también con pinservX.
(Sí. A pinsrvX llegan dos cables)
Si la alimentación de arduino y servos difiere, conectar ambas masas.
*/
#include <Servo.h> //Incluir la librería para el control de los Servos
int pausa = 50;
int ini1 =86;
int fin1 = 94;
Servo servo1; // Crea objeto servo
int pinint1 = 0; // Conector del switch, digital
int pinserv1 = 1; // Conector del servo, digital
int pressed1 = 0; // Estado inicial del switch antes de la lectura de pinint1
int ladoA1 = 0;
int ladoB1 = 0;
Servo servo2;
int pinint2 = 2;
int pinserv2 = 3;
int pressed2 = 0;
int ladoA2 = 0;
int ladoB2 = 0;
Servo servo3;
int pinint3 = 4;
int pinserv3 = 5;
int pressed3 = 0;
int ladoA3 = 0;
int ladoB3 = 0;
Servo servo4;
int pinint4 = 6;
int pinserv4 = 7;
int pressed4 = 0;
int ladoA4 = 0;
int ladoB4 = 0;
Servo servo5;
int pinint5 = 8;
int pinserv5 = 9;
int pressed5 = 0;
int ladoA5 = 0;
int ladoB5 = 0;
Servo servo6;
int pinint6 = 10;
int pinserv6 = 11;
int pressed6 = 0;
int ladoA6 = 0;
int ladoB6 = 0;
void setup()
{
servo1.attach(pinserv1);
pinMode(pinint1, INPUT);
servo2.attach(pinserv2);
pinMode(pinint2, INPUT);
servo3.attach(pinserv3);
pinMode(pinint3, INPUT);
servo4.attach(pinserv4);
pinMode(pinint4, INPUT);
servo5.attach(pinserv5);
pinMode(pinint5, INPUT);
servo6.attach(pinserv6);
pinMode(pinint6, INPUT);
}
void loop()
{
pressed1 = digitalRead(pinint1);
if(pressed1==HIGH)
{
ladoB1=0;
if(ladoA1==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo1.write(i);
delay(pausa);
}
ladoA1=1;
}
}
else
{
ladoA1=0;
if(ladoB1==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo1.write(i);
delay(pausa);
}
ladoB1=1;
}
}
pressed2 = digitalRead(pinint2);
if(pressed2==HIGH)
{
ladoB2=0;
if(ladoA2==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo2.write(i);
delay(pausa);
}
ladoA2=1;
}
}
else
{
ladoA2=0;
if(ladoB2==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo2.write(i);
delay(pausa);
}
ladoB2=1;
}
}
pressed3 = digitalRead(pinint3);
if(pressed3==HIGH)
{
ladoB3=0;
if(ladoA3==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo3.write(i);
delay(pausa);
}
ladoA3=1;
}
}
else
{
ladoA3=0;
if(ladoB3==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo3.write(i);
delay(pausa);
}
ladoB3=1;
}
}
pressed4 = digitalRead(pinint4);
if(pressed4==HIGH)
{
ladoB4=0;
if(ladoA4==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo4.write(i);
delay(pausa);
}
ladoA4=1;
}
}
else
{
ladoA4=0;
if(ladoB4==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo4.write(i);
delay(pausa);
}
ladoB4=1;
}
}
pressed5 = digitalRead(pinint5);
if(pressed5==HIGH)
{
ladoB5=0;
if(ladoA5==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo5.write(i);
delay(pausa);
}
ladoA5=1;
}
}
else
{
ladoA5=0;
if(ladoB5==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo5.write(i);
delay(pausa)
;
}
ladoB5=1;
}
}
pressed6 = digitalRead(pinint6);
if(pressed6==HIGH)
{
ladoB6=0;
if(ladoA6==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo6.write(i);
delay(pausa);
}
ladoA6=1;
}
}
else
{
ladoA6=0;
if(ladoB6==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo6.write(i);
delay(pausa);
}
ladoB6=1;
}
}
/* llave cierre loop */
}
===Fin código===
Manejo el servo con un switch de dos posiciones. Servos tipo 9g.
Se mueven entre 86º y 94º. Pausa de 50.
Antes, con el servo en 90º (ini1=fin1=90) fijo el eje en la posición adecuada; después cambio el código y listo.
Con un arduino uno r3. Si alimentas por separado, une las masas.
Saludos.
============================================================
=== Inicio código===
/*
Probado con seis servos
En el switch(ACB), conector A a pinintX y a través de 10K ohm a +5v,
conector central C a masa 0v. y el otro conector B sin uso.
En el servo, la señal conectará también con pinservX.
(Sí. A pinsrvX llegan dos cables)
Si la alimentación de arduino y servos difiere, conectar ambas masas.
*/
#include <Servo.h> //Incluir la librería para el control de los Servos
int pausa = 50;
int ini1 =86;
int fin1 = 94;
Servo servo1; // Crea objeto servo
int pinint1 = 0; // Conector del switch, digital
int pinserv1 = 1; // Conector del servo, digital
int pressed1 = 0; // Estado inicial del switch antes de la lectura de pinint1
int ladoA1 = 0;
int ladoB1 = 0;
Servo servo2;
int pinint2 = 2;
int pinserv2 = 3;
int pressed2 = 0;
int ladoA2 = 0;
int ladoB2 = 0;
Servo servo3;
int pinint3 = 4;
int pinserv3 = 5;
int pressed3 = 0;
int ladoA3 = 0;
int ladoB3 = 0;
Servo servo4;
int pinint4 = 6;
int pinserv4 = 7;
int pressed4 = 0;
int ladoA4 = 0;
int ladoB4 = 0;
Servo servo5;
int pinint5 = 8;
int pinserv5 = 9;
int pressed5 = 0;
int ladoA5 = 0;
int ladoB5 = 0;
Servo servo6;
int pinint6 = 10;
int pinserv6 = 11;
int pressed6 = 0;
int ladoA6 = 0;
int ladoB6 = 0;
void setup()
{
servo1.attach(pinserv1);
pinMode(pinint1, INPUT);
servo2.attach(pinserv2);
pinMode(pinint2, INPUT);
servo3.attach(pinserv3);
pinMode(pinint3, INPUT);
servo4.attach(pinserv4);
pinMode(pinint4, INPUT);
servo5.attach(pinserv5);
pinMode(pinint5, INPUT);
servo6.attach(pinserv6);
pinMode(pinint6, INPUT);
}
void loop()
{
pressed1 = digitalRead(pinint1);
if(pressed1==HIGH)
{
ladoB1=0;
if(ladoA1==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo1.write(i);
delay(pausa);
}
ladoA1=1;
}
}
else
{
ladoA1=0;
if(ladoB1==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo1.write(i);
delay(pausa);
}
ladoB1=1;
}
}
pressed2 = digitalRead(pinint2);
if(pressed2==HIGH)
{
ladoB2=0;
if(ladoA2==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo2.write(i);
delay(pausa);
}
ladoA2=1;
}
}
else
{
ladoA2=0;
if(ladoB2==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo2.write(i);
delay(pausa);
}
ladoB2=1;
}
}
pressed3 = digitalRead(pinint3);
if(pressed3==HIGH)
{
ladoB3=0;
if(ladoA3==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo3.write(i);
delay(pausa);
}
ladoA3=1;
}
}
else
{
ladoA3=0;
if(ladoB3==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo3.write(i);
delay(pausa);
}
ladoB3=1;
}
}
pressed4 = digitalRead(pinint4);
if(pressed4==HIGH)
{
ladoB4=0;
if(ladoA4==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo4.write(i);
delay(pausa);
}
ladoA4=1;
}
}
else
{
ladoA4=0;
if(ladoB4==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo4.write(i);
delay(pausa);
}
ladoB4=1;
}
}
pressed5 = digitalRead(pinint5);
if(pressed5==HIGH)
{
ladoB5=0;
if(ladoA5==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo5.write(i);
delay(pausa);
}
ladoA5=1;
}
}
else
{
ladoA5=0;
if(ladoB5==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo5.write(i);
delay(pausa)
;
}
ladoB5=1;
}
}
pressed6 = digitalRead(pinint6);
if(pressed6==HIGH)
{
ladoB6=0;
if(ladoA6==0)
{
for(int i=fin1 ; i>=ini1; i-=1)
{
servo6.write(i);
delay(pausa);
}
ladoA6=1;
}
}
else
{
ladoA6=0;
if(ladoB6==0)
{
for(int i=ini1 ; i<=fin1; i+=1)
{
servo6.write(i);
delay(pausa);
}
ladoB6=1;
}
}
/* llave cierre loop */
}
===Fin código===