Bonjour,
Je viens demander un peu d'aide car j'ai un gros problème avec mon code et je m'en sort pas.
Je souhaite mettre en place une commande de porte de garage par SMS, avec un Shield GSM, un Shield avec 4 relais, et un Arduino Uno.
Pour le moment j'essaie uniquement de recevoir un message, de récupérer les informations qui m’intéresse et de les afficher dans le moniteur série.
J'ai fait plusieurs code, un peu différent mais a chaque fois j'ai le même problème. Je créer mon code étape par étape, puis au bout d'un certain temps, les premières étape qui était fonctionnait bien, ne marche plus.
En gros je commence par récupérer ce que m'envoie le Shield GSM, je découpe le message par ligne, puis par info, je met ces infos dans des variables string, je supprime le message, puis je traite les infos.
Pour le moment mon code fonctionne parfaitement jusqu’à mon étape 4.
Puis si j’enlève les balises de commentaire sur l'étape 410, ma fonctions Format ne marche plus.
Je comprend vraiment pas pourquoi. Si vous avez une solution ce serait génial
Merci d'avance
Jerem
#include <SoftwareSerial.h>
#define rxPin 7
#define txPin 8
SoftwareSerial gsm(rxPin, txPin);
String Commande = "";
String Numero = "";
String Date= "";
String Message= "";
String Heure= "";
int Etape = 0;
void setup()
{
pinMode(rxPin, INPUT);
pinMode(txPin, OUTPUT);
gsm.begin(9600);
Serial.begin(9600);
}
void loop()
{
Exe();
if(gsm.available())
{
int i = 0;
char someChar[257] = {0};
do{
someChar[i++] = gsm.read();
delay(3);
}
while (gsm.available() > 0);
if(Etape == 100){Serial.println(someChar);}
Format(someChar,i);
Etape++;
}
if(Serial.available())
{
int i = 0;
char someChar[32] = {0};
do{
someChar[i++] = Serial.read();
delay(3);
}
while (Serial.available() > 0);
gsm.println(someChar);
Etape = 100;
}
}
void Format(char MsgF[257],int T)
{
int L=0;
int c=0;
char Ligne[6][64] = {{0},{0}};
char Info[7][32] = {{0},{0}};
for(int i=0;i<=T;i++)
{
if (MsgF[i]== '\n')
{
L++;
c=0;
}
else
{
Ligne[L][c]= MsgF[i];
c++;
}
}
L=0;
c=0;
for (int i=0;i<64;i++)
{
if (Ligne[1][i]== ',')
{
L++;
c=0;
}
else if (Ligne[1][i]!='"')
{
Info[L][c]=Ligne[1][i];
c++;
}
}
Commande = "";
Commande = String(Info[0]);
if(Commande == "+CMGL: 1")
{
Numero = "";
Date= "";
Message= "";
Heure= "";
Numero = String(Info[2]);
Date= String(Info[4]);
Message= String(Ligne[2]);
Heure= String(Info[5]);
}
else if(Info[0][0] == 'O' and Info[0][1] == 'K')
{
Commande = "OK";
}
else if(Info[0][0] == '+' and Info[0][1] == 'C' and Info[0][2] == 'M' and Info[0][3] == 'G' and Info[0][4] == 'S' and Info[0][5] == ':')
{
Commande = "+CMGS:";
}
//Serial.print("Commande =");Serial.println(Commande);
//delay(100);
}
void Exe()
{
switch(Etape)
{
case 0:
//Serial.println("Attente");
delay(500);
break;
case 1:
if(Commande=="+CMTI: SM"){Serial.println("Message Recue");gsm.print("AT+CMGL= \"ALL\"\r");delay(100);}
else {Serial.println("Erreur 1");Etape = 0;}
break;
case 2:
if(Commande=="+CMGL: 1")
{
Serial.print("Message =");Serial.println(Message);
Serial.print("Numero =");Serial.println(Numero);
Serial.print("Date =");Serial.println(Date);
Serial.print("Heure =");Serial.println(Heure);
delay(100);
}
else {Serial.println("Erreur Lecture MSG");}
gsm.print("AT+CMGD=1\r");
delay(100);
break;
case 3:
if(Commande == "OK") {Serial.println("Message Supprimé OK");Etape = 4;}
else {Serial.println("Erreur Suppression MSG");Etape = 0;}
delay(100);
break;
case 4:
if(Message == "LED:ON\r"){Serial.println("Demande Allumage Led)"); Etape= 0;}
else if(Message == "LED:OFF\r"){Serial.println("Demande Arret Led)"); Etape= 0;}
else if(Message == "Porte\r"){Serial.println("Demande Ouverture Porte"); Etape= 0;}
else {Serial.println("Aucune commande connue");Etape = 0;}
delay(100);
break;
/*
case 410:
if(Numero == "+33xxxxxxxx"){Serial.println("Commande Autorise, telephone de Jeremy"); Etape= 0;}
else {Serial.println("Utilisateur inconnue");Etape = 0;}
delay(100);
break;
case 411:
Serial.println("Porte Ouverte OK"); Etape= 0;
delay(100);
break;*/
case 100:
Serial.println("Commande Manu");
delay(100);
break;
case 101:
if(Commande == "OK") {Serial.println("Commande Manu OK");} else {Serial.println("Erreur");}Etape = 0;
break;
}
}