ERIZO SÓNICO

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