creation d'une alarme gsm

Bonjour , éternel débutante mais passionné, mon nouveau projet est de fabriquer une alarme gsm , j’utilise pour cela un shield GSM, une uno, et le code “sms receiver” des exemples arduino.
j’aimerai faire en sorte modem puisse realiser plusieur action en fonction des ordres recu par sms .
Du coup j’ai vu qu’il y avait la fonction strcmp, j’ai essayer de l’utiliser dans le code mais il ne se passe rien .

Merci pour vos lumière

// include the GSM library
#include <GSM.h>

// PIN Number for the SIM
#define PINNUMBER ""

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

// Array to hold the number a SMS is retreived from
char senderNumber[20];

void setup() {
  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  Serial.println("SMS Messages Receiver");

  // connection state
  boolean notConnected = true;

  // Start GSM connection
  while (notConnected) {
    if (gsmAccess.begin(PINNUMBER) == GSM_READY) {
      notConnected = false;
    } else {
      Serial.println("Not connected");
      delay(1000);
    }
  }

  Serial.println("GSM initialized");
  Serial.println("Waiting for messages");
}

void loop() {
  char c;

  // If there are any SMSs available()
  if (sms.available()) {
    Serial.println("Message received from:");

    // Get remote number
    sms.remoteNumber(senderNumber, 20);
    Serial.println(senderNumber);

    // An example of message disposal
    // Any messages starting with # should be discarded
    if (sms.peek() == '#') {
      Serial.println("Discarded SMS");
      sms.flush();
    }

    // Read message bytes and print them
    while (c = sms.read()) {
      Serial.print(c);
    }

    Serial.println("\nEND OF MESSAGE");
    
        int resultat = strcmp("1221", c); 
       //utilisation de lafonction strcmp(chaine1, chaine2) pour comparer des mots
       if(resultat == 0)
       {
         
         Serial.println("Alarme desactivé");
        
         
       }
    // Delete message from modem memory
    sms.flush();
    Serial.println("MESSAGE DELETED");
  }

  delay(1000);

}

ta variable c est t'elle pleine ou vide??

while (c = sms.read()) {
==> Serial.print(c);

 if ( strcmp("1221", c) == 0) {
        Serial.println("Alarme desactivé \n");
    } else {
        Serial.println("Alarme activé \n");
    }

Ta variable c est un char : elle ne contient qu'un seul caractère, donc inutile de la comparer avec une chaîne de caractères...
Il faut que tu crées une String (par exemple) qui va contenir l'ensemble des caractères lus au clavier avant de la comparer avec ton code.

String code;

void loop() {
  char c;

  // If there are any SMSs available()
  if (sms.available()) {
    Serial.println("Message received from:");

    // Get remote number
    sms.remoteNumber(senderNumber, 20);
    Serial.println(senderNumber);

    // An example of message disposal
    // Any messages starting with # should be discarded
    if (sms.peek() == '#') {
      Serial.println("Discarded SMS");
      sms.flush();
    }

    // Read message bytes and print them
    while (c = sms.read()) { 
      code += c;
      Serial.print(code);
    }

    Serial.println("\nEND OF MESSAGE");
   
        int resultat = strcmp("1221", code);
       //utilisation de lafonction strcmp(chaine1, chaine2) pour comparer des mots
       if(resultat == 0)
       {
         
         Serial.println("Alarme desactivé");
         code = "";
         
       }
    // Delete message from modem memory
    sms.flush();
    Serial.println("MESSAGE DELETED");
  }

  delay(1000);

}

Il faut faire attention aux éventuels caractères de fin (genre \n ou \r) qui peuvent arriver dans le sms. Je ne sais pas s'il peut y en avoir ou pas... A tester

hey ! merci pour votre aide ...
" Ta variable c est un char : elle ne contient qu'un seul caractère, donc inutile de la comparer avec une chaîne de caractères...
Il faut que tu crées une String (par exemple) qui va contenir l'ensemble des caractères lus au clavier avant de la comparer avec ton code."

Je comprend pas tout evidemment , la variable c , c est pourtant plusieurs caractères , car c est le sms que le modem reçoit ... quand je teste , j envoit 1221 par sms ... et sur la console le resulat de
serial.print (c) c est : 1221

"ta variable c est t'elle pleine ou vide??

while (c = sms.read()) {
==> Serial.print(c);

au moment au j utilise la fonction strcmp , al variable c est n est pas vide

j’ ai essaye ton code corrigé lesept et j ai ce message d erreur :

ReceiveSMS:85: error: cannot convert ‘String’ to ‘const char*’ for argument ‘2’ to ‘int strcmp(const char*, const char*)’

int resultat = strcmp(“1221”, code);

^

exit status 1
cannot convert ‘String’ to ‘const char*’ for argument ‘2’ to ‘int strcmp(const char*, const char*)’

:’( .

Au temps pour moi. La classe String est expliquée ici. Pour la comparer il faut utiliser la méthode compareTo()

int resultat = code.compareTo("1221");

La variable résultat vaudra 0 en cas d'égalité.

jenny09:
Je comprend pas tout evidemment , la variable c , c est pourtant plusieurs caractères , car c est le sms que le modem reçoit ... quand je teste , j envoit 1221 par sms ... et sur la console le resulat de
serial.print (c) c est : 1221

Tu vois 4 caractères car tu affiches à la suite 4 fois un caractère... c ne contient qu'un seul caractère, il change à chaque exécution de la boucle et il est affiché à chaque fois.

hey ! trop bien le code fonctionne et j ai compris le truc de c qui ne contient qu 'un seul caractère !
Un grand merci a toi !
par contre dans la console , ce n est pas " 1221" qui s'affiche mais "1121221221"
du coup je comprend pas trop pourquoi ca fait ca !

C'est exactement la même chose, il affiche le contenu de code :
1
12
122
1221
Mais sur la même ligne. Si tu affiches c au lieu de code, tu auras bien 1221

bon ben j’avais pas tout pigé alors ! ^^