enviar variables análogas por bluetooth//send analogous variables by bluetooth

buenas tardes, para saber si alguien me podria ayudar con un código via bluetooth. lo que necesito es enviar cinco variables análogas de unas flexoresistencias pero no se como interpretar los valores enviados en el código receptor, pues necesito diferenciar los valores enviados y no se bien como hacerlo, pues es para una mano robotica. Lamento el código tan largo :sweat_smile:

#include <SoftwareSerial.h>
//Codigo para el emisor
int potenciometro1, potenciometro2, potenciometro3, potenciometro4, potenciometro5; //Variable para guardar el valor analogico
int pos1, pos2, pos3, pos4, pos5; //variable de posicion en grados
int tiempo=1000;// para variar el tiempo y observar en el monitor Serial
SoftwareSerial mySerial(10,11); //Pin 10 TX , Pin 11 RX connected to--> Bluetooth TX,RX
void setup() {
  //Iniciacion del puerto serial para el Bluetooth
  Serial.begin(9600);
  mySerial.begin (38400);
  }
  void flex1(){ // se abre un void para llamarlo en el loop
   //Lectura del pin analogico y envio de datos
  mySerial.write("*"); //Se envía un primer dato para activar el receptor
  potenciometro1 = analogRead(0); // Se lee el valor del sensor flex con el ADC del arduino
  pos1 = map(potenciometro1, 950, 1020, 0, 180); 
  pos1= constrain(pos1, 0, 180); //ajuste de valores máximos y mínimos de ángulo
  mySerial.print(String(pos1)); // Se envía el valor de la posición
  delay(100);//Retardo para evitar conflictos
//para observar las variables en el monitor de lo que se envía por el bluetooth.
     Serial.print("pot1:");
     Serial.println(potenciometro1);
     Serial.print("pos1:");
     Serial.println(pos1);
  delay(tiempo);}
//y esto seria para el primer sensor flex
  void flex2(){
  mySerial.write("*"); 
  potenciometro2 = analogRead(1); 
  pos2= map(potenciometro2, 950, 1020, 0, 180); 
  pos2= constrain(pos2, 0, 180)+1000;// se suma un valor de 1000 para diferenciarlo de los otros sensores.
  mySerial.print(String(pos2));
  delay(100);
     Serial.print("pot2:");
     Serial.println(potenciometro2);
     Serial.print("pos2:");
     Serial.println(pos2);
  delay(tiempo);
    }
// lo mismo para los demas void's cambiando solo el puerto de lectura y el valor agregado de "pos" para diferenciarlos
    void flex3(){
  mySerial.write("*");
  potenciometro3 = analogRead(2); 
  pos3 = map(potenciometro3, 950, 1020, 0, 180);
 pos3= constrain(pos3, 0, 180)+2000;
  mySerial.print(String(pos3)); 
  delay(100);
     Serial.print("pot3:");
     Serial.println(potenciometro3);
     Serial.print("pos3:");
     Serial.println(pos3);
  delay(tiempo);
    }
    void flex4(){
  mySerial.write("*");
  potenciometro4 = analogRead(3); 
  pos4 = map(potenciometro4, 950, 1020, 0, 180); 
  pos4= constrain(pos4, 0, 180)+3000;
  mySerial.print(String(pos4));
  delay(100);
     Serial.print("pot4:");
     Serial.println(potenciometro4);
     Serial.print("pos4:");
     Serial.println(pos4);
  delay(tiempo);
    }
    void flex5(){
  mySerial.write("*");
  potenciometro5 = analogRead(4);
  pos5 = map(potenciometro5, 950, 1020, 0, 180);
  pos5= constrain(pos5, 0, 180)+ 4000;
  mySerial.print(String(pos5));
  delay(100);
     Serial.print("pot5:");
     Serial.println(potenciometro5);
     Serial.print("pos5:");
     Serial.println(pos5);
  delay(tiempo);
    }
void loop() { // se llaman los void's 
 flex1();
 flex2();
 flex3();
 flex4();
 flex5();
}

este es el código del emisor, pero quiero poder enviar los valores sin necesidad de sumarle valores de miles.

//Se agrega la libreria para el uso de servos
#include <Servo.h>
SoftwareSerial mySerial(10,11); //Pin 10 TX , Pin 11 RX connected to--> Bluetooth TX,RX
Servo servo1;  // Se crea el objeto para el control del servo
Servo servo2;  // Se crea el objeto para el control del servo
Servo servo3;  // Se crea el objeto para el control del servo
Servo servo4;  // Se crea el objeto para el control del servo
Servo servo5;  // Se crea el objeto para el control del servo
int pos= 0;    // Variable para el control de la posición del servo
int tiempo=10;
char BluetoothData;// para leer los valores del bluetooth.
void setup() {
  mySerial.begin (38400);
 servo1.attach(11);
 servo2.attach(10);
 servo3.attach(9);
 servo4.attach(6);
 servo5.attach(5);// Se  define un pin PWM para los servos
  //Iniciacion del puerto serial para el Bluetooth
  servo1.write(0);
  servo2.write(0);
  servo3.write(0);
  servo4.write(0);
  servo5.write(0);// se colocan los servos en 0° para iniciar
  Serial.begin(9600);
}
void ser1(){// se crea un void.
  //Espera de dato entrante del Bluetooth
 if(pos<1000){//if para reconocer el sensor que envía el dato
    servo1.write(pos); //Se escribe la nueva posición recibida

//código para observar la posición en el monitor serial y comparar con el del emisor
     Serial.println("pos1:");
     Serial.println(pos);
     Serial.println("BluetoothData");
     Serial.println(BluetoothData);
       delay(tiempo);// al final se retira esta parte del código para resumir líneas.
  }//cierre del if
  }//cierre del void
// se repite lo mismo para cada sensor con su respectivo servo.
  void ser2(){
  //Espera de dato entrante del Bluetooth
  if(pos<2000 && pos>1000){ // rango para reconocer los valores del sensor flex 2
    servo2.write(pos-1000); //Se escribe la nueva posición recibida y se le resta el valor agregado para que den variables de 0° a 180° nada más

     Serial.println("pos2:");
     Serial.println(pos-1000);
     Serial.println("BluetoothData");
     Serial.println(BluetoothData);
       delay(tiempo);
  }
  }

void ser3(){
  if(pos<3000 && pos>2000 ){
    servo3.write(pos-2000); //Se escribe la nueva posición recibida menos el valor agregado

     Serial.println("pos3:");
     Serial.println(pos-2000);
     Serial.println("BluetoothData");
     Serial.println(BluetoothData);
       delay(tiempo);
  }
  }

void ser4(){
  //Espera de dato entrante del Bluetooth
  if(pos<4000 && pos>3000){
    servo4.write(pos-3000);

     Serial.println("pos4:");
     Serial.println(pos-3000);
     Serial.println("BluetoothData");
     Serial.println(BluetoothData);
       delay(tiempo);
  }
  }

void ser5(){
  if(pos>4000){
    servo5.write(pos);

     Serial.println("pos5:");
     Serial.println(pos-4000);
     Serial.println("BluetoothData");
     Serial.println(BluetoothData);
       delay(tiempo);
  }
  }
  
void loop() {
    if(mySerial.available()>0){
    BluetoothData=mySerial.read();
    pos=mySerial.parseInt();//Se recupera la siguiente cantidad entera, después del *
    }// se leen los valores y se llaman los void's
  ser1();
  ser2();  
  ser3(); 
  ser4();
  ser5();  
}

y este el del receptor, pero como verán, funciona con servos y casi los daño al probarlo :slightly_frowning_face: :stuck_out_tongue_closed_eyes: :stuck_out_tongue_closed_eyes:
¡AYUDAAAAA!

ArduMyth:
Lee las normas. El código no se pone así en el foro.


perdón, es la primera vez que posteo algo y aún no me acostumbro. Pero ya voy entendiendo los comandos del post.


yo la verdad estoy aprendiendo hasta ahora comandos de arduino, y lo que busco es ir aprendiendo.


ArduMyth:
En los siguientes condicionales restas pero igual no sé que sentido tiene usar valores 1000, 2000, 3000.
Cómo sea ese servo1.write(pos); pudiendo poner hasta el valor 999 está mal.

La función que le doy a los valores de mas de 1000 es que me permitan diferenciar las variables del Flex1, Flex2... y así, luego en el receptor trato de restarle esos valores para que solo me queden de 0° a 180° para el servo; pues es lo que me esta complicando y la razón del post. Si me puedes ayudar a mandar y recibir, por favor :sweat_smile:, las variables y a aprender un código para diferenciarlas me ayudarias mucho.


ArduMyth:
Usa isnan() o simplemente una condición para parsear el dato.

¿isnan? me puedes explicar como seria :open_mouth:.