I need help in receiving data from mobile application to arduino via bluetooth

Hi, I have this set of codes that worked individually. But, when I merged all of the codes, it seems that there is one malfunction in printing my data. The arduino didn't received the data from mobile app. By inspecting the serial monitor, the data sent from the mobile app didn't reflect at all. The first task of this code is to send the data from arduino to mobile application, which worked. But the next task, which is to send the data from mobile application to arduino didn't worked.

Here are my codes:

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#include <Adafruit_MLX90614.h>
#include "HX711.h"
#include <SoftwareSerial.h>
#include <HardwareSerial.h>

#define TRIG_PIN 8
#define ECHO_PIN 7
#define calibration_factor  -27530 
#define DOUT 3 
#define CLK 2 
#define I2C_SDA 21
#define I2C_SCL 22
#define REPORTING_PERIOD_MS 1000
#define MAX_STRING_LENGTH 256 // Maximum length of the input string
#define MAX_TOKENS 28        // Maximum number of tokens in the array.

HX711 scale;
SoftwareSerial B(10, 11); // RX, TX of bluetooth
SoftwareSerial mySerial(12, 13); // RX, TX of Thermal Printer
unsigned long startTime;

float weight, distance, duration, height, bmi;
int heartrate, pulseoxi;

uint8_t max30100_address = 0x57;
uint8_t irmlx90614_address = 0x5A;
uint32_t tsLastReport = 0;

Adafruit_MLX90614 mlx = Adafruit_MLX90614();
PulseOximeter pox;

void setup() {
  startTime = millis();
  Serial.begin(9600);
  B.begin(9600);
  mySerial.begin(9600);
  Wire.begin();
  mlx.begin();
  pox.begin();
  scale.begin(DOUT, CLK);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  scale.set_scale(calibration_factor);
  scale.tare();
}

void loop() {
  printWeight(); // Calculate weight
  printHeight(); // Calculate height
  printFreq();
  printBt();
  sendSensorData();

  heartrate = random(80, 100);
  pulseoxi = random(90, 96);

  unsigned long elapsedTime = millis() - startTime;
  if (elapsedTime >= 20000) { //20 seconds reading time
    mySerial.println("");
    mySerial.println("HERE IS YOUR RESULT");
    mySerial.print("Pulse Rate: ");
    mySerial.println(heartrate);
    mySerial.print("Oxygen Saturation: ");
    mySerial.println(pulseoxi);
    mySerial.print("Temperature: ");
    mySerial.println(mlx.readObjectTempC());
    mySerial.print("Weight: ");
    mySerial.println(weight);
    mySerial.print("Height: ");
    mySerial.println(height);
    mySerial.print("BMI: ");
    mySerial.println(bmi);
    mySerial.println();
    while (1); // Stop further execution
    Serial.flush(); // Clear the serial buffer
  }

  // Check if data is available on serial port
  if (Serial.available() > 0) {
    // Read the string until newline character
    String inputString = Serial.readStringUntil('\n');
    Serial.println("Received data: " + inputString);
    // Split the string by comma
    String tokens[MAX_TOKENS];
    char *token = strtok((char*)inputString.c_str(), ",");
    int i = 0;
    // Store tokens in an array
    while (token != NULL && i < MAX_TOKENS) {
      tokens[i++] = String(token);
      token = strtok(NULL, ",");
    }
    // Print tokens for debugging
    Serial.println("Tokens:");
    for (int j = 0; j < i; j++) {
      Serial.println(tokens[j]);
    }

    // Process tokens as required
    String userid = tokens[0];
    String username = tokens[1];
    String mheight = tokens[2];
    String mweight = tokens[3];
    String mbmi = tokens[4];
    String classbmi = tokens[5];
    String mtemperature = tokens[6];
    String classtemperature = tokens[7];
    String mpulserate = tokens[8];
    String classpulserate = tokens[9];
    String moxsat = tokens[10];
    String classoxsat = tokens[11];
    String bp1 = tokens[12];
    String bp2 = tokens[13];
    String heartsound = tokens[14];
    String q1 = tokens[15];
    String q2 = tokens[16];
    String q3 = tokens[17];
    String q4 = tokens[18];
    String q5 = tokens[19];
    String q6 = tokens[20];
    String q7 = tokens[21];
    String q8 = tokens[22];
    String q9 = tokens[23];
    String q10 = tokens[24];
    String q11 = tokens[25];
    String q12 = tokens[26];
    String q13 = tokens[27];

    // Process the received data as needed
    // ...
    if (userid != NULL)
    {
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println("WELCOME TO AGAP!");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.println();
      mySerial.println("Hello User ID 0" + userid);
      mySerial.println("Name: " + username);
      mySerial.println();
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println("Vital Signs:");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Height: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(mheight);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Weight: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(mweight);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("BMI: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(mbmi + ", " + classbmi);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Body Temp: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(mtemperature + ", " + classtemperature);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("BPM: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(mpulserate + ", " + classpulserate);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("O2 Sat: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(moxsat + ", " + classoxsat);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("BP: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(bp1 + "/" + bp2);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Heartsound: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(heartsound);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.println();
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println("Lifestyle Summary:");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Smoking: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q1);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Drinking: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q2);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Stressed: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q3);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Heartburn: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q4);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Chest Pain: " );
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q5);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Headaches: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q6);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Regular Exercise: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q7);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Dyspnea: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q8);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Under Diet: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q9);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Heart Disease Hist.: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q10);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Hypertension Hist.: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q11);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("COVID-19 Symp.: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q12);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("COVID-19 Contact: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q13);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.println();
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'a');
      mySerial.write((byte)1);      
      mySerial.println("THANK YOU FOR USING AGAP!"); 
      mySerial.println("agapkisok.healthcare@gmail.com"); 
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'a');
      mySerial.write((byte)0);      
      mySerial.println();
      mySerial.println();
    }

  }
}

void printFreq() {
  pox.update();
  if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
    tsLastReport = millis();
  }
}

void printWeight() {
  weight = abs(scale.get_units());
  bmi = ((weight) * (10000) / (height * height));
}

void printHeight() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(5);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(15);
  digitalWrite(TRIG_PIN, LOW);
  duration = pulseIn(ECHO_PIN, HIGH);
  distance = (duration * .0343) / 2;
  height = 205 - distance;
}

void printBt() {
  float array[6] = {height, weight, mlx.readObjectTempC(), heartrate, bmi, pulseoxi};
  for (int i = 0; i < 6; i++) {
    Serial.print(array[i]);
    Serial.print(" ");
  }
  Serial.println();
}

void sendSensorData() {
  // Construct a comma-separated string with sensor values
  String data = String(height) + ";" + String(weight) + ";" + String(mlx.readObjectTempC()) + ";" + String(heartrate) + ";" + String(bmi) + ";" + String(pulseoxi);
  Serial.println(data);
  // Send the data over Bluetooth 
  B.println(data);
  delay(2000);
}

Any kind of help will be appreciated.

what microcontroller are you using?
you have two instances of softewareserial
note from SoftwareSerial states

  • It cannot transmit and receive data at the same time.
  • If using multiple software serial ports, only one can receive data at a time.

Hi, I am using Arduino Mega 2560. How can I solve that issue? I need a two way communication so that the data can be passed on both ways, also note that the timing of sending and receiving data is different.

the Mega has three spare hardware serial ports Serial1, Serial2 and Serial3
e.g. replace B with Serial1 (pins 18 and 19) and mySerial with Serial2 (pins 16 and 17)

void setup() {
  startTime = millis();
  Serial.begin(115200);
  Serial1.begin(9600);
  Serial2.begin(9600);

I would also increase Serial baudrate otherwise you may loose dcharacters if buffers overrun

I already did this, it didn't worked. There is still no data being received from the mobile application. The arduino still didn't reflected any data from the mobile app.

what does the serial monitor display? upload as text not a screen image

Here is the result from the serial monitor:

205.00;0.00;33.29;83;0.00;91
205.00 0.01 33.07 80.00 0.00 95.00 
205.00;0.01;33.07;80;0.00;95
205.00;-0.00;33.11;0;-INF;0
205.00;0.00;33.03;87;0.00;91
205.00;0.01;32.95;93;0.00;92
205.00;0.00;32.95;90;0.00;92
205.00;0.00;33.07;84;0.00;92
205.00;-0.01;32.89;83;-0.00;91
205.00;-0.00;32.99;80;-0.00;95

That result is from the data transmission from arduino to mobile application. Then, nothing follows. Supposedly, there should be another set of results from data transmission from mobile application to arduino via bluetooth.

the serial output is not very detailed
it looks as though the program stops after the following if() is executed

 unsigned long elapsedTime = millis() - startTime;
  if (elapsedTime >= 20000) { //20 seconds reading time
    mySerial.println("");

think you could probably do with more Serial.println() statements to display variable values and show the flow of the code, e.g.

 unsigned long elapsedTime = millis() - startTime;
  if (elapsedTime >= 20000) { //20 seconds reading time
     Serial.println("20seconds elapsed");
    mySerial.println("");

also you are using the String class on a Mega - it is not recommended for use on such low power low memory devices - it can fragment the memory causing problems and even crashing the program

can you upload the compiler/linker display showing memory usage? upload as text not a screen image

EDIT: noted you have a statement

while (1); // Stop further execution

which halts further execution - probably why you get no further serial output

On that part, its working but what I need to work is this part of codes:

  if (Serial.available() > 0) {
    // Read the string until newline character
    String inputString = Serial.readStringUntil('\n');
    Serial.println("Received data: " + inputString);
    // Split the string by comma
    String tokens[MAX_TOKENS];
    char *token = strtok((char*)inputString.c_str(), ",");
    int i = 0;
    // Store tokens in an array
    while (token != NULL && i < MAX_TOKENS) {
      tokens[i++] = String(token);
      token = strtok(NULL, ",");
    }
    // Print tokens for debugging
    Serial.println("Tokens:");
    for (int j = 0; j < i; j++) {
      Serial.println(tokens[j]);
    }

    // Process tokens as required
    String userid = tokens[0];
    String username = tokens[1];
    String mheight = tokens[2];
    String mweight = tokens[3];
    String mbmi = tokens[4];
    String classbmi = tokens[5];
    String mtemperature = tokens[6];
    String classtemperature = tokens[7];
    String mpulserate = tokens[8];
    String classpulserate = tokens[9];
    String moxsat = tokens[10];
    String classoxsat = tokens[11];
    String bp1 = tokens[12];
    String bp2 = tokens[13];
    String heartsound = tokens[14];
    String q1 = tokens[15];
    String q2 = tokens[16];
    String q3 = tokens[17];
    String q4 = tokens[18];
    String q5 = tokens[19];
    String q6 = tokens[20];
    String q7 = tokens[21];
    String q8 = tokens[22];
    String q9 = tokens[23];
    String q10 = tokens[24];
    String q11 = tokens[25];
    String q12 = tokens[26];
    String q13 = tokens[27];

    // Process the received data as needed
    // ...
    if (userid != NULL)
    {
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println("WELCOME TO AGAP!");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.println();
      mySerial.println("Hello User ID 0" + userid);
      mySerial.println("Name: " + username);
      mySerial.println();
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println("Vital Signs:");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Height: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(mheight);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Weight: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(mweight);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("BMI: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(mbmi + ", " + classbmi);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Body Temp: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(mtemperature + ", " + classtemperature);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("BPM: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(mpulserate + ", " + classpulserate);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("O2 Sat: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(moxsat + ", " + classoxsat);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("BP: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(bp1 + "/" + bp2);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Heartsound: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(heartsound);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.println();
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println("Lifestyle Summary:");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Smoking: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q1);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Drinking: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q2);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Stressed: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q3);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Heartburn: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q4);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Chest Pain: " );
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q5);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Headaches: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q6);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Regular Exercise: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q7);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Dyspnea: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q8);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Under Diet: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q9);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Heart Disease Hist.: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q10);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("Hypertension Hist.: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q11);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("COVID-19 Symp.: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q12);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.print("COVID-19 Contact: ");
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)1);
      mySerial.println(q13);
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'E');
      mySerial.write((byte)0);
      mySerial.println();
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'a');
      mySerial.write((byte)1);      
      mySerial.println("THANK YOU FOR USING AGAP!"); 
      mySerial.println("agapkisok.healthcare@gmail.com"); 
      mySerial.write((byte)0X1B);
      mySerial.write((byte)'a');
      mySerial.write((byte)0);      
      mySerial.println();
      mySerial.println();
    }

Note: Apologies for the late replies since I only have a device to communicate in the forum/community with limited amount of time. But right now, I have my own device with me.

should you be reading from Serial or from mySerial (on a Mega Serial1, Serial2, etc)

 if (mySerial.available() > 0) {
    // Read the string until newline character
    String inputString = mySerial.readStringUntil('\n');
    Serial.println("Received data: " + inputString);

again avoid String class objects on a Mega - use an array of char

 if (mySerial.available() > 0) {
   char inputString[100]={0};
    // Read the string until newline character
   mySerial.readBytesUntil('\n', (byte *)inputString, 100);
    Serial.println("Received data: " + inputString);

I think I should be reading from Serial since its the one who sees and process the incoming data from the mobile application via bluetooth. The problem is that I don't know why my serial or serial monitor doesn't read the data coming from the app.

1. Check that your BT is connected with MEGA as per Fig-1.
hc5Mega
Figure-1:

2. Upload the following sketch in MEGA.

char c = ' ';

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

void loop()
{
  if (Serial1.available())
  {
    c = Serial1.read();
    Serial.write(c);
  }

  if (Serial.available())
  {
    c =  Serial.read();
    Serial.write(c);
    Serial1.write(c);
  }
}

3. Pair you Android phone wit BT.
4. pen Serial Monitor at Bd = 9600.
5. Enter A in the InputBos of Serial Monitor and click on Send Button.
6. Ceck that A has appeared on the BT terminal of Android Phone.
7. Enter B on the BT Terminal of Android Phone and clcik on Send Button.
8. Check that B has appeared on the OutputBox of Serial Monitor.

don't understand what Serial since its the one who sees and process the incoming data means?
Serial is not intelligent

  1. information sent to the Serial monitor using Serial.print() etc appears on the output window where you can read it
  2. test entered on on the message field when you use the keyboard can be read using Serial.read() etc

What I mean is that through the course of my trials and based on my understanding, Serial reads the incoming data from the mobile application and aside from printing the data or value of variable that's been assigned to the corresponding data that has been processed by the Arduino.

PS. sorry for the late replies again, been busy.

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