Shield GSM - Condition non respectée

Bonjour,
étant en Terminale STI2D, nous devons accomplir un projet en vu de notre bac en fin d’année. Nous voulons créer un système d’alarme où lorsque qu’elle détecte une présence, elle envoie un sms au propriétaire pour signaler le problème grâce à un shield gsm. Et justement nous avons un problème avec celui-ci qui est qu’il ne détecte pas la “condition” et qu’il envoie tout le temps des messages.

/*
 SMS sender
 
 This sketch, for the Arduino GSM shield,sends an SMS message 
 you enter in the serial monitor. Connect your Arduino with the 
 GSM shield and SIM card, open the serial monitor, and wait for 
 the "READY" message to appear in the monitor. Next, type a 
 message to send and press "return". Make sure the serial 
 monitor is set to send a newline when you press return.
 
 Circuit:
 * GSM shield 
 * SIM card that can send SMS
 
 created 25 Feb 2012
 by Tom Igoe
 
 This example is in the public domain.
 
 http://arduino.cc/en/Tutorial/GSMExamplesSendSMS
 
 */

// Include the GSM library
const int pir = 12;
const int ledPin =  13;
int etatpir = 0;
#include <GSM.h>

#define PINNUMBER ""

// initialize the library instance
GSM gsmAccess;
GSM_SMS sms;

void setup()
{
  pinMode(pir, INPUT);
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  Serial.println("SMS Messages Sender");

  // connection state
  boolean notConnected = true;

  // Start GSM shield
  // If your SIM has PIN, pass it as a parameter of begin() in quotes
  while(notConnected)
  {
    if(gsmAccess.begin(PINNUMBER)==GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("Not connected");
      delay(1000);
    }
  }

  Serial.println("GSM initialized");
  
  etatpir = digitalRead(pir);

  
}

void loop()
{
  if (etatpir == HIGH)
  {
    char remoteNum[12]= "06XXXXXXXX";  // telephone number to send sms
    Serial.println(remoteNum);

    // sms text
    char txtMsg = 'test';
    Serial.println("SENDING");
    Serial.println();
    Serial.println("Message:");
    Serial.println(txtMsg);

    // send the message
    sms.beginSMS(remoteNum);
    sms.print(txtMsg);
    sms.endSMS(); 
    Serial.println("\nCOMPLETE!\n");
    delay(3000);
  }

 
  else
 {
 sms.endSMS();
 }
}

Merci de votre aide

Quelle condition ? if(etatpir == HIGH) ?

L'expression etatpir == HIGH est bien évaluée à chaque loop (toutes les 3 secondes environ).

ajoute Serial.println(etatpir); juste avant le if, ça devrait t'aider.

Il me renvoie 1 a chaque fois, meme lorsque je debranche le signal du PIR...

Une bonne méthode de travail en programmation est de progresser étape par étape et de valider chaque morceau de code avant de passer au suivant.

  1. programmer la détection.
  2. programmer l'allumage de la led 13 comme témoin quand la condition est réalisée
  3. programmer l'envoi de sms...
  1. et 2) Le PIR fonctionne avec l'exemple de l'IDE (button) et la led s'allume bien
  2. l'envoie de sms fonctionne bien tout seul
    je ne vois pas pourquoi le programme detecte que la condition est réalisé