Merci pour vos réponses...
En suivant les conseils de tout le monde, j'ai commencé à ré-écrire tout mon programme pour utiliser des CHAR... Mais j’avoue que j'ai beaucoup de difficulté, car c'est nouveau pour moi.. les String sont beaucoup plus simple...
Vous m'avez demander ce que je veut en faire?
Voila exactement le problème:
J'utilise un module GSM (qui permet de recevoir des messages SMS envoyé via un telephone cellulaire)
Je veut faire un programme qui reçoit les messages textes de quelqu'un et qui renvois à cette personne son message
Exemple: L'arduino recoit "bonjour toi" et elle répond à la personne en lui disant: "Tu m'as envoyé: bonjour toi"
Pour ce faire, je dois lire le message SMS reçu (Dans ce format:"426F6E6A6F7572" et le retourner dasn ce format: "Bonjour" Parce que mon module GSM fonctionne de cette façon.
Voici à quoi ressemble un message SMS reçu (j'ai mis des * pour masquer mon num de telephone):
+CMT: "2B31343530333431********","","15/03/24,11:45:20-16" 426F6E6A6F7572
cette ligne reçu contient au début le numero de cell de la personne qui à envoyé le SMS (en hex)
par la suite, la date et l'heure ou le message ont été reçu (en ascii)
Et pour terminé, le message en HEX
Comme vous voyez, le module GSM nous affiches CERTAINES informations reçus en HEX, mais quand on lui donne des informations on doit toutes les lui donner en format ASCII
Voici un exemple de code que j'utilise
char inchar;
String ContenuDuSMS = "";
// Exemple of string que je reçois:
//
// +CMT: "2B31343530333431********","","15/03/24,11:45:20-16" 426F6E6A6F7572
void loop()
{
if (Serial1.available())
{
while(Serial1.available() > 0)
{
inchar = Serial1.read();
ContenuDuSMS += inchar;
// When new line is detected...
if (inchar == '\n')
{
if (ContenuDuSMS.substring(0,5) == "+CMT:"){ //If line start with "+CMT:" this is because a SMS is received
EnvoiSMS( ContenuDuSMS.substring(8,31) , "You have sent: "+ContenuDuSMS.substring(60,ContenuDuSMS.length()) ); // Extract the phone number + SMS message and send it to "EnvoiSMS" routine
// envoiSMS is a routine to send a SMS
}
ContenuDuSMS = ""; // reset my string
}
}
}
}
void EnvoiSMS(String message,String telephone)
{
Serial1.print("AT+CMGF=1\r"); // AT command to send an SMS
delay(2000);
Serial1.println("AT+CMGS=\""+telephone+"\"");// AT command to give the destination phone number
delay(2000);
Serial1.println(message); // The message that i want to send
delay(2000);
Serial1.println((char)26); // Finalize with ^Z, (ASCII code 26)
delay(2000);
}
Quand j'utilise la routine "EnvoiSMS" de cette façon:
EnvoiSMS("+12223334444","Bonjour")
Le module GSM envoie un message texte au numéro "12223334444" et ce SMS contient le mot "Bonjour" (Je l'ai testé et cette routine fonctionne bien)
Mais si je l'utilise avec les données reçu, comme par exemple:
EnvoiSMS("2B3132323233333334343434","426F6E6A6F7572")
cela ne fonctionne pas, je reçois un message d'érreur du module qui s'attend à recevoir un numéro de tel en ASCII, et même si je lui donne un bon num de telephone mon cell va recevoir "426F6E6A6F7572" au lieu de "Bonjour"
Donc je dois convertir le numéro de tel reçu: (2B3132323233333334343434) et le message reçu (426F6E6A6F7572) en ascii avant de les renvoyer à mon module GSM...
Je ne sais pas si j'ai été assez claire?
Tk comme je dit j’essaie présentement de réécrire ce code en n'utilisant pas de String...
Merci de votre aide