GSM-SIM800C data sending in serial monitor

I have a problem sending my data using sim800C to my phone
I’d like to send the update ph level and temperature to my phone number but it is not working.
I tried coding it in a way where the data in serial monitor will be sent to my number.
Any thoughts on how I can send an updated sensor data to my phone number using GSM-SIM 800C?

Here’s my code

#include <SoftwareSerial.h>
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#define ONE_WIRE_BUS 2
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature DS18B20(&oneWire);

const int numReadings = 10;
float readings[numReadings]; // the readings from the analog input
int readIndex = 0; // the index of the current reading
float total = 0; // the running total
float average = 0;
float temperature;
float Po;
int ph_pin = A1; //This is the pin number connected to Po
LiquidCrystal_I2C lcd(0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
int x = 0;
unsigned long timeInterval1 = 1000;
unsigned long timeInterval2 = 2000;
unsigned long previousTime = 0;
unsigned long previousTime2 = 0;
void setup() {
// put your setup code here, to run once:
x = 0;
Serial.begin(9600);
Serial2.begin(9600);
delay(1000);
lcd.begin(16, 2);
lcd.setCursor(2, 0);
lcd.print(“Aquaponics”);
lcd.setCursor(0, 1);
lcd.print(“Getting Data…”);
delay(2000);
lcd.clear();
DS18B20.begin();
Serial2.println(“AT+CMGF=1”);
Serial2.println(“AT+CMGS=”+639163123775"\r");

}

void getTemperature() {
do {
DS18B20.requestTemperatures();
temperature = DS18B20.getTempCByIndex(0);
} while (temperature == 85.0 || temperature == (-127.0));
}

void loop() {
// put your main code here, to run repeatedly:
unsigned long timer1 = millis();
unsigned long timer2 = millis();
if (x == 0) {
if (timer1 - previousTime >= timeInterval1) {
delay(1000);
int sensorValue = analogRead(ph_pin);
float voltage = sensorValue * (5.0 / 1023.0);
Serial.println(voltage);
Po = 7.002 + (2.5 - voltage) ;
Serial.print("\tPH: “);
Serial.print(Po, 3);
Serial.println(”");
lcd.setCursor(0, 0);
lcd.print (“pH Level”);
lcd.setCursor(10, 0);
lcd.print(Po);
}

if (timer1 - previousTime >= timeInterval2) {
delay(1000);
getTemperature();
lcd.setCursor(0, 1);
lcd.print(“Temp”);
lcd.setCursor(6, 1);
lcd.print(temperature);
lcd.setCursor(14, 1);
lcd.print((char)223);
lcd.setCursor(15, 1);
lcd.print(“C”);
Serial.println(temperature);
}
if (timer2 - previousTime2 >= 10000) {
x = 1;
}
}
else {

//Serial.println(“c”);
//Serial.println(timer2);
//Serial2.print(“AT+CMGF=1”);
sendMessage();
delay(5000);
previousTime2 = timer2;

x = 0;

}
}

void updateSerial()
{

while (Serial.available())
{
Serial2.write(Serial.read());//Forward what Serial received to Software Serial Port

}
while (Serial2.available())
{
Serial.write(Serial2.read());//Forward what Software Serial received to Serial Port
}
}

void sendMessage() {
delay(500);
updateSerial();
Serial2.print("pH: ");
Serial2.println(Po);
Serial2.print("Temp: ");
Serial2.println(temperature);
}

I think that sendMessage() needs to end with a small delay and then Serial2.println((char)26);

void sendMessage() {
  delay(500);
  updateSerial();
  Serial2.print("pH: ");
  Serial2.println(Po);
  Serial2.print("Temp: ");
  Serial2.println(temperature);
  delay(500);
  Serial2.println((char)26);  //ASCII code for CTRL +Z
  
}

I also think that his may need to be repeated at the start of the sendMessage block and not just appear in setup().

Serial2.println("AT+CMGF=1");
  Serial2.println("AT+CMGS=\"+639163123775\"\r");