Modulo bluetooth con Arduino mega no recibe datos

Hola a todos, Tengo un Arduino mega embed con el que quiero sincronizar con un iPad, la cuestión es que el mismo código, probado con un Arduino UNO me funciona correctamente (envía y recibe), pero al poner lo mismo en mega no funciona correctamente, lo curioso es que envía los datos del Arduino al iPad, pero no envía los datos del iPad al Arduino, e probado obteniendo los voltajes del Arduino UNO, obteniendo los voltajes de Arduino mega y cambiando los pines de mega, siempre me hace lo mismo, con Arduino UNO funciona perfectamente y con mega no deja enviar los datos del iPad al Arduino
Os dejo un código simple con el que hago las pruebas

#include <SoftwareSerial.h>

char *s;
SoftwareSerial miBT(9,11);  
//Funciona 9-11
String stringDataBluetooh;  

void setup() {
     Serial.begin(9600); 

 miBT.begin(38400);
 
}

void loop() {

  if (Serial.available()) {
    miBT.write(Serial.read());
    Serial.println("Entra");
  }
  stringDataBluetooh = "";  

  if (miBT.available()) {

    while (miBT.available()) {
      char character = miBT.read();
      stringDataBluetooh.concat(character);

      delay(5);
    }
    Serial.print("Lectura Bluetooh: ");
    Serial.println(stringDataBluetooh);
  }




delay(1000);

    String strData = "rt_1t_" + String(random(0,90)) +"_41_42_";
    Serial.println(strData);


  sendToTheApp(strData);
}



// Envia los datos a la app
void sendToTheApp(String str) {

  int numberData = str.length();
  int i = 0;
  while (i <= numberData) {
    char oneLetter = str[i];
    miBT.write(oneLetter);
    i++;
  }
}

Acaso Arduino mega tiene pines en concreto para la recepción de datos?, ya se me acabaron las ideas para comprobar que le ocurre, así que cualquier comentario es de agredecer, un saludo

La Mega tiene 4 puertos seriales hardware, no necesitas usar SoftwareSerial.

Hola de nuevo, e estado buscando información acerca de lo que me comentas de los 4 puertos seriales y ahora lo entiendo, no hay que poner ningún puerto, tan solo escribiendo "Serial1" o "Serial2" ya obtengo los datos de esos pines, algo que no comprendía, dejo mi código de pruebas porque creo que a mas de una persona le va a pasar lo mismo, y más si está empezando

Os comento el problema que tengo en mi caso y como lo e solucionado (seguramente no sea la mejor solución pero a mi me sirve), encima de la placa Arduino embude tengo una placa de pruebas con resistencias terminales soldados, y tan solo tengo la fila impar soldada (ya que no tengo espacio y me sobran pines) así que e tenido que hacer la transmisión por el SoftwareSerial y la recepción por Serial3

#include <SoftwareSerial.h>
char *s;
SoftwareSerial miBT(9,11);  
//Funciona 9-11
String stringDataBluetooh;  

void setup() {
  Serial.begin(9600); 
  Serial3.begin(38400);
  miBT.begin(38400);
}

void loop() {
  stringDataBluetooh = "";  

  if (Serial3.available()) {

    while (Serial3.available()) {
      char character = Serial3.read();
      stringDataBluetooh.concat(character);
      delay(5);
    }
    Serial.print("Lectura Bluetooh: ");
    Serial.println(stringDataBluetooh);
  }

 delay(1000);

  String strData = "rt_1t_" + String(random(0,90)) +"_41_42_";
  Serial.println(strData);
  sendToTheApp(strData);
}

// Envia los datos a la app
void sendToTheApp(String str) {
  int numberData = str.length();
  int i = 0;
  while (i <= numberData) {
    char oneLetter = str[i];
    miBT.write(oneLetter);
    i++;
  }
}

Ya os comento que es un código de pruebas
Un saludo!

Pero sigue con SoftwareSerial...
Si usas Serial3 es para no usar SoftwareSerial innecesariamente.
Tu código debería ser

#define miBT Serial3  // a Serial3 lo renombra  miBT. Solo para mayor claridad

char *s;

String stringDataBluetooh;  

void setup() {
  Serial.begin(9600); 
  miBT.begin(38400); // Serial3
}

void loop() {
  stringDataBluetooh = "";  

  if (miBT.available()) {

    while (miBT.available()) {
      char character = miBT.read();
      stringDataBluetooh.concat(character);
      delay(5);
    }
    Serial.print("Lectura Bluetooh: ");
    Serial.println(stringDataBluetooh);
  }

 delay(1000);

  String strData = "rt_1t_" + String(random(0,90)) +"_41_42_";
  Serial.println(strData);
  sendToTheApp(strData);
}

// Envia los datos a la app
void sendToTheApp(String str) {
  int numberData = str.length();
  int i = 0;
  while (i <= numberData) {
    char oneLetter = str[i];
    miBT.write(oneLetter);
    i++;
  }
}

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