Problema en codigo ESP32 Blueetoth

Hola buenos dias, esoty haciendo unas pruebas con un WROOM que usa el esp32 y enviando datos por terminal en android, estoy enviando CHARS, la verdad todo bien, pero quiero llevar la cuenta de la recepcion para que avance de 1 en 1 pero la cuenta me avanza de 3 en 3, siemre de 3 en 3 y nose porque, al final del codigo hay un delay que puse para probar y la verdad en valores entre 50ms y 500ms se comporta igual.

void loop() {
  if (BT.available()) {

    int incoming = BT.read(); // Lee lo que recibimos
    INPUTS [contador_array] = incoming; // envia el dato del incoming a un array
    contador_array = contador_array+1; //suma 1 al array para el nuevo dato
    Serial.print("Recibido: ");
    Serial.println(incoming); // envio los datos para poder visualizar
    BT.println(contador_array); // envio los datos para poder visualizar

}

ese es el código, y no he avanzado mas ya que eso de la suma de 3 en 3 no me parece fiable.

Ese no es el código, es parte del mismo.
Coloca todo en otro post por favor.

Más allá del problema planteado...

int incoming = BT.read();

¿Por qué guardas un char (1 byte) en una variable int (4 bytes en el ESP32)?

Pasa que es mas fácil enviar un char utf8 desde android por BT, como son pocas variables es mejor recibir ese char como entero ya q me es mas comodo trabajar con enteros.

solo me falto copiar la linea de delay y el cierre, no tengo nada mas ya q por ese error no puedo y no quiero avanzar mas

No, no es "más fácil" enviar un char, es lo único que puedes enviar, cualquier otro tipo de dato hay que convertirlo en varios bytes para poder enviarlos y recomponerlos al tipo adecuado en el receptor. :wink:

El char tiene un equivalente en entero, nisiquiera hay q convertirlo, solo hay que saber a cual corresponde.

Ok, no voy a ponerme a discutir cosas básicas.

Por otro lado, no tengo ni la mas remota idea de por que cuenta x3 así que no puedo aportar otra cosa.

Saludos

Seguire tu consejo y me pasare a BYTE para ocupar menos espacio, ya descubrí porque avance 3 cuentas, esto es porque en cada envio me llegan desde el terminal dos datos extras que son el Retorno de carro y avance de linea, por lo que el problema es en el terminal no en el programa del receptor, osea mas que problema es configuración probablemente.

Una opción es cambiar la configuración de la terminal para que no envíe CR y/o LF.
Otra opción (me inclino más por ésta) es ignorar los caracteres CR y LF

if (incoming != 0x0D && incoming != 0x0A) {
  // hacer el procesamiento del caracter entrante
}

Saludos

Gracias por tu recomendación, efectivamente me salte esos caracteres de otra forma, ya que lo probé antes de responder, pero cualquier solución que no los lea o los salte debería servir, probare esta solución especifica mas tarde, aunque me queda la duda de porque usaste && en lugar de ||

Porque cambia el condicional, aunque el resultado es el mismo

if ( !(incoming == 0x0D || incoming == 0x0A)) {
  // hacer el procesamiento del caracter entrante
}

Si NO incoming es igual a 0D OR igual a 0A...

Otra opción sería

if (incoming == 0x0D || incoming == 0x0A) {
  // no hace nada porque los ignora
} else {
  // aca hacer el procesamiento del caracter entrante
}

Ah, uso && porque la condición es

Si incoming contiene un valor distinto a 0D Y distinto a 0A entonces procesar entrada

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.