desktop

Arduino: Bluetooth HC06 no reconoce el texto enviado a traves de aplicacion de terminal serial.

Saludos.
D
isculpen, tengo un problema al momento de querer enviar una palabra al bluetooth.
E
l bluetooth no lo reconoce correctamente, estoy tratando que se imprima en el monitor serie.
A
djunto el código y las respuestas del monitor serial, al igual que la aplicación por que envío:
C++:
#include <SPI.h>     

#include <DMD.h>   

#include <TimerOne.h>

#include "Arial_black_16.h"

#include "Arial_Black_16_ISO_8859_1.h"

#include "Arial14.h"

#include "SystemFont5x7.h"

#include <SoftwareSerial.h>


#define DISPLAYS_ACROSS 3 // Número de paneles P10 usados, de lado a lado.

#define DISPLAYS_DOWN 1

DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);

SoftwareSerial bluetooth(2, 3); // Módulo Bluetooth

char Text[50]; // Array para almacenar el texto

bool bluetoothConnected = false; // Variable para verificar la conexión Bluetooth


void ScanDMD() {

  dmd.scanDisplayBySPI();

}


void setup(void) {

 

  Timer1.initialize(1000);         

  Timer1.attachInterrupt(ScanDMD); 

  dmd.clearScreen(true); 

  Serial.begin(9600);


  // Inicialización del Bluetooth

  bluetooth.begin(9600);  // Módulo Bluetooth

  bluetooth.setTimeout(1000);

 

  // Mensaje inicial en el puerto serie

  Serial.println("Esperando conexión Bluetooth...");

}


void loop(void) {

  if (bluetooth.available() > 0) {

    // Leer el texto desde el puerto serie hasta el salto de línea

   String inputText = bluetooth.readStringUntil('\n');


    inputText.toCharArray(Text, sizeof(Text)); // Convertir String a char array


    // Marcar la conexión Bluetooth después de recibir el primer mensaje

    if (!bluetoothConnected) {

      bluetoothConnected = true;

      Serial.println("Conexión Bluetooth establecida.");

    }

  

    // Asegúrate de que solo se envían caracteres ASCII válidos

    for (int i = 0; i < sizeof(Text); i++) {

      if (Text < 0 || Text > 127) {

        Text = '?'; // Reemplaza caracteres no válidos con '?'

      }

    }

    

    // Mostrar el texto recibido en el DMD

    dmd.selectFont(Arial_Black_16_ISO_8859_1);

    dmd.drawMarquee(Text, strlen(Text), (32 * DISPLAYS_ACROSS) - 1, 0);

    

    // Enviar el texto al módulo Bluetooth

    bluetooth.println(Text); // Envía el texto recibido al Bluetooth

    Serial.println("Texto enviado: " + inputText); // Imprime el texto recibido


    long start = millis();

    long timer = start;

    boolean ret = false;

    int interval = 10;


    while (!ret) {

      if ((timer + interval) < millis()) {

        ret = dmd.stepMarquee(-1, 0);

        timer = millis();

      }

    }

  }

}
Código:
14:10:29.214 -> Esperando conexión Bluetooth...

14:10:40.816 -> Conexión Bluetooth establecida.

14:10:40.852 -> Texto enviado: N

14:11:28.448 -> Texto enviado: �

18:31:29.859 -> Esperando conexión Bluetooth...

18:31:55.436 -> Conexión Bluetooth establecida.

18:31:55.582 -> Texto enviado: ���

18:31:58.287 -> Texto enviado: ccc�

18:32:01.306 -> Texto enviado: c
La aplicación es Arduino Bluetooth Controller.
 
Última edición por un moderador:
Este código está mal.
(Es posible que el código original haya sido alterado por el editor del foro)
for (int i = 0; i < sizeof(Text); i++) {

if (Text < 0 || Text > 127) {

Text = '?';

}
}
La variable i del bucle se emplea para referenciar por su índice a cada uno de los caracteres de la matriz -o array- Text(50) y poder sustituir individualmente por un "?" cada carácter que no cumpla la condición del bucle.

No domino Arduino, pero si el ASCII que empleas es el de siempre, los caracteres no imprimibles van del 0 al 31.

Además, tal y como está definido el bucle, no tendría en cuenta el último carácter del texto.

Por lo tanto:

for (int i = 0; i <=sizeof(Text); i++) {
if (Text[ i ]<32) {
Text[ i ]= '?';
}
}
 
Última edición:
Atrás
Arriba