Envio de SMS con SIM900 y arduino UNO

Buenas tardes.

Estoy haciendo mi primer proyecto y me encontré con un problema que no he podido solucionar. Se muy poco de programación y quisiera un poco de ayuda.

El problema es que tengo algunos sensores y relays conectados al UNO y quisiera que con el SMS “STATE” me envíe el estado actual de dicho relay, sin esta ON u OFF.

También tengo un transductor de presión que quisiera que en caso de leer una valor determinado me envíe un SMS. Ejemplo: si outputValue <= 286 que envíe un SMS diciendo alerta presión baja, actualmente envía dicho SMS pero si subo la presión y la vuelvo a bajar a <=286 ya no envía mas SMS.
Y quisiera que hiciera lo mismo cuando el outputValue sea >=288; osea que me envíe un solo SMS advirtiendo que la presión subió, y que cada que estas condiciones se cumplan (outputValue <= 286 o outputValue >= 288) me envíe un mensaje.

Adjunto mi código, allí vienen marcadas las partes donde necesito ayuda. Espero alguien pueda sacarme del problema

Gracias.

#include <DHT.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
#include <SoftwareSerial.h> 
SoftwareSerial SIM900(7, 8);

int SIM900_pin = 9;
int relay_pin = 2;    
int sensorValue = 0;        
int outputValue = 0;      
int timesToSend = 1;
int count = 0;
const int analogInPin = A0; 



String incomingData;   
String message = "";   


#define DHTPIN 4     
#define DHTTYPE DHT11   
DHT dht(DHTPIN, DHTTYPE); 


int chk;
float hum;  
float temp;

#define I2C_ADDR    0x27

LiquidCrystal_I2C             lcd(I2C_ADDR, 2, 1, 0, 4, 5, 6, 7);

char incoming_char; 

byte charGrado[8] = {
  0b01110,
  0b01010,
  0b01110,
  0b00000,
  0b00000,
  0b00000,
  0b00000,
  0b00000
};


void setup()
{
  dht.begin();

  lcd.begin (16, 2);  
  lcd.setBacklightPin(3, POSITIVE);
  lcd.setBacklight(HIGH);

  lcd.createChar(0, charGrado);

  digitalWrite(9, LOW);
  delay(1000);
  digitalWrite(9, HIGH);
  delay(2000);
  digitalWrite(9, LOW);
  delay(2000);

  pinMode(SIM900_pin, OUTPUT);   
  Serial.begin(19200); 
  SIM900.begin(19200); 
  Serial.println("OK");
  delay (1000);

  pinMode(relay_pin, OUTPUT);   
  digitalWrite(relay_pin, LOW);  

 
  SIM900.print("AT+CMGF=1\r");
  delay(1000);


  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  delay(1000);
}

void loop()
{
  if (SIM900.available() > 0)
  {
    incomingData = SIM900.read(); 
    Serial.print(incomingData); 
  }

  if (incomingData.indexOf("Temp") >= 0 || incomingData.indexOf("TEMP") >= 0)
  {
    leeDatos();
    mensaje_sms();
    Serial.println(incoming_char);
  }
  {
    
    receive_message();

 
    sensorValue = analogRead(analogInPin);

    outputValue = map(sensorValue, 262, 389, 10, 30);



    Serial.print("sensor = ");
    Serial.print(sensorValue);
    Serial.print(" PSI ");
    Serial.println(outputValue);
    delay(1000);


    if (sensorValue <= 286)
    {
      while (count < timesToSend)
      {
        digitalWrite(sensorValue, 286);
        delay(1000);
        message = "Alerta: Presion baja 15 PSI";
        delay(500);
        send_message(message);
        delay(500);
        Serial.write(0x1A);
        delay(2000);
        count++;
      }
    }
  }


  if (incomingData.indexOf("RESET ON") >= 0 || incomingData.indexOf("Reset on") >= 0)

  {
    pinMode(SIM900_pin, OUTPUT);   
    digitalWrite(SIM900_pin, LOW);  

    Serial.begin(19200); 
    SIM900.begin(19200); 

    pinMode(relay_pin, OUTPUT);   
    digitalWrite(relay_pin, LOW); 

   
    SIM900.print("AT+CMGF=1\r");
    delay(100);

    
    SIM900.print("AT+CNMI=2,2,0,0,0\r");
    delay(100);
    {
      digitalWrite(relay_pin, LOW);
      message = "Reseted on";
     
      send_message(message);
    }
  }

 
  if (incomingData.indexOf("RESET OFF") >= 0 || incomingData.indexOf("Reset off") >= 0)

  {
    pinMode(SIM900_pin, OUTPUT);   // Setting erlay pin as output pin
    digitalWrite(SIM900_pin, LOW);  // Making relay pin initailly ON

    Serial.begin(19200); // baudrate for serial monitor
    SIM900.begin(19200); // baudrate for GSM shield

    pinMode(relay_pin, OUTPUT);   // Setting erlay pin as output pin
    digitalWrite(relay_pin, HIGH);  // Making relay pin initailly ON

    
    SIM900.print("AT+CMGF=1\r");
    delay(100);

   
    SIM900.print("AT+CNMI=2,2,0,0,0\r");
    delay(100);
    {
      digitalWrite(relay_pin, HIGH);
      message = "Reseted off";
      
      send_message(message);
    }
  }

 
  if (incomingData.indexOf("ON1") >= 0 || incomingData.indexOf("On1") >= 0 || incomingData.indexOf("on1") >= 0)
  {
    digitalWrite(relay_pin, LOW);
    message = "Bomba 1 ON";
   
    send_message(message);
  }

  
  if (incomingData.indexOf("OFF1") >= 0 || incomingData.indexOf("Off1") >= 0 || incomingData.indexOf("off1") >= 0)
  {
    digitalWrite(relay_pin, HIGH);
    message = "Bomba 1 OFF";
    
    send_message(message);
  }

 
  if (incomingData.indexOf("PSI") >= 0 || incomingData.indexOf("Psi") >= 0 || incomingData.indexOf("psi") >= 0)
  {
    digitalWrite, (sensorValue);
    message = outputValue;
    
    send_message2(message + " PSI ");
  }

  if (incomingData.indexOf("STATE") >= 0 || incomingData.indexOf("State") >= 0 || incomingData.indexOf("state") >= 0)
  {
    if  /////("Como hacer que me envie un SMS con el estatis del relay?")
    {
      message = "Bomba 1 On";
      send_message3(message);
      Serial.println("Relay state resquest");
      Serial.println("SMS enviado");
    }
    if   ///// ("Como hacer que me envie un SMS con el estatis del relay?")
    {
      message = "Bomba 1 Off";
      send_message4(message);
      Serial.println("Relay state resquest");
      Serial.println("SMS enviado");
    }
  }
}

void leeDatos()
{

  hum = dht.readHumidity();
  temp = dht.readTemperature();

  Serial.print("Humidity: ");
  Serial.print(hum);
  Serial.print(" %, Temp: ");
  Serial.print(temp);
  Serial.println(" Celsius");

  lcd.home ();                   
  lcd.print("Temp:");
  lcd.setCursor ( 6, 0 );
  lcd.print(temp);
  lcd.setCursor ( 12, 0 );
  lcd.write(byte(0));
  lcd.setCursor ( 13, 0 );
  lcd.print("C");
  lcd.setCursor ( 0, 1 );
  lcd.print("Hum:");
  lcd.setCursor ( 6, 1 );
  lcd.print(hum);
  lcd.setCursor ( 12, 1 );
  lcd.print("%");
}

void receive_message()
{
  if (SIM900.available() > 0)
  {
    incomingData = SIM900.readString();
    Serial.print(incomingData);
    delay(10);
  }
}

void send_message(String message)
{
  SIM900.println("AT+CMGF=1");    
  delay(100);
  SIM900.println("AT+CMGS=\"xxxxxxxxxxx\""); 
  delay(100);
  SIM900.println(message);   
  delay(100);
  SIM900.println((char)26);  
  delay(100);
  SIM900.println();
  delay(1000);
}

void send_message2(String message)
{
  SIM900.println("AT+CMGF=1");    
  delay(100);
  SIM900.println("AT+CMGS=\"+xxxxxxxxxx\"");
  delay(100);
  SIM900.println(message);  
  delay(100);
  SIM900.println((char)26); 
  delay(100);
  SIM900.println();
  delay(1000);
}

void send_message3(String message)

{
  SIM900.println("AT+CMGF=1");    
  delay(100);
  SIM900.println("AT+CMGS=\"xxxxxxxxx\""); 
  delay(100);
  SIM900.println(message);  
  delay(100);
  SIM900.println((char)26); 
  delay(100);
  SIM900.println();
  delay(1000);
}

void send_message4(String message)

{
  SIM900.println("AT+CMGF=1");    
  delay(100);
  SIM900.println("AT+CMGS=\"xxxxxxxxxx\""); 
  delay(100);
  SIM900.println(message);   
  delay(100);
  SIM900.println((char)26);  /
  delay(100);
  SIM900.println();
  delay(1000);
}

void mensaje_sms()
{
  Serial.println("Enviando SMS...");
  SIM900.print("AT+CMGF=1\r"); 
  delay(1000);
  SIM900.println("AT + CMGS = \"+xxxxxxxxx\""); correcto.
  delay(1000);
  SIM900.println("INFO METEO: " );
  delay(100);
  SIM900.print("Temperatura: " );
  delay(100);
  SIM900.print(temp);
  delay(100);
  SIM900.println(" Gr. Celsius, " );
  delay(100);
  SIM900.print("Humedad: " );
  delay(100);
  SIM900.print(hum);
  delay(100);
  SIM900.println("%" );
  delay(100);
  SIM900.println((char)26);
  delay(100);
  SIM900.println();
  delay(2000); 
  Serial.println("SMS enviado");
  incomingData = '0';
}