# Demande d'explication

**URL:** <https://forum.arduino.cc/t/demande-dexplication/1344957>\
**Category:** Français\
**Created:** [January 20, 2025, 10:26pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957 "2025-01-20T22:26:06Z")\
**Posts on this page:** 20\
**Page:** 2

<div class="post-metadata">

**Author:** ![jo\_6466](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jo_6466/32/846811_2.png) [@jo\_6466](https://forum.arduino.cc/u/jo_6466)\
**Post date:** [January 21, 2025, 4:13pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/21 "2025-01-21T16:13:46Z")

</div>

> [@J-M-L](#):
>
> vous ne pouvez pas juste tester la présence de 'T' car vous l'avez dans `+CMT`. Comme je l'ai déjà dit, le mieux serait de recevoir toute la réponse, puis de l'analyser.

mon message ne comportera toujours qu'une seule lettre envoyée  
C'est

> [@J-M-L](#):
>
> ```arduino
> #include <SoftwareSerial.h>
> SoftwareSerial mySerial(5, 6);
> 
> const byte tailleMax = 250;
> char message[tailleMax];
> 
> bool messageDispo() {
> static unsigned long dernierTemps = 0;
> static byte index = 0;
> 
> while (mySerial.available()) {
> char c = mySerial.read();
> if (index < tailleMax - 1) {
> message[index++] = c;
> }
> dernierTemps = millis();
> }
> 
> if (millis() - dernierTemps > 250 && index > 0) {
> message[index] = '\0'; // Terminer la chaîne
> index = 0;
> return true;
> }
>   
> return false;
> }
> 
> void setup() {
> mySerial.begin(9600); // vitesse SIM900
> Serial.begin(115200); // vitesse moniteur
> Serial.println("PRET");
> }
> 
> void loop() {
> if (messageDispo()) {
> for (byte i = 0; i < tailleMax && message[i] != '\0'; i++) {
> char recu = message[i];
> if (isPrintable(recu)) {
> Serial.write(recu);
> } else {
> Serial.write("[0x");
> if (recu < 0x10) Serial.write('0');
> Serial.print((byte) recu, HEX);
> Serial.write(']');
> }
> }
> Serial.println();
> }
> }
> 
> ```

affichage dans le moniteur

PRET  
[0x0FF]

---

<div class="post-metadata">

**Author:** ![J-M-L](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/j-m-l/32/766245_2.png) [@J-M-L](https://forum.arduino.cc/u/J-M-L)\
**Post date:** [January 21, 2025, 4:18pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/22 "2025-01-21T16:18:01Z")

</div>

vous êtes sûr d'avoir tapé le bon code ?

---

<div class="post-metadata">

**Author:** ![jo\_6466](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jo_6466/32/846811_2.png) [@jo\_6466](https://forum.arduino.cc/u/jo_6466)\
**Post date:** [January 21, 2025, 4:49pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/23 "2025-01-21T16:49:52Z")

</div>

oui ...

J'ai trouvé ce sketch qui est un exemple proposé par arduino  
Il fonctionne!  
Pouvez-vous y jeter un oeil et expliquer pourquoi il fonctionne?

```arduino
#include <GPRS_Shield_Arduino.h>
#include <SoftwareSerial.h>

#define MESSAGE_LENGTH 160
char message[MESSAGE_LENGTH];
int messageIndex = 0;

char phone[16];
char datetime[24];

GPRS gprs(5,6,9600); //RX,TX,PWR,BaudRate

void setup() {
    gprs.checkPowerUp();
    Serial.begin(9600);
    while (!gprs.init()) {
        Serial.print("init error\r\n");
        delay(1000);
    }
    delay(3000);
    Serial.println("Init Success, please send SMS message to me!");
}

void loop() {
    messageIndex = gprs.isSMSunread();
    if (messageIndex > 0) { //At least, there is one UNREAD SMS
        gprs.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
        //In order not to full SIM Memory, is better to delete it
        gprs.deleteSMS(messageIndex);
        Serial.println(message);
    }
}

```

---

<div class="post-metadata">

**Author:** ![J-M-L](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/j-m-l/32/766245_2.png) [@J-M-L](https://forum.arduino.cc/u/J-M-L)\
**Post date:** [January 21, 2025, 5:24pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/24 "2025-01-21T17:24:19Z")

</div>

la classe `GPRS` fait tout le boulot pour vous.

Par exemple pour voir s'il y a un SMS, ils envoient la commande AT+CMGL avec leur fonction n`sim900_send_cmd ` puis écoutent la réponse et l'analyse.

> <https://github.com/Seeed-Studio/GPRS_SIM900/blob/4e57e654735c6fe54fefe623854e99dc771fe96f/GPRS_Shield_Arduino.cpp#L162-L190>

---

<div class="post-metadata">

**Author:** ![jo\_6466](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jo_6466/32/846811_2.png) [@jo\_6466](https://forum.arduino.cc/u/jo_6466)\
**Post date:** [January 22, 2025, 10:03am UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/25 "2025-01-22T10:03:54Z")

</div>

Fausse joie  
Quand je tape la lettre T (par exemple) le moniteur affiche bien T  
mais quand je teste cette valeur pour la réafficher , je n'obtiens strictement rien

```arduino
#include <GPRS_Shield_Arduino.h>
#include <SoftwareSerial.h>

#define MESSAGE_LENGTH 160
char message[MESSAGE_LENGTH];
int messageIndex = 0;

char phone[16];
char datetime[24];

GPRS gprs(5,6,9600); //RX,TX,PWR,BaudRate

void setup() {
    gprs.checkPowerUp();
    Serial.begin(115200);
    while (!gprs.init()) {
        Serial.print("init error\r\n");
        delay(1000);
    }
    delay(3000);
    Serial.println("Init Success, please send SMS message to me!");
}

void loop() {
    messageIndex = gprs.isSMSunread();
    if (messageIndex > 0) { //At least, there is one UNREAD SMS
        gprs.readSMS(messageIndex, message, MESSAGE_LENGTH, phone, datetime);
        //In order not to full SIM Memory, is better to delete it
        gprs.deleteSMS(messageIndex);
        Serial.print("recu = ");
        Serial.println(message);
    }
    if (message == 'T') {
      Serial.print ("print = ");
      Serial.println (message);
    }
}

```

---

<div class="post-metadata">

**Author:** ![fdufnews](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fdufnews/32/238836_2.png) [@fdufnews](https://forum.arduino.cc/u/fdufnews)\
**Post date:** [January 22, 2025, 10:12am UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/26 "2025-01-22T10:12:21Z")

</div>

> [@jo\_6466](#):
>
> le moniteur affiche bien T

Copie le contenu de l'affichage du moniteur série.

---

<div class="post-metadata">

**Author:** ![jo\_6466](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jo_6466/32/846811_2.png) [@jo\_6466](https://forum.arduino.cc/u/jo_6466)\
**Post date:** [January 22, 2025, 10:28am UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/27 "2025-01-22T10:28:31Z")

</div>

> [@jo\_6466](#):
>
> le moniteur affiche bien T

Init Success, please send SMS message to me!

recu = T

---

<div class="post-metadata">

**Author:** ![fdufnews](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fdufnews/32/238836_2.png) [@fdufnews](https://forum.arduino.cc/u/fdufnews)\
**Post date:** [January 22, 2025, 11:22am UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/28 "2025-01-22T11:22:08Z")

</div>

> [@jo\_6466](#):
>
> ```arduino
> char message[MESSAGE_LENGTH];
> 
> ......
> 
> if (message == 'T') {
> 
> ```

message est un tableau de char.  
Tu ne peux pas comparer un tableau de char avec un char.

- soit tu compares un élément du tableau avec 'T'  
`if (message[0] == 'T') {`
- soit tu fais une comparaison de chaine avec strcmp() ou une recherche de sous chaine avec strstr()

Tu dois d'ailleurs avoir un warning sur cette ligne je pense.

---

<div class="post-metadata">

**Author:** ![jo\_6466](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jo_6466/32/846811_2.png) [@jo\_6466](https://forum.arduino.cc/u/jo_6466)\
**Post date:** [January 22, 2025, 11:36am UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/29 "2025-01-22T11:36:13Z")

</div>

Non aucune erreur dans le sketch avec if (message == 'T') mais cela fonctionne avec if (message[0] == 'T')  
comment sait-on que l'on a affaire à un tableau de char ?

---

<div class="post-metadata">

**Author:** ![terwal](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/terwal/32/1098571_2.png) [@terwal](https://forum.arduino.cc/u/terwal)\
**Post date:** [January 22, 2025, 12:01pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/30 "2025-01-22T12:01:43Z")

</div>

> [@jo\_6466](#):
>
> `char message[MESSAGE_LENGTH];`

Tu déclare un tableau de char avec cette instruction.

---

<div class="post-metadata">

**Author:** ![terwal](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/terwal/32/1098571_2.png) [@terwal](https://forum.arduino.cc/u/terwal)\
**Post date:** [January 22, 2025, 12:07pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/31 "2025-01-22T12:07:35Z")

</div>

> [@jo\_6466](#):
>
> Non aucune erreur dans le sketch avec if (message == 'T')

c'est étonnant tu utilises quel version de l'IDE car moi, j'ai l'erreur suivante

> Essai\_10.ino:33:17: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]  
> 33 | if (message == 'T') {  
> | ~~~~~~^~~~

---

<div class="post-metadata">

**Author:** ![jo\_6466](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jo_6466/32/846811_2.png) [@jo\_6466](https://forum.arduino.cc/u/jo_6466)\
**Post date:** [January 22, 2025, 12:58pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/32 "2025-01-22T12:58:20Z")

</div>

version IDE 2.2.3

---

<div class="post-metadata">

**Author:** ![terwal](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/terwal/32/1098571_2.png) [@terwal](https://forum.arduino.cc/u/terwal)\
**Post date:** [January 22, 2025, 2:33pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/33 "2025-01-22T14:33:08Z")

</div>

ok, j'ai compris tu compiles pour un Arduino Uno et dans les "préférences" l'option "compiler warnings" est positionner à **none**?  
J'ai compilé avec la carte "ESP32 C6", dans ce cas le fichier platform.txt de la carte n'utilise pas l'option de compilation -fpermissive.  
Je te conseillerais d'au moins position la préférence "compiler warnings" à la valeur "default"  
Cela te permettra au moins d'afficher les warning que le compilateur te remonte.

---

<div class="post-metadata">

**Author:** ![jo\_6466](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jo_6466/32/846811_2.png) [@jo\_6466](https://forum.arduino.cc/u/jo_6466)\
**Post date:** [January 24, 2025, 10:18am UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/34 "2025-01-24T10:18:53Z")

</div>

> [@terwal](#):
>
> l'option "compiler warnings" est positionner à **none**?

En effet ... modifié

---

<div class="post-metadata">

**Author:** ![jo\_6466](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jo_6466/32/846811_2.png) [@jo\_6466](https://forum.arduino.cc/u/jo_6466)\
**Post date:** [January 25, 2025, 12:52pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/35 "2025-01-25T12:52:24Z")

</div>

Post effacé

---

<div class="post-metadata">

**Author:** ![J-M-L](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/j-m-l/32/766245_2.png) [@J-M-L](https://forum.arduino.cc/u/J-M-L)\
**Post date:** [January 25, 2025, 5:13pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/36 "2025-01-25T17:13:27Z")

</div>

Réservez les simples quotes (apostrophe verticale) pour un seul caractère et les guillemets pour des chaînes

```arduino
char caractere = 'x' ; // un seul caractère, un octet 
char chaineDeCaracteres[20] = "x";// une tableau de 20 octets initialisé avec le caractère x en premier et un caractère nul ensuite 

```

Si vous écriviez

```arduino
gprs.sendSMS(PHONE_NUMBER, 'envoiTemp');

```

Vous n’avez pas à en mettre du tout puisque envoiTemp est déjà une String. Si votre fonction attend une cString, vous passez alors `envoiTemp.c_str()`

---

<div class="post-metadata">

**Author:** ![jo\_6466](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jo_6466/32/846811_2.png) [@jo\_6466](https://forum.arduino.cc/u/jo_6466)\
**Post date:** [January 31, 2025, 4:36pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/37 "2025-01-31T16:36:57Z")

</div>

J'ai voulu essayer ceci mais j'ai une erreur à la compil  
Qu'est-ce qui ne va pas?

```arduino
char Temp[10];
      String TEMP;
      String TEMP2;
      temperature = 25.4;

      dtostrf(temperature, 8, 1, Temp); 
      TEMP = strcat("Temperature = ", Temp); 
      TEMP2 = strcat (TEMP, " *c");
      Serial.println(TEMP);
      Serial.println(TEMP2);

Compilation error sur la ligne TEMP2 
: cannot convert 'String' to 'char*' for argument '1' to 'char* strcat(char*, const char*)'
`
```

---

<div class="post-metadata">

**Author:** ![fdufnews](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fdufnews/32/238836_2.png) [@fdufnews](https://forum.arduino.cc/u/fdufnews)\
**Post date:** [January 31, 2025, 5:10pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/38 "2025-01-31T17:10:53Z")

</div>

> [@jo\_6466](#):
>
> Qu'est-ce qui ne va pas?

Le message est clair. Tu ne peux pas passer une String en argument à strcat() qui travaille sur des c-string.  
Pourquoi passer par des String quand tu peux afficher directement des c-string avec println()?  
Tu peux très bien faire

```arduino
     Serial.print("Temperature = ");
     Serial.print(Temp);
     Serial.println(" °c");

```

Cela ne demande pas de passer par 2 String intermédiaires, ni de faire des concaténations inutiles.

---

<div class="post-metadata">

**Author:** ![jo\_6466](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/jo_6466/32/846811_2.png) [@jo\_6466](https://forum.arduino.cc/u/jo_6466)\
**Post date:** [January 31, 2025, 5:19pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/39 "2025-01-31T17:19:42Z")

</div>

Clair pour toi mais pas pour moi qui suis débutant

Je dois envoyer TEMP2 vers mon gsm au moyen de la fonction gprs.sendSMS(PHONE\_NUMBER,TEMP2) mais cela ne marche pas .. erreur de compil suivant

Compilation error: no matching function for call to 'GPRS::sendSMS(const char [13], String&)'

---

<div class="post-metadata">

**Author:** ![fdufnews](https://dub1.discourse-cdn.com/arduino/user_avatar/forum.arduino.cc/fdufnews/32/238836_2.png) [@fdufnews](https://forum.arduino.cc/u/fdufnews)\
**Post date:** [January 31, 2025, 5:38pm UTC](https://forum.arduino.cc/t/demande-dexplication/1344957/40 "2025-01-31T17:38:38Z")

</div>

> [@jo\_6466](#):
>
> Clair pour toi mais pas pour moi qui suis débutant

Cela fait un moment que tu hantes ce forum donc tu n'est plus vraiment un débutant.

> [@jo\_6466](#):
>
> ```arduino
> Compilation error sur la ligne TEMP2 
> : cannot convert 'String' to 'char*' for argument '1' to 'char* strcat(char*, const char*)'
> 
> ```

Le message est clair

> ne peut pas convertir 'String' en 'char\*' comme argument '1' de 'char\* strcat(char\*, const char\*)'

Et il te donne le prototype de la fonction strcat où tu vois que l'arguments en question est de type char\*

* * *

Ce n'est pas la première fois que tu as des problèmes de ce genre et cela fait aussi plusieurs fois que je vois @J-M-L te suggérer de te plonger dans les tutos d'Eskimon pour progresser.

* * *

À chaque fois aussi il t'est demandé de ne pas publier des morceaux de code car ils sont sortis de leur contexte. Ici typiquement tu posais une question sur strcat alors qu'au final ton problème c'est de construire une String pour l'envoyer à gprs.sendSMS()

Donc, pour répondre à la question que tu n'as pas posée, la classe String supporte la concaténation par l'opérateur + ou par la méthode [concat()](https://docs.arduino.cc/language-reference/en/variables/data-types/stringObject/Functions/concat/)

[Previous page](https://forum.arduino.cc/t/demande-dexplication/1344957.md?page=1)

[Next page](https://forum.arduino.cc/t/demande-dexplication/1344957.md?page=3)
