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
#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
¡AYUDAAAAA!