3 little problems in my program!

Hello, (Sorry I am not English, I’m French).
I work on an Arduino Uno, a GPRS SHiel SIM900 and a LM35.
I build a program for my project at school.
My program works but I want to upgrade it and I didn’t succeed.
(My program sends one message when the temperature is > 25°c, and the first led switch on, if the temperature is > 26, a second message is send and a second led (LED2) switch on. (Do not work when i leave it’s to (loop))

So, here are my problems:
-When the temperature is >25°c and >27°c the GPRS SIM900 sends a lot of messages during >25°c and >26°c BUT I want that the GPRS sends just two sms: One when it’s >25°c and one when it’s >26°c.
-I want to change LED with motor, and i ask myself if it’s possible to change the rotating way on Arduino.
-In my mySerial.print, CurrentTemp is my variable, and i didn’t succeed to write a word with my variable (Example: Serial.print(“Temperature” CurrentTemp) It doesn’t work, how i can do?

Thank’s you to help !!

#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8);
unsigned int SensorPin = A0; // On déclare le pin du LM35 sur la broche A0
const float SensorVoltage = 5.0; //Si le voltage de votre montage diffère il suffit de modifier cette variable
const int LED=2; //declaration constante de broche
const int LED2=3; //declaration constante de broche
void setup()

{
pinMode(LED, OUTPUT); //met la broche en sortie
pinMode(LED2, OUTPUT); //met la broche en sortie
Serial.begin(9600); //On initialise le sérial avec une vitesse de 9600 Bauds
Serial.println(“La temperature extérieur de votre champs agricole:”); //Message de “Bienvenue”
}

void loop() //Boucle infinie
{
int SensorValue = analogRead(SensorPin); //On lit la valeur du LM35
float CalcTemp = (SensorValue * SensorVoltage) / 1024; //On la multiplie par le Voltage (5V) puis on le divise par 1024 et stocké dans un float pour obtenir une température décimale (plus précise)
float CurrentTemp = CalcTemp * 100; //La valeur est enfin multiplié par 100 afin d’avoir un résultat lisible par l’utilisateur
Serial.print(CurrentTemp); //On affiche enfin la température sur sur le serial…
Serial.println(“C”); //…Puis l’indice “C” et on saute une ligne

delay(500); //Delai de 100ms entre chaque relevé d’information

{
if (CurrentTemp > 25.00)
{

digitalWrite(LED,HIGH); // met la broche au niveau haut (5V) – allume la LED
mySerial.begin(19200); // Paramètres par défaut du port série du GPRS shield (19200bps 8-N-1)
mySerial.print("\r"); // Envoyer un retour à la ligne
delay(500); // Attendre une seconde que le modem retourne “OK”
mySerial.print(“AT+CMGF=1\r”); // Envoyer un SMS en mode texte
delay(500);

mySerial.print(“AT+CSCA=”+33689004000"\r");// Configurer le centre de message SMS,
delay(500); // Retirer les commentaire seulement si nécessaire et
// remplacer le No avec celui obtenu auprès de votre
// fournisseur de service mobile.
//Note: pour inclure un " dans une chaine de caractère
// il faut utiliser la notation "

mySerial.print(“AT+CMGS=”+33663911747"\r"); // Commencer un SMS à envoyer au numéro +91…
// l’encodage du texte suivra plus bas.
// Remplacer le No avec celui de votre destinataire.
delay(500);
mySerial.print(“Attention la temperature se raproche de votre seuil \r”); // Le texte du message
delay(500);
mySerial.write(26); // Equivalent du Ctrl+Z (fin de texte du SMS)
// Note: ici il faut utiliser l’instruction write pour écrire un byte.

}
if ( CurrentTemp < 25 )
{
digitalWrite(LED,LOW); // met la broche au niveau haut (5V) – allume la LED
}

if (CurrentTemp > 26)
{ mySerial.begin(19200); // Paramètres par défaut du port série du GPRS shield (19200bps 8-N-1)
mySerial.print("\r"); // Envoyer un retour à la ligne
delay(1000); // Attendre une seconde que le modem retourne “OK”
mySerial.print(“AT+CMGF=1\r”); // Envoyer un SMS en mode texte
delay(1000);

mySerial.print(“AT+CSCA=”+33689004000"\r");// Configurer le centre de message SMS,
delay(500); // Retirer les commentaire seulement si nécessaire et
// remplacer le No avec celui obtenu auprès de votre
// fournisseur de service mobile.
//Note: pour inclure un " dans une chaine de caractère
// il faut utiliser la notation "

mySerial.print(“AT+CMGS=”+33663911747"\r"); // Commencer un SMS à envoyer au numéro +91…
// l’encodage du texte suivra plus bas.
// Remplacer le No avec celui de votre destinataire.
delay(500);
mySerial.print(“Temperature a atteint le seuil: Activation de la serre\r”); // Le texte du message
delay(500);
mySerial.write(26); // Equivalent du Ctrl+Z (fin de texte du SMS)
// Note: ici il faut utiliser l’instruction write pour écrire un byte.
digitalWrite(LED2,HIGH); // met la broche au niveau haut (5V) – allume la LED

}

if ( CurrentTemp < 26.00 )
{digitalWrite(LED2,LOW); // met la broche au niveau haut (5V) – allume la LED
}}}

I haven't read your code but it sounds like you need to have a variable that records whether the temperature is above or below the threshold AND another variable to record whether a message has been sent.

Then you program would only send a message if the threshold is exceeded and no message has been sent.

...R

To stop multiple SMS messages, set a boolean variable to true when you have sent the first one the, if it is true, don't send the second and subsequent messages.

I don't understand the second question

You cannot combine text and a variable in a single Serial.print() statement. Do this

Serial.print("Temperature : ");
Serial.println(CurrentTemp);

or use sprintf(), but you can do your own research on that.

Put your code posted here in code tags to stop the forum software interpreting your code as smileys. See the stickies at the start of this forum section for advice on how to post.

if i understand this correctly, the problem lies with you conditions.
you have conditions
checking if temp is > 25
checking if temp is > 26
checking if temp is < 25
checking if temp is < 26

the problem is, if the temperature is at 26.5 two of the conditions will be satisfied.
the condition that checks if temp >25
and
the condition that checks if temp >26

i am assuming you only need one condition to be true at any given time.
you need to

  1. nest the conditions as per priority or
  2. use else if or
    3.use multiple checks in the if
    maybe something like
if (temp >25 && temp<26){
do whatever
}