Bonjour,
Je ne suis pas loin d'arrivé à mon but même s'il y a encore beaucoup à faire.
J'ai arduino shield
un shield GPRS et un GPS.
J'ai eu beaucoup de mal a recevoir les position du GPS, jusqu'a en utilisant les pin 0 et 1
et les pin 2 et 3 pour le GPRS.
En gros j'ai fait comme ceci
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#define TERMBAUD 9600
// ********* GPRS **************
#define GPRSBAUD 9600
#define GPRSRX 2
#define GPRSTX 3
SoftwareSerial cell(GPRSRX,GPRSTX);
// ************* GPS ******************
#define GPSBAUD 4800 // Don change it, the gps works only at 4800
#define GPSRX 0
#define GPSTX 1
SoftwareSerial uart_gps(GPSRX, GPSTX); //Create a fake serial port 0 and 1
J'ai constaté quand je démare cell et uart_gps dans le setup(), comme ceci:
//Initialize serial ports for communication with computer
Serial.begin(TERMBAUD);
uart_gps.begin(GPSBAUD);
cell.begin(GPRSBAUD);
Serial.println(F(" "));
Serial.println(F("*************************************"));
Serial.println(F("* Starting iBip Communication... *"));
Serial.println(F("*************************************"));
Serial.println(F(" "));
}
void loop(){
if(firstTimeInLoop) {
firstTimeInLoop = 0;
#ifdef GPRS_ACTIVE
#ifdef DEBUG
Serial.println(F("Wait for module is registered (+SIND: 11) and ready (+SIND: 4) ..."));
#endif
while (GPRS_registered == 0 || GPRS_AT_ready == 0) {
String ready = getMessage();
if(ready == "+SIND: 1"){
Serial.println(F("> SIM is inserted ..."));
}
if(ready == "+SIND: 10,\"SM\",1,\"FD\",1,\"LD\",1,\"MC\",1,\"RC\",1,\"ME\",1"){
Serial.println(F("> SIM is ready ..."));
}
if(ready == "+SIND: 11"){
GPRS_registered = 1;
Serial.println(F("> Module is registered to network ..."));
}
if(ready == "+SIND: 3"){
Serial.println(F("> GPRS is partially ready ..."));
}
if(ready == "+SIND: 4"){
GPRS_AT_ready = 1;
Serial.println(F("> GPRS is ready ..."));
}
if(ready == "+SIND: 7"){
Serial.println(F("> Emergency only ..."));
}
if(ready == "+SIND: 0"){
Serial.println(F("> SIM card removed"));
}
}
#endif
Serial.println(F(" "));
Serial.println(F("READY TO GO"));
Serial.println(F("***********"));
Serial.println(F("1. Collecting GPS coords"));
Serial.println(F("2. Sending the coords via GPRS"));
Serial.println(F("3. Record the coords to a logger (Later)"));
}
[... suite du code ...]
Mon terminal arrête d'afficher les messages après
#ifdef DEBUG
Serial.println(F("Wait for module is registered (+SIND: 11) and ready (+SIND: 4) ..."));
#endif
En fait j'ai comme l'impression que
cell.begin(GPRSBAUD);
est "en panne", "coucicuiter". Comme s'il y avait un conflit.
Dans mon setup(), j'ai inversé les begin comme ceci
void setup()
{
//Initialize serial ports for communication with computer
Serial.begin(TERMBAUD);
cell.begin(GPRSBAUD);
uart_gps.begin(GPSBAUD);
[... suite du code ...]
et là, il affiche les +SIND: 1, +SIND: 10 etc, mais il bloque au niveau du GPS.
J'ai aussi commenter ceci
void setup()
{
//Initialize serial ports for communication with computer
Serial.begin(TERMBAUD);
//uart_gps.begin(GPSBAUD);
cell.begin(GPRSBAUD);
[...suite du code...]
}
pour le mettre au niveau de ma fonction qui exécute la fonctionnalité du GPS comme ceci
// START CHECK GPS
void checkGPS(void)
{
[b] uart_gps.begin(GPSBAUD);[/b]
#ifdef DEBUG
Serial.println("");
Serial.println(F("GPS gathering data... (processGps)"));
#endif
// Parse GPS data for 2 second
for (unsigned long start = millis(); millis() - start < 2000;){
while (uart_gps.available())
{
char c = uart_gps.read();
// New valid NMEA data available
if (gps.encode(c))
{
newGpsData = true;
}
}
}
[b] uart_gps.end();[/b]
#ifdef DEBUG
if (newGpsData)
{
Serial.println(F("New GPS data available."));
}
else
{
Serial.println(F("No GPS fix available."));
}
#endif
}
// END CHECK GPS
et là, encore une fois, il bloque a ce niveau.
Donc j'en déduit que j'ai mal procédé, en ce qui concerne l'utilisation de 2 ports.
Pourriez-vous m'éclairecir à ce sujet??
Milles mercis à tous