recibir datos y enviar en texto por bluetooth

hola amigos:
tengo un problema que me gustaría que me solucionarais.
planteo lo siguiente:

tengo unas placas en las que veo la comunicación con hyperteminal y veo lo que transmite en texto.
ejemplo:
STOP

el mensaje va por 485 lo cual pongo conversor a 232. se que el mensaje lo envia en hexadecimal

Char Sa Ta Oa Pa a a a a a a aa
Hex 53a 54a 4Fa 50

bueno llegado a este punto digo:

#include <SoftwareSerial.h>


void setup(){
   
  pinMode(13, OUTPUT);
 
  Serial.begin(9600);
  digitalWrite(13,LOW);
  delay(1000);
  digitalWrite(13,HIGH);//inicializo la alimentacion del bluetooth
}

void loop()
{
  if(Serial.available()>0) //Comprobamos si en el buffer hay datos
  {
    char dato = Serial.read();  //Lee cada carácter uno por uno y se almacena en una variable
    Serial.print(dato);  //Imprimimos en la consola el carácter recibido
  }
  
}

bueno envio esto pero no me sale el texto.

#include <SoftwareSerial.h>


void setup(){
   
  pinMode(13, OUTPUT);
 
  Serial.begin(9600);
  digitalWrite(13,LOW);
  delay(1000);
  digitalWrite(13,HIGH);//inicializo la alimentacion del bluetooth
}

void loop()
{
  if(Serial.available()>0) //Comprobamos si en el buffer hay datos
  {
    int dato = Serial.read();  //Lee cada carácter uno por uno y se almacena en una variable
    Serial.print(dato);  //Imprimimos en la consola el carácter recibido
  }
  
}

No me sale texto

#include <SoftwareSerial.h>


void setup(){
   
  pinMode(13, OUTPUT);
 
  Serial.begin(9600);
  digitalWrite(13,LOW);
  delay(1000);
  digitalWrite(13,HIGH);//inicializo la alimentacion del bluetooth
}

void loop()
{
  if(Serial.available()>0) //Comprobamos si en el buffer hay datos
  {
    char dato = Serial.read();  //Lee cada carácter uno por uno y se almacena en una variable
    Serial.print(dato, DEC);  //Imprimimos en la consola el carácter recibido
  }
  
}

me sale en decimal

como lo hago para recibir el dato en hex y enviarlo para que me salga en texto

por cierto estoy empezando con arduino.
el problema es que lo cojo cuando puedo y si no practico se me va lo aprendido

gracias

Le estas diciendo que salga en decimal

Serial.print(dato, DEC);

tendria que ser:

Serial.print(dato);

hola GO_zalo gracias por contestar probé como dijiste pero sigue sin salirme el texto.
estoy probando pero de momento soy incapaz.

Cuánto cacao nos llegamos a hacer con hexadecimal, decimal, texto... Los datos SIEMPRE se envían en binario. Lo que varía es cómo los interpretamos al recibirlos. ¿Puedes poner qué se supone que envías y qué salida te imprime el arduino por serial?

Hola noter

gracias por responder la semana que viene te lo envío, si puedo el mismo lunes te envío imágenes para que veas lo que me sale por puerto serial.
se trata sobre todo de momento de ver el texto en un hiperterminal, tanto del ordenador como por bluetooth del teléfono.
lo dicho capturo pantallas y te envío gracias.

Saludos
Creo que el problema es que no han definido como van a trabajar.

Colocas la librería SotwareSerial pero no la usas. Ademas tienes una comunicación RS485 y la conectas al Arduino con un conversor 485-232, pero como conectas estas señales al Arduino? Quien controla el flujo de datos?

Coloca el diagrama de conexiones y explica que necesitas hacer.

hola max_saeta gracias por contestar.

para aclarar la consulta os digo los pasos

conectando el pc con el conversor directamente me sale por ejemplo este mensaje (foto hyperterminal)

transfiero este programa a arduino

#include <SoftwareSerial.h>

int dato=0;
void setup(){
   
  pinMode(13, OUTPUT);
  // initialize the serial communications:
  Serial.begin(9600);
  digitalWrite(13,LOW);//activar bluetooth
  delay(1000);
  digitalWrite(13,HIGH);
}

void loop()
{
  if(Serial.available()>0) //Comprobamos si en el buffer hay datos
  {
    char dato = Serial.read();  //Lee cada carácter uno por uno y se almacena en una variable
    Serial.write(dato);  //Imprimimos en la consola el carácter recibido
  }

}

conecto hyperteminal con arduino y me sale (foto hyperterminal_1)

#include <SoftwareSerial.h>

int dato=0;
void setup(){
   
  pinMode(13, OUTPUT);
  // initialize the serial communications:
  Serial.begin(9600);
  digitalWrite(13,LOW);//activar bluetooth
  delay(1000);
  digitalWrite(13,HIGH);
}

void loop()
{
  if(Serial.available()>0) //Comprobamos si en el buffer hay datos
  {
    int dato = Serial.read();  //Lee cada carácter uno por uno y se almacena en una variable
    Serial.write(dato);  //Imprimimos en la consola el carácter recibido
  }

}

conecto hyperteminal con arduino y me sale (foto hyperterminal_2)

#include <SoftwareSerial.h>

int dato=0;
void setup(){
   
  pinMode(13, OUTPUT);
  // initialize the serial communications:
  Serial.begin(9600);
  digitalWrite(13,LOW);//activar bluetooth
  delay(1000);
  digitalWrite(13,HIGH);
}

void loop()
{
  if(Serial.available()>0) //Comprobamos si en el buffer hay datos
  {
    int dato = Serial.read();  //Lee cada carácter uno por uno y se almacena en una variable
    Serial.print(dato);  //Imprimimos en la consola el carácter recibido
  }

}

conecto hyperteminal con arduino y me sale (foto hyperterminal_3)

#include <SoftwareSerial.h>


void setup(){
  
 pinMode(13, OUTPUT);
 // initialize the serial communications:
 Serial.begin(9600);
 digitalWrite(13,LOW);//activar bluetooth
 delay(1000);
 digitalWrite(13,HIGH);
}

void loop()
{
 if(Serial.available()>0) //Comprobamos si en el buffer hay datos
 {
   char dato = Serial.read();  //Lee cada carácter uno por uno y se almacena en una variable
   Serial.print(dato);  //Imprimimos en la consola el carácter recibido
 }

}

conecto hyperteminal con arduino y me sale (foto hyperterminal_4)
conexionado:

de TX conversor a RX arduino
de TX arduino a RX bluetooth
de GND arduino a GND conversor
de pin 13 a VCC bluetooth
de GND bluetooth a GND arduino y GND conversor

Gracias y espero vuestras respuestas

disculpar pero no se porque no me mando el resto de las fotos

Ok usa este codigo y me comentas como te funciono.
Ademas como no estas usando el SotfWareSerial elimina esa linea

void setup(){
  
 pinMode(13, OUTPUT);
 // initialize the serial communications:
 Serial.begin(9600);
 digitalWrite(13,LOW);//activar bluetooth
 delay(1000);
 digitalWrite(13,HIGH);
}

void loop()
{
 if(Serial.available()>0) //Comprobamos si en el buffer hay datos
 {
   char dato = Serial.read();  //Lee cada carácter uno por uno y se almacena en una variable
   Serial.write(dato);  //Imprimimos en la consola el carácter recibido
   digitalWrite(13,!digitalRead(13));
 }

}

hola:
se desconecta el bluetooth cuando recibe datos

si quito codigo:

digitalWrite(13, !digitalRead(13));

recibo:

Ahora antes de seguir pasame un diagrama de como tienes conectado todo. Y los datos de tu bluetooth y demas perifericos.

hola:
te envio imagen para que lo veas:

bluetooth HC-06 SH_BT_board V1.1
converor XGS-Z24 te paso pdf del conversor
gracias

OsiSense_XG_XGSZ24.pdf (63.3 KB)

Ok lo primero es:

No puedes usar el mismo puerto para dos dispositivos sin antes ver que ambos corran a la misma velocidad. A mi parecer el bluetooth esta comunicando a una velocidad distinta que el Arduino y el RS485.

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
  Serial.begin(9600);
  Serial.println("Prueba de Recepción");
  mySerial.begin(9600);

}

void loop() 
{
  if (mySerial.available())Serial.write(mySerial.read());

}

Vas a usar este codigo de ejemplo para comunicar tu equipo y ver que recibes por Monitor Serial. Esto fue lo primero que debiste hacer. El MAX485 lo conectas a los pines 10 y 11, y pruebas que exista comunicacion antes de seguir al otro paso.

Luego sigues este Tutorial para verificar que tu bluetooth funcione correctamente.

Hola:
Gracias por contestar, realice prueba y me hace lo mismo.

Probe tutorial pagina que me has dicho y bluetooth funciona correctamente.

Conecte hyperteminal con arduino directamente y me sale lo mismo:

tendre mal el arduino?
creo que no probe este codigo con serial arduino y funciona.

int led13=13;
int estado=0;
void setup(){
Serial.begin(9600);
pinMode(led13,OUTPUT);
}
void loop(){
if(Serial.available()>0){
estado = Serial.read();
}
if (estado =='1'){
digitalWrite(led13,HIGH);
}
if(estado=='2'){
digitalWrite(led13,LOW);
}
}

con lo cual es que no entiendo porque si conecto hyperterminal directamente al conversor si me sale texto pero si pasa por arduino no, viendo que le estamos diciendo que según llega la comunicación me la escribes a puerto serie.

Por cierto si conecto el pin 11 al conversor me bloquea la comunicación de las otras placas ya que creo que esta emitiendo algo todo el rato porque se enciende el led de recepción de datos.

gracias.

Una cosa que tiene hyperterminal que no tienes el monitor de arduino es que se auto-configura, si abres e hyperterminal y este no detecta entrada comienza a cambiar su configuración para explorar si recibe algo mas.

Vas a tener que ver si realmente tu equipo corre a 9600, prueba otras velocidades y parametros. Cambia la pariedad y los bits de stop. Porque eso que se te muestra es a causa de que no son iguales los parametros en las dos terminales.

hola:
vi configuración de hyperterminal 9600/bits 8/ paridad ninguna/ bits parada 1/ control de flujo ninguno.
asi conecto directamente con conversor dando el texto y cuando estoy con arduino no da texto.

hola max_saeta:

comprobe con varias velocidades incluso cambie velocidades al bluetooth
mirando por internet encontre una pagina de como cambiaba la velocidad de transmision del bluetooth:

/*
 Nombre proyecto:  Configuración de modulo Bluetooth HC-06
 URL proyecto:     http://giltesa.com/?p=11738
 Fecha:    09/08/2012
 Licencia: (CC) BY-NC-SA: giltesa.com

 El siguiente código permite configurar el modulo Bluetooth HC-06 desde Arduino.
 Se puede ajustar el nombre, la contraseña y los baudios a usar con el puerto serie.
 La configuración Bluetooth se guarda en el modulo, así que solo es necesario configurarlo una vez.
 
 Después de grabar el programa en el Arduino se dispone de 10 segundos de tiempo para conectar el
 modulo, una vez se apague el led comenzara el proceso de configuración y al terminar el led comenzara
 a parpadear.
 
 ** La configuración se ha de hacer con el modulo sin emparejar (sin conectar con nada) **
*/


// Opciones de configuración:
 char ssid[10] = "Arduino1"; // Nombre para el modulo Bluetooth.
 char baudios = '4';   // 1=>1200 baudios, 2=>2400, 3=>4800, 4=>9600 (por defecto), 5=>19200, 6=>38400, 7=>57600, 8=>115200
 char password[10] = "0001"; // Contraseña para el emparejamiento del modulo.


void setup()
{
 Serial.begin(9600);//ojo si cambias la velocidad hay que cambiar la velocidad de transmision
 
 // Tiempo de espera:
 pinMode(13,OUTPUT);
 digitalWrite(13,HIGH);
 delay(10000);
 digitalWrite(13,LOW);
 
 // Ahora se procede a la configuración del modulo:
 
 // Se inicia la configuración:
 Serial.print("AT"); delay(1000);

 // Se ajusta el nombre del Bluetooth:
 Serial.print("AT+NAME"); Serial.print(ssid); delay(1000);

 // Se ajustan los baudios:
 Serial.print("AT+BAUD"); Serial.print(baudios); delay(1000);

 // Se ajusta la contraseña:
 Serial.print("AT+PIN"); Serial.print(password); delay(1000); 
}

void loop()
{
 // Al parpadear el led se habrá terminado la configuración:
 digitalWrite(13, !digitalRead(13));
 delay(500);
}

cambie velocidades de los puertos pero todavía me salen símbolos o números

el programa que uso es este:

#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX

void setup()
{
  Serial.begin(9600,SERIAL_8N1);
  Serial.println("Prueba de Recepcion");
  mySerial.begin(9600);
  pinMode(13, OUTPUT);
  // initialize the serial communications:
  digitalWrite(13,LOW);
  delay(1000);
  digitalWrite(13,HIGH);
  
  

}

void loop() 
{
  if (Serial.available()>0)
  {
    mySerial.write(Serial.read());
  }
}

por cierto en el terminal de arduino también me sale los símbolos.
el bluetooth funciona perfectamente.

gracias.

starstar:
por cierto en el terminal de arduino también me sale los símbolos.
el bluetooth funciona perfectamente.

gracias.

Esta es la parte que me confunde, como sabes que el Bluetooth funciona perfecto?

hola:
te pongo unas imagines para que veas que si funciona

con esto veo que el bluetooth funciona

un saludo

Excelente.
Ahora te propongo otra prueba. Tienes un conversor RS485 a RS32. Conecta este al arduino igual que hiciste con el bluetooth. De esta manera vemos que el arduino recibe bien la trama.

Mi opinión es que hay problemas en la manipulacion del Hardware. El MAX485 es necesario controlarlo por los pines RE y DE (2 y 3) que normalmente se conecta de la siguiente manera:

Así que solo para recibir necesitas dos pines, y para recibir y transmitir tres pines del arduino, no puedes hacerlo solo con una linea desde RX al arduino. Es algo que no me di cuenta en el diagrama. No se en que estaba pensando.

Otro ejemplo