3.3. Código Final

#include <Servo.h>
Servo servo1, servo2, servo3, servo4, servo5;

// ------Estos valores se pueden cambiar dependiendo de los diferentes componentes utilizados para un rendimiento correcto.
int reading;          // Se usa para almacenar el valor leído por analogRead.
int mapVal;           // Se utiliza para asignar los valores leídos por analogRead al rango del servo que mueve cada dedo.

int delay1 = 100;     // Se usa para establecer un retraso para las lecturas.
int minServo = 35;    // Valor mínimo para el movimiento del servo.
int maxServo = 180;   // Valor máximo para el movimiento del servo.
int minSFlex = 100;   // Valor mínimo para el sensor flexible pequeño.
int maxSFlex = 320;   // Valor máximo para el sensor flexible pequeño.
int minBFlex = 220;   // Valor mínimo para el sensor de flexión grande.
int maxBFlex = 520;   // Valor máximo para el sensor de flexión grande.

void setup() {
  // Conectar cada servo a una salida digital de Arduino (PWM)
  servo1.attach(6);  // Pulgar
  servo2.attach(10); // Dedo índice
  servo3.attach(9);  // Dedo corazón
  servo4.attach(11); // Dedo anular
  servo5.attach(5);  // Dedo meñique
}

void loop() {
  // ---------- Thumb Finger
  reading = analogRead(0); // Lee la entrada analógica del sensor flexible y el divisor de voltaje
  mapVal = map(reading, minSFlex, maxSFlex, minServo, maxServo); //Asigna el valor leído del flex dentro de los valores del servo
  if (mapVal < minServo) mapVal = minServo; // En caso de que el valor asignado sea menor que nuestro servoMin configurado en servoMin
  if (mapVal > maxServo) mapVal = maxServo; // En caso de que el valor asignado sea mayor que nuestro servoMax configurado en servoMax
  servo1.write(mapVal); // Establecer el servo al valor asignado
  delay(delay1); // Establece un retraso entre las lecturas para una operación correcta
 // Los demás igual

  // ---------- Index Finger
  reading = analogRead(3);
  mapVal = map(reading, minSFlex, maxSFlex, minServo, maxServo);
  if (mapVal < minServo) mapVal = minServo;
  if (mapVal > maxServo) mapVal = maxServo;
  servo2.write(mapVal);
  delay(delay1);
 
  // ---------- Middle Finger
  reading = analogRead(2);
  mapVal = map(reading, minBFlex, maxBFlex, minServo, maxServo);
  if (mapVal < minServo) mapVal = minServo;
  if (mapVal > maxServo) mapVal = maxServo;
  servo3.write(mapVal);
  delay(delay1);

  // ---------- Ring Finger
  reading = analogRead(5);
  mapVal = map(reading, minSFlex + 80, maxSFlex, minServo, maxServo);
  if (mapVal < minServo) mapVal = minServo;
  if (mapVal > maxServo) mapVal = maxServo;
  servo4.write(mapVal);
  delay(delay1);

  // ---------- Little Finger
  reading = analogRead(1);
  mapVal = map(reading, minSFlex + 80, maxSFlex, minServo, maxServo);
  if (mapVal < minServo) mapVal = minServo;
  if (mapVal > maxServo) mapVal = maxServo;
  servo5.write(mapVal);
  delay(delay1);
}

Comentarios