contact alarme avec envoie de sms

je suis en train de préparer un projet pour envoyé un sms, quand mon alarme(domotique) est actif ou inactif
ensuite j aimerai que l’arduino envoie un sms lorsque j ai une intrusion volumetrique (par contact depuis ma centrale) voir des autres alertes le tout est couplet à ma centrale domotique

j ai un sketch de base pour l’alarme actif ou non qui fonctionne :slight_smile:

#include <SoftwareSerial.h>

 
SoftwareSerial GPRS(9, 10); //declaration du port de communication pour le module 900L tx en 9 rx en 10
boolean state, lastState;
 
void setup()
{
  pinMode(2, INPUT_PULLUP); //contact pour envoie info
  state = digitalRead(2);
  lastState = state;

  
  GPRS.begin(9600);
  Serial.begin(9600);
  
  GPRS.println("AT+CMGF=1");
  
  delay(1000);
}
 
void loop()
{
  while(GPRS.available()) {
    Serial.write(GPRS.read());
  }
 
  lastState = state;
  state(1) = digitalRead(2);
  
  if ( state != lastState ) {
    sendSMS();
  }
  
  delay(500);
}
 
void sendSMS() {
  Serial.print("Alarme de la maison ");
  Serial.println(state ? "mise en marche" : "mise a l arret");
  
  GPRS.println("AT+CMGS=\"+33600000000\"");
  
  delay(500);
  
  GPRS.print("Alarme de maison ");
  GPRS.println(state ? "mise en marche" : "mise a l arret");
  GPRS.write( 0x1a ); // ctrl+Z character
  
  delay(500);
}

ensuite j ai voulu inserre d’autre contact mais ça m’envoie des sms toute les 500ms >:(

#include <SoftwareSerial.h>


 


SoftwareSerial GPRS(7, 8);
boolean state, lastState;


 


void setup()
{
  pinMode(2, INPUT_PULLUP);
  state = digitalRead(2);
  lastState = state;


 


  pinMode(3, INPUT_PULLUP);
  state = digitalRead(3);
  lastState = state;
  
  GPRS.begin(9600);
  Serial.begin(9600);
  
  
  GPRS.println("AT+CMGF=1");
  
  delay(1000);
}


 


void loop()
{
  while(GPRS.available()) {
    
  Serial.write(GPRS.read());
  }


 


  lastState = state;
  state = digitalRead(2);
  
  if ( state != lastState ) {
    sendSMS();
  }
  
  delay(500);


 


  while(GPRS.available()) {
    Serial.write(GPRS.read());
  }


 


  lastState = state;
  state = digitalRead(3);
  
  if ( state != lastState ) {
    sendSMS();
  }
  
  delay(500);
}


 


void sendSMS() {
Serial.print("alarme de la maison  ");
  
Serial.println(state ? "marche" : "arret");
  
  
GPRS.println("AT+CMGS=\"+33600000000\"");
  
  delay(500);
  
  
  GPRS.print("alarme de la maison  ");
  GPRS.println(state ? "marche" : "arret");
  GPRS.write( 0x1a ); // ctrl+Z character
  
  
delay(500);


 


 Serial.print("alarme volumetrique  ");
  Serial.println(state ? "en court" : "terminé");
  
  GPRS.println("AT+CMGS=\"+33600000000\"");
  

  delay(500);
  
  GPRS.print("alarme volumetrique  ");
  
GPRS.println(state ? "en court" : "terminé");
  GPRS.write( 0x1a ); // ctrl+Z 
character
  
  delay(500);


 


}

je ne suis pas un expert en prog j’essaie juste de comprendre, mais personne dans mon entourage ne peut m’aider
pour m’expliqué le ‘pourquoi’
j’essaie sur ce forum si une personne pourrais m’aidé

j ai d’autre sketch mais je ne vais pas tous les mettre

merci d’avance

La fonction sendSMS() est pas trop mal, elle envoie un SMS lorsqu'elle est appelée et affiche une trace de ce qu'elle est en train de faire sur la console. C'est au niveau de la gestion de l'entrée que ce n'est pas très bon, c'est trop "simpliste", une entrée binaire de ce type se gère comme un ou plusieurs boutons. Bonne lecture ! (cliquez sur les liens soulignés en bleu pour avoir plus de détails)

Et dans le code du sketch de base cette ligne est très douteuse

  state[b](1)[/b] = digitalRead(2);

Pourquoi le (1)??

Sinon juste pour la forme dans vos SMS utilisez "en cours" pas "en court" et les accents français font partie de l'ASCII étendu - pas sûr qu'ils s'affichent bien partout

merci pour les infos ,je me remet au travail :)

Cool l’histoire des interferences sur les boutons merci beaucoup ,je vais l’utiliser.
J’ai l’impression que je vais en apprendre tout les jours avec l’arduino encore merci
et pour les accents et ’ court ’ c’est vrais que c’est mieux par contre je n’ai pas vue de (1) apres state

j ai encore beaucoup de travail mais comme ont dit :petit à petit l’oiseau fait son nid.

Bonsoir,

J'ai réalisé une alarme qui correspond à peu de chose près à ton besoin. 5 contacts surveillés, mode sleep, 2 N° de tél appelés, ...

Voir : http://www.microfer.fr/geryko/telechargements_publics/Arduino_transmetteur_SMS_GSM.zip

[u]Nota[/u] : Je ne suis pas un pro mais un débutant. Des améliorations et des erreurs subsistent surement mais çà fonctionne bien.

Là dedans tu trouveras surement des idées. Bon courage

par contre je n'ai pas vue de (1) apres state

C'est dans le tout premier code de votre premier post, 5 ou 6 lignes dans la loop()

j avance doucement mais surement et ça marche :slight_smile:

#include <SoftwareSerial.h>
 
SoftwareSerial GPRS(7, 8);
boolean state2, lastState2, state3 ,lastState3 ,state4, lastState4, state5 ,lastState5;
 
void setup()
{
  pinMode(2, INPUT_PULLUP);
  state2 = digitalRead(2);
  lastState2 = state2;
 
  pinMode(3, INPUT_PULLUP);
  state3 = digitalRead(3);
  lastState3 = state3;

   pinMode(4, INPUT_PULLUP);
  state4 = digitalRead(4);
  lastState4 = state4;
 
  pinMode(5, INPUT_PULLUP);
  state5 = digitalRead(5);
  lastState5 = state5;
  
  GPRS.begin(9600);
  Serial.begin(9600);
  
  GPRS.println("AT+CMGF=1");
  
  delay(1000);
}
 
void loop()
{
  while(GPRS.available()) {
    Serial.write(GPRS.read());
  }
 
  lastState2 = state2;
  state2 = digitalRead(2);
  
  if ( state2 != lastState2 ) {
   Serial.print("alarme de la maison  ");
  Serial.println(state2 ? "marche" : "arret");
  
  GPRS.println("AT+CMGS=\"+600000000\"");
  
  delay(500);
  
  GPRS.print("alarme de la maison  ");
  GPRS.println(state2 ? "marche" : "arret");
  GPRS.write( 0x1a ); // ctrl+Z character
  
  delay(500);
  }
  
  delay(500);
 
  while(GPRS.available()) {
    Serial.write(GPRS.read());
  }
 
  lastState3 = state3;
  state3 = digitalRead(3);
  
  if ( state3 != lastState3 ) {
   Serial.print("alarme volumetrique  ");
  Serial.println(state3 ? "en court" : "termine");
  
  GPRS.println("AT+CMGS=\"+600000000\"");
  
  delay(500);
  
  GPRS.print("alarme volumetrique  ");
  GPRS.println(state3 ? "en court" : "termine");
  GPRS.write( 0x1a ); // ctrl+Z character
  
  delay(500);
  }

   lastState4 = state4;
  state4 = digitalRead(4);
  
  if ( state4 != lastState4 ) {
   Serial.print("alarme peripherique  ");
  Serial.println(state4 ? " porte ouverte" : " porte ferme");
  
  GPRS.println("AT+CMGS=\"+600000000\"");
  
  delay(500);
  
  GPRS.print("alarme peripherique  ");
  GPRS.println(state4 ? " porte ouverte" : " porte ferme");
  GPRS.write( 0x1a ); // ctrl+Z character
  
  delay(500);
  }
  
  delay(500);
 
  while(GPRS.available()) {
    Serial.write(GPRS.read());
  }
  lastState5 = state5;
  state5 = digitalRead(5);
  
  if ( state5 != lastState5 ) {
   Serial.print("alarme garage  ");
  Serial.println(state5 ? " intrusion" : " termine");
  
  GPRS.println("AT+CMGS=\"+6000000000\"");
  
  delay(500);
  
  GPRS.print("alarme garage  ");
  GPRS.println(state5 ? " intrusion" : "termine");
  GPRS.write( 0x1a ); // ctrl+Z character
  
  delay(500);
  }
  
  delay(500);
 
  while(GPRS.available()) {
    Serial.write(GPRS.read());
  }

Evite de mettre ton numéro de téléphone en clair sur un forum public, tu vas finir par recevoir des coups de fils pas très attendus...

:cold_sweat:

MERCI