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.
