Conflitto tra librerie: SD e GSM

Ciao a tutti!

Sto realizzando un progetto con Arduino Uno r3 e:
-Shield Gsm e gprs della open electronics (http://www.open-electronics.org/arduino-gsm-shield/)
-Datalogger shield della adafruit (Adafruit Data logging shield for Arduino [v1.0] : ID 243 : $24.80 : Adafruit Industries, Unique & fun DIY electronics and kits)

Dopo aver "studiato" un pò di forum/articoli sono riuscito ad utilizzare con
successo lo shield gsm utilizzando il serialsoftware (pin 4 e 5).
Premetto che ad ora sto utilizzando Arduino con sopra solamente lo shield Gsm
Il problema nasce quando nello sketch includo sia le librerie del gsm che
quelle dell'SD, dopo averlo uploadato dal monitor seriale vedo comportamenti anomali (e le funzioni del gsm non vanno).
Ci sono conflitti tra le librerie dell'sd e quelle gsm?

Gli include:

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "call.h"
#include <SD.h>

Questo è quello che mi da il serial monitor:

COMPORTAMENTO CORRETTO con (//#include <SD.h>)

GSM Shield testing.
DB:ELSE
DB:ELSE
DB:ELSE
DB:CORRECT BR

status=READY
Stato-->0
Stato-->0
Stato-->0
Stato-->0
Stato-->0

COMPORTAMENTO ERRATO con (#include <SD.h>)

DB:ELSE
DB:ELSE
DB:ELSE
DB:CORRECT BR
F
9
9
9
9
9
9
9
9

Ripeto che l'unica differenza tra questi due sketch è #include <SD.h>

Avete qualche idea?

Grazie.

Ciao

normalmente questi problemi si verificano se la SD utilizza come pin di chip select uno che hai già usato (tipico il pin 4).
Dalla documentazione dello shield di Adafruit vedo però che dovrebbe utilizzare il pin 10, tu hai seguito questa guida per il tuo sketch?
http://www.ladyada.net/make/logshield/sd.html

lucadentella:
Data-Logger Shield for Arduino

Ciao!

Si si, ho seguito questa guida!
Più avanti nello sketch ho messo a 10 il chip select ma comunque è una parte commentata
perchè il problema è proprio nell'include.

Ciao

prova comunque a definirlo esplicitamente... guardando la libreria sembra che su Arduino Uno il default sia comunque l'uso del pin 10 ma...
L'hai definito di output come indicato?

Inizialmente sullo sketch ho soltanto incluso la libreria,
senza fare operazioni con essa. Ho comunque provato
a definirlo esplicitamente e come output, ma nessun miglioramento.
Noto però una cosa, se uso solo la prima parte di sketch (solo il setup)
sembra tutto ok, la seriale si comporta in modo corretto.
Mentre se uso l'intero codice, mi da problemi.
Nel loop comunque non c'è assolutamente nulla che richiama la libreria
dell'sd, c'è solo codice per il gsm..

ciao

prova a postare lo sketch completo....

Ci sono incompatibilità a livello di pin.
Adafruit Logger Shield --> Arduino Shield List: Adafruit Industries Logger Shield
OE GSM Shield --> Arduino Shield List: Open Electronics GSM Shield
Entrambe le shield usano il pin 10 per selezionare la scheda. Questo crea un conflitto sul bus SPI.

Ciao,
in realtà, come riportato qui:

i pin spi non dovrebbero venir utilizzati.
Inoltre pare di capire che lo shield SD non è neppure messo su arduino, c'è solo un include

Magari un'occhiata direttamente alle librerie potrebbe rivelare qualcosa.

EDIT
GSM.h

// pins definition
#define GSM_ON              8 // connect GSM Module turn ON to pin 77 
#define GSM_RESET           9 // connect GSM Module RESET to pin 35
//#define DTMF_OUTPUT_ENABLE  71 // connect DTMF Output Enable not used
#define DTMF_DATA_VALID     14 // connect DTMF Data Valid to pin 14
#define DTMF_DATA0          72 // connect DTMF Data0 to pin 72
#define DTMF_DATA1          73 // connect DTMF Data1 to pin 73
#define DTMF_DATA2          74 // connect DTMF Data2 to pin 74
#define DTMF_DATA3          75 // connect DTMF Data3 to pin 75

A me viene da pensare che ci sia un problema su qualche chiamata / funzione.
Avevo pensato anche a problemi di memoria, ma effettivamente la sola inclusione della libreria non ne comporta l'allocamento, quindi lo escluderei a priori

Appena arrivo a casa posto il codice.

Avevo letto dell'incompatibilità tra i pin, infatti sullo shield
gsm non ho saldato i pin 10,11,12,13.
Comunque io ora sto provando soltanto con lo shield
gsm, senza il datalogger ed il problema si presenta
quando includo solamente la libreria dell'Sd.
Pitusso, stavo pensando anche io ci fosse qualche problema
su delle funzioni della libreria, ma ad ora non
saprei cosa cercare al suo interno.

Ho appena notato che il metodo che può dar fastidio
è call.CallStatus()

Ecco qui il codice:

#include "SIM900.h"
#include <SoftwareSerial.h>
#include "call.h"
#include <SD.h>

CallGSM call;

const int chipSelect = 10;   
char number[20];
char* tuttinum [120];
byte stat=0;
int pin=4; 

void setup() 
{
  pinMode(pin,INPUT); 
  pinMode(14, OUTPUT);//pin che va al relè
  
  Serial.begin(57600);
  Serial.println("GSM Shield testing.");

  if (gsm.begin(2400))
    Serial.println("\nstatus=READY");
  else Serial.println("\nstatus=IDLE");
  
    tuttinum[0]="xxxxxxxxxx";
    tuttinum[1]="xxxxxxxxxx";
    tuttinum[2]="xxxxxxxxxx";
 
}

void loop() 
{
  Serial.print("Stato-->");
  stat=call.CallStatus(number);
  Serial.println(stat);
  
  if(stat==CALL_INCOM_VOICE)
  {
    call.HangUp();
    delay(1000);
    Serial.println("Il numero---> ");
    SlittaVettore(number);
    
    Serial.print("---");
    Serial.print(number);
    Serial.println("---");
    
    for(int i=0; i<3 ; i++)
    {
      if(strcmp(tuttinum[i], number)== 0)
      {
        Serial.println("Trovato");
            digitalWrite(14, HIGH);
             delay(2000);
            digitalWrite(14, LOW);
        break;
      }
    }
  }
}


void SlittaVettore(char *vett)
{
  for(int i=3; i<20; i++)
  {
    vett[i-3]=vett[i];
  }
}

Ciao a tutti!

Ho risolto, era un problema di memoria ram.
La librerie gsm e sd che sto utilizzando richiedono più memoria ram di quella disponibile.
Ora ho risolto tutto con un Arduino Mega perchè con la comunicazione con il pc
ho bisogno di utilizzare molto la seriale e sopratutto perchè è un progetto
per la scuola e ormai dobbiamo consegnarlo.

Pitusso poi ha trovato una libreria sd molto molto più leggera,
quindi più avanti riproverò con la uno.
(poi se non sbaglio si può provare ad utilizzare anche la memoria eeprom)

Grazie a tutti per l'aiuto.