Detencion de envio de mensajes [SOLUCIONADO]

Señores buen dia

Tengo un problema

Por Favor necesito de su ayuda…

Encontre un fichero de codigos para programar un leonardo con XBEE gsm (M95), el cual adapte a mis necesidades, este seria para utilizarlo como alarma donde el pin 4 activa el sistema para envie mensajes de texto indicando como se encuentra el sistema con respecto al valor del pin 4 donde conectare un contacto No de un termostato.
Los mensajes me los envia bien al numero descrito pero una vez que comienza a enviar los mensajes no paran y envia uno tras otro, el loop es infinito. trate de hacer que se detenga con un WHILE pero no me resulto

el programa que tengo configurado es el siguiente:

#include "GPRSbee.h"
#include <SoftwareSerial.h>

const int CMD_DELAY = 2000;
int onPin = A1;                            // Pin para encender el módulo
int tempPin = A2;                          // Pin de lectura TMP36
char PIN[5] = "12";                      // XXXX --> Reemplazar por el PIN
const char AUTHNUMBER[] = "+569543XXXXX";  // Reemplazar por su número telefónico 

const int Relay_8 = 8;
const int Relay_9 = 9;
const int Relay_10 = 10;
const int Relay_11 = 11;

const int temp1 = 4;
const int temp2 = 5;
const int bombain = 6;

int val = 0 ; 
int numeroSMSEnviar = 1;
int contador = 0; 






// IMPORTANTE
// Para Arduino + XBee Shield los pines de RX y TX corresponden al 3 y 2 respectivamente. 
// Descomentar línea 20 del archivo GPRSbee.h (#define SERIAL_SOFT)
//const int TX = 2;
//const int RX = 3;

// Para Xbee IO Pro los pines de RX y TX corresponden al 2 y 3 respectivamente. 
// Descomentar línea 20 del archivo GPRSbee.h (#define SERIAL_SOFT)
//const int TX = 3;
//const int RX = 2;

// Para Xbee IO Pro V2 o Leonardo + XBee Shield comentar la línea 20 del archivo GPRSbee.h (#define SERIAL_SOFT)

#ifdef SERIAL_SOFT
GPRSbee modem(RX, TX, onPin, PIN);   // Inicialización de librería usando Arduino Uno

#else 
GPRSbee modem(onPin, PIN);           // Inicialización de librería usando Leonardo
#endif

sms_struct *smsDATA = NULL;
char message[50];
int i;

void setup() 
{ 
// Configuración de las salidas (relés)  
pinMode(Relay_8, OUTPUT);
pinMode(Relay_9, OUTPUT);
pinMode(Relay_10, OUTPUT);
pinMode(Relay_11, OUTPUT);
pinMode(temp1,INPUT);
pinMode(temp2,INPUT);
pinMode(bombain,INPUT);
 
// Inicialización de la UART
Serial.begin(115200);

Serial.println(F("GPRS SMS test"));
do
{
  modem.switchOn();                 // Encender módulo
} while (!modem.isOn());
delay(5000);
modem.initSMS();                    // Encender móduloS
while (!modem.isRegistered()) {
  delay(CMD_DELAY);
  modem.checkNetwork();             // Revisando disponibilidad de la red
}
Serial.println(F("--------------------------------------------------"
"------------------------------"));
Serial.println(F("ready"));
}

void loop()
{
char result[15];
char TCPbuf[100];

{ 
// Lectura del sensor
{

while (contador > numeroSMSEnviar)

if(digitalRead (temp1) == LOW)
{ 
  
  digitalWrite (Relay_11,HIGH ) ; 
  Serial.println(F("Baja Temp Precaucion"));
  modem.sendSMS("+569543XXXX","Baja Temp Precaucion");   // Reemplazar por su número telefónico
  delay(500);
  Serial.println(F("Temperatura Critica"));
  modem.sendSMS("+56954XXXXX","Temperatura Critica");   // Reemplazar por su número telefónico
  Serial.println(F("Bomba Funcionando"));
  modem.sendSMS("+56954XXXXX","Bomba Funcionando");   // Reemplazar por su número telefónico
}


  else 
  {
    
    digitalWrite (Relay_11,LOW ) ;
    Serial.println(F("Temperatura Segura"));
  modem.sendSMS("+56954XXXXX","Temperatura Segura");   // Reemplazar por su número telefónico
  Serial.println(F("Bomba Detenida"));
  modem.sendSMS("+5695XXXXX","Bomba Detenida");   // Reemplazar por su número telefónico
  Serial.println(F("Bomba Detenida"));
  modem.sendSMS("+56954XXXXX","Alarma OFF");   // Reemplazar por su número telefónico
  }
  contador++;
}

}

A ver si entiendo, porque hay algo que no me cierra.

En el título dice que quieres detener el envío de un mensaje, mientras que en tu mensaje dices que quieres detectar cuando llega un mensaje.

O entendí mal?

**Yo en cambio te llamaré la atención por no usar tags de código para postearlo. **
Ve a More, luego Modify, luego seleccionas todo el código y click en el ícono </>

JeJe! Yo le iba a hacer el favor de editarlo pero luego me dije: No, seguro que ya se lo dirá Surbyte que es más didáctico que yo.

;)

Buenos dias

Ya edite mi post, mil disculpas.....

Es la primera vez que trabajo con sistema GSM por eso me complico mucho.... y el material que he encontrado en internet y el foro es poco y no me dejan muy claro.

lo que quiero hacer es que una vez que envíe los mensajes el sistema no los vuelva a repetir hasta que (temp1) cambie de estado. es decir; cuando "temp1" este HIGH envíe los mensajes, luego no los repita hasta que "temp1" cambie a LOW

Ahora el resultado que tengo es que envía los mensajes, se reciben en el móvil de destino, pero el arduino los vuelve a enviar nuevamente y así sin parar

De antemano gracias por su tiempo y paciencia.

y gracias por la aclaración de los TAG....

esto cambiará las cosas

// defines como globales estas dos
bool valor= fasle;
bool valorAnt = false;

void setup()  { 
 // contenido del setup
}

void loop() {
	char result[15];
	char TCPbuf[100];

	 
	// Lectura del sensor
	
	while (contador > numeroSMSEnviar) {
	    valor = digitalRead (temp1); 
		if ( !valor && valorAnt) { // solo miro el cambio 1 a 0
		  
			digitalWrite (Relay_11,HIGH ) ; 
			Serial.println(F("Baja Temp Precaucion"));
			modem.sendSMS("+569543XXXX","Baja Temp Precaucion");   // Reemplazar por su número telefónico
			delay(500);
			Serial.println(F("Temperatura Critica"));
			modem.sendSMS("+56954XXXXX","Temperatura Critica");   // Reemplazar por su número telefónico
			Serial.println(F("Bomba Funcionando"));
			modem.sendSMS("+56954XXXXX","Bomba Funcionando");   // Reemplazar por su número telefónico
		}
		if (valor && !valorAnt) {  // solo espero el cambio 0 a 1
		    digitalWrite (Relay_11,LOW ) ;
		    Serial.println(F("Temperatura Segura"));
			modem.sendSMS("+56954XXXXX","Temperatura Segura");   // Reemplazar por su número telefónico
			Serial.println(F("Bomba Detenida"));
			modem.sendSMS("+5695XXXXX","Bomba Detenida");   // Reemplazar por su número telefónico
			Serial.println(F("Bomba Detenida"));
			modem.sendSMS("+56954XXXXX","Alarma OFF");   // Reemplazar por su número telefónico
		}
		valorAnt = valor;
		contador++;
	}
}

Peero al final que hacemos? Detenemos o detectamos?

Porque si detectamos tienes que editar el título y poner Detección en lugar de Detención.

;)

Muchas gracias a ambos por su tiempo y paciencia y dar soluciones.

Al final era detener. con la solución que posteo Surbyte quedo solucionado el problema ahora envía una sola vez el mensaje y no los vuelve a enviar hasta que cambia de estado, que era lo que necesitaba.

MUCHAS GRACIAS.... por su ayuda, ya que la solución no se me habia pasado por la mente....

Bueno aca tenemos una Norma mas. Cuando obtenemos una solución a nuestra consulta, editamos el título y le agregamos SOLUCIONADO.

De nada! Si ya está todo resuelto te pido por favor que agregues en tu título original lo siguiente: [SOLUCIONADO] De esa manera lo podremos cerrar (sin borrarlo) para evitar que dentro de quichicientos años algún dormido lo reflote. ;)