j'ai donc remis une tension de 4.5 volt sur le SIM900 et un gros condensateur a l'entrée du LM2596 mais pareil....
En revanche j'ai (re) fait quelques tests qui me font penser que le soucis vient plutôt du soft...
Pour simplifier le fonctionnement de mon alarme, j'ai mis dans le loop des verifications de presence de SMS
if (sms.available())
Reception_SMS();
Donc si un SMS se présente je vais dans la fonction "Reception_SMS" que voila
void Reception_SMS(){
// lecture des entrées
int portep = digitalRead(PorteP);
int portegarage = digitalRead(PorteGarage);
int portesetfenetres = digitalRead(Portesetfenetres);
int bpdroit = digitalRead(BPdroit);
int bpgauche = digitalRead(BPgauche);
int alarme = digitalRead(MESalarme);
int bpbleu = digitalRead(BPbleu);
int bpblanc = digitalRead(BPblanc);
int volet = digitalRead(Volet);
int volets = digitalRead(Volets);
char c;
char SMS[128];
int x = 0;
SMS[0] = '\0';
sms.remoteNumber(senderNumber, 20);
// Lecture du SMS
while (c = sms.read()) {
if ( c != ' ')// je prends que un seul mot
{
SMS[x]= c;
}
else{
SMS[x]= '\0';// marque la fin du message !!!
break;
}
x++;
SMS[x]= '\0';// marque la fin du message !!!
}
sms.beginSMS(senderNumber);
// Si demande de l'etat general de l'alarme
if ( strcmp(SMS, "Etat")== 0)
{
if((volets == 0) && (portep == 0) && (portesetfenetres == 0) && (portegarage == 0))
{
sms.print("Aucun defaut \n");
}else{
if(volets == 1)
sms.print("Volet ouvert \n");
if(portep == 1)
sms.print("Porte entree ouverte \n");
if(portesetfenetres == 1)
sms.print("Porte ou fenetre ouverte \n");
if(portegarage == 1)
sms.print("Porte garage ouverte \n");
}
if(AlarmeEnService == 0)
{
sms.print("Alarme Hors Service \n");
}else{
sms.print("Alarme En Service \n");
}
sms.endSMS();
}
// Demande de mise en service de la sirene d'alarme par sms
if ( strcmp(SMS, "SireneON")== 0)
{
// mise a l'arret des relais
digitalWrite(RelaisAlarmeInterieure, LOW);// Alarme
digitalWrite(RelaisAlarme, LOW);// Alarme
sms.print("Sirenes En Service");
sms.endSMS();
}
// Demande d'arret de la sirebe d'alarme par sms
if ( strcmp(SMS, "SireneOFF")== 0)
{
// mise a l'arret des relais
digitalWrite(RelaisAlarmeInterieure, HIGH);// Alarme
digitalWrite(RelaisAlarme, HIGH);// Alarme
sms.print("Sirenes Hors Service");
sms.endSMS();
}
// Si demande d'ouverture la porte de garage Droite
if ( strcmp(SMS, "GarageDroite")== 0)
{
if(portegarage == 0)
{
sms.print("Ouverture Porte de Garage Droite en cours...");
sms.endSMS();
}else{
sms.print("Fermeture Porte de Garage Droite en cours...");
sms.endSMS();
}
OuvertureGarageDroite();
}
// Si demande d'ouverture la porte de garage Gauche
if ( strcmp(SMS, "GarageGauche")== 0)
{
if(portegarage == 0)
{
sms.print("Ouverture Porte de Garage Gauche en cours...");
sms.endSMS();
}else{
sms.print("Fermeture Porte de Garage Gauche en cours...");
sms.endSMS();
}
OuvertureGarageGauche();
}
// efface le message de la memoire
sms.flush();
}
Donc en fait mon alarme envoi des SMS seulement en réponse à une "commande" elle même reçue par SMS.
Le seul moyen qu'elle envoi un SMS de maniere autonome est le declenchement d'alarme qui envoi cette fonction :
void Envoie_SMS(){
// lecture des entrées
int portep = digitalRead(PorteP);
int portegarage = digitalRead(PorteGarage);
int portesetfenetres = digitalRead(Portesetfenetres);
int bpdroit = digitalRead(BPdroit);
int bpgauche = digitalRead(BPgauche);
int alarme = digitalRead(MESalarme);
int bpbleu = digitalRead(BPbleu);
int bpblanc = digitalRead(BPblanc);
int volet = digitalRead(Volet);
int volets = digitalRead(Volets);
sms.beginSMS("+336xxxxxxxx");
sms.print("Alarme Hadrien Declenchee \n");
if(volets == 1)
sms.print("Volet ouvert \n");
if(portep == 1)
sms.print("Porte entree ouverte \n");
if(portesetfenetres == 1)
sms.print("Porte ou fenetre ouverte \n");
if(portegarage == 1)
sms.print("Porte garage ouverte \n");
sms.endSMS();
}
Mon dernier test a été d'envoyer une commande, je n'ai pas eu de réponse (donc problème). J'ai ensuite déclenché volontairement l'alarme et j'ai reçu un SMS de réponse a la commande precedente et pas le message normal en cas de déclenchement d'alarme.
J'ai pû ensuite refaire plusieurs (3 je crois) tests de commande qui ont bien fonctionnés avant de nouveau le même soucis...
Je me demande donc s'il n'y a pas un "embouteillage" de SMS a l'entrée de la SIM900 qui ne transmet pas a l'arduino, celui ci traite correctement les informations qu'il reçoit (mais faut il qu'il les reçoivent !)
Est ce que cela pourrait venir d'un problème de mémoire vive de la SIM900 ?
Dans ma fonction de réception de SMS, devrais je mettre un sms.flush après le traitement de celui ci ?
// Lecture du SMS
while (c = sms.read()) {
if ( c != ' ')// je prends que un seul mot
{
SMS[x]= c;
}
else{
SMS[x]= '\0';// marque la fin du message !!!
break;
}
x++;
SMS[x]= '\0';// marque la fin du message !!!
}
// efface le message de la memoire
[color=red] sms.flush();[/color]
plutot que :
// Lecture du SMS
while (c = sms.read()) {
if ( c != ' ')// je prends que un seul mot
{
SMS[x]= c;
}
else{
SMS[x]= '\0';// marque la fin du message !!!
break;
}
x++;
SMS[x]= '\0';// marque la fin du message !!!
}
sms.beginSMS(senderNumber);
OuvertureGarageDroite();
}
// traitement du message et envoi du SMS de confirmation...
// efface le message de la memoire
[color=red] sms.flush();[/color]
}
Je commence a être persuadé que c'est un ptit cailloux qui traine quelques part qui met tout en vrac... >:(