// Controlling a servo position using a potentiometer (variable resistor)
// by Michal Rinott <http://people.interaction-ivrea.it/m.rinott>
// Modificado por Augusto y Jon Mikel para controlar tres servos mediante potenciómetros conectados a los pines analógicos 0,
// 1 y 2, y leer en los pines analógicos 3,4 y 5 el valor de posición de los servos mediante resistencias variables //
// acopladas a sus ejes.
//TAREA:
// si el valor de la RV es cercano a 0, ordenar al servo que se pare hasta que el valor del potenciómetro sea 90 o
// mayor (avance en dirección contraria a 0)
// si el valor de la RV es cercano a 180, ordenar al servo que se pare hasta que el valor del potenciómetro sea 90 o
// menor (avance en dirección contraria a 180)
#include <Servo.h> // incluye la librería servo
Servo myservo1; // crea el objeto myservo1 para controlar el primer servo
Servo myservo2; // crea el objeto myservo2 para controlar el segundo servo
Servo myservo3; // crea el objeto myservo3 para controlar el tercer servo
int potpin1 = 0; // crea pin analógico para conectar el potenciómetro 1 en el pin 0
int potpin2 = 1; // crea pin analógico para conectar el potenciómetro 2 en el pin 1
int potpin3 = 2; // crea pin analógico para conectar el potenciómetro 3 en el pin 2
int val1; // variable 1 para leer en valor desde el pin analógico 0 del potenciómetro 1
int val2; // variable 2 para leer en valor desde el pin analógico 1 del potenciómetro 2
int val3; // variable 3 para leer en valor desde el pin analógico 2 del potenciómetro 3
int ledPin =13; //activa pin 13 para un led de control
void setup()
{
myservo1.attach(9); // vincula el servo 1 al pin PWM 9
myservo2.attach(10); // vincula el servo 2 al pin PWM 10
myservo3.attach(11); // vincula el servo 3 al pin PWM 11
Serial.begin(9600); //abre el puerto serie
}
void loop()
{
// lee las variables analógicas:
int analogValue1 = analogRead(3); //en el pin analógico 3 sensor posición 1
val1 = analogRead(potpin1=0); // lee el valor del potenciómetro 1 e el pin analógico 0 (valor entre 0 y 1023)
val1 = map(val1, 0, 1023, 0, 179); // lo escala para usarlo con el servo 1 (valor entre 0 y 180)
if((analogValue1 >600 && val1 >90) || (analogValue1 <80 && val1 <90))// si el valor de la RV es mayor que 500 y el del POT
{ // mayor que 90º, o el valor de la RV es menor que 100
myservo1.detach(); // y el valor del POT menor de 90º, entonces apagar el
//pinMode( 9, INPUT) ; // servo (detach)
digitalWrite(13,LOW);
delay(15); // apaga el led en el pin 13
}
else // de lo contrario,
{
myservo1.attach(9); // vincula el servo 1 al pin PWM 9 // encender el servo
delay(15);
myservo1.write(val1); // define la posición del servo 1 acorde con el valor escalado
digitalWrite(13,HIGH); // activa el led en el pin 13
}
delay(15); //retardo de 15 milisegundos
int analogValue2 = analogRead(4); //en el pin analógico 3 sensor posición 1
val2 = analogRead(potpin2=1); // lee el valor del potenciómetro 1 e el pin analógico 0 (valor entre 0 y 1023)
val2 = map(val2, 0, 1023, 0, 179); // lo escala para usarlo con el servo 1 (valor entre 0 y 180)
if((analogValue2 >600 && val2 >90) || (analogValue2 <80 && val2 <90))// si el valor de la RV es mayor que 500 y el del POT
{ // mayor que 90º, o el valor de la RV es menor que 100
myservo2.detach(); // y el valor del POT menor de 90º, entonces apagar el
//pinMode( 9, INPUT) ; // servo (detach)
digitalWrite(13,LOW);
delay(15); // apaga el led en el pin 13
}
else // de lo contrario,
{
myservo2.attach(10); // vincula el servo 1 al pin PWM 9 // encender el servo
delay(15);
myservo2.write(val2); // define la posición del servo 1 acorde con el valor escalado
digitalWrite(13,HIGH); // activa el led en el pin 13
}
delay(15);
//en el pin analógico 3 sensor posición 1
val3 = analogRead(potpin3=2); // lee el valor del potenciómetro 3 (flex) e el pin analógico 2 (valor entre 0 y 1023)
val3 = map(val3, 100, 130, 0, 179); // lo escala para usar flex sensor con el servo 3 (valor entre 0 y 180)
myservo3.write(val3);
delay(15);
Serial.println(analogValue1); // imprime el valor analógico pot 1
Serial.println(analogValue2); // imprime el valor analógico pot 2
Serial.println(val3); // imprime el valor analógico pot 3
// wait 10 milliseconds for the analog-to-digital converter
// to settle after the last reading:
delay(10); // retardo de 15 milisegundos (waits for the servo to get there)
}