Mélange des données entre un module GRPS et GPS

Bonjour,

Dans le cadre d'un projet j'utilise un module GRPS (de Seedstudio) et un GPS (PMB-648).
Je rencontre un problème lorsque j'utilise les deux en même temps.

Sans GPS, le GRPS m'envoie "test", avec GPS, il m'envoie les coordonnées alors que je lui ai jamais demandé.

Voici le code principal.

SoftwareSerial mySerial(7, 8);
TinyGPS gps;
SoftwareSerial nss(6, 255);            
 
void setup()
{
  delay(1000);
  Serial.begin(19200);     
  mySerial.begin(19200);                
  nss.begin(4800);
}
 
void loop()
{
  char numero[100];
  char message[1000];
  strcpy(numero,"**********");
  strcpy(message,"test");
 
  if (Serial.available())
    switch(Serial.read())
   {
     case 't':
     SendTextMessage(numero,message);
     break;
    
   } 
  if (mySerial.available())
    Serial.write(mySerial.read());
}

Le code de la fonction SendTextMessage :

void SendTextMessage(char numero[100], char message[1000])
{
  //   Serial.print("Envoi d'un SMS au ");
 // Serial.print(numero);
// Serial.println(".");
  //Serial.println("Contenu : ");
 //Serial.print(message);
  //Serial.println("");
  mySerial.print("AT+CMGF=1\r");    //Because we want to send the SMS in text mode
  delay(100);
      mySerial.print("AT + CMGS = \"");//send sms message, be careful need to add a country code before the cellphone number
    delay(100);
  mySerial.print(numero);//the content of the message
  delay(100);
    mySerial.println("\"");//the content of the message
  delay(100);
    mySerial.println(message);//the content of the message
    delay(100);
  mySerial.println((char)26);//the ASCII code of the ctrl+z is 26
  delay(100);
  mySerial.println();
 Serial.println("Envoi OK");
 Serial.println("");
}

Mes 2 problèmes sont les suivants :

  • si je dé-commente ce qui est commenté au début de la fonction sendtextmessage, je ne reçois aucun SMS
  • Si le GPS est branché, il m'envoie des coordonnées au lieu d'envoyer test

Merci de votre aide !

Bonjour,

SoftwareSerial nss(6, 255);

Je suis pas sûr que la librairie SoftwareSerial (anciennement NewSoftSerial avant 1.0.x) supporte le fait d'avoir un numéro de broche "bidon".
Essaye de mettre deux numéros de broches valide dans un premier temps.

char numero[100];
char message[1000];

Heu ... faut voir un peu moins grand !

  • Un numéro de téléphone c'est maximum 12 caractères + \0 = 13 chars.
  • Un message de 1000 octets ... quand on a que 2Ko de RAM c'est un peu ... énorme :wink:

Tu reçoit les coordonnées par SMS ou tu les vois sur le serial monitor ?

  • par SMS, avec le code actuel c'est impossible
  • sur le serial monitor, c'est ces deux lignes qui le permettent :
if (mySerial.available())
    Serial.write(mySerial.read());

Fait attention, tu te mélange peut être aussi les pinceaux entre ton port série software "MySerial", "nss", et le port série hardware (Serial).

Ps: si tu veut envoyer un sms avec un message fixe :

SendTextMessage("xxxxxxxxxx", "Test");

ça évite la déclaration d'un tableau et la copie de la chaine de caractères.

PPs:

void SendTextMessage(char numero[100], char message[1000])

Donner une taille de tableau dans un prototype ne garanti pas que celui ci fera la taille spécifié.

D'où la syntaxe habituelle, plus propre :

void SendTextMessage(char numero[], char message[])

ou

void SendTextMessage(char* numero, char* message)