Strano ritardo sulla seriale....

Ciao a tutti,

ho un Arduino Mega 2560 al quale ho collegato il modulo GSM con SIM900 della Seedstudio e lo utilizzo con queste librerie Google Code Archive - Long-term storage for Google Code Project Hosting. senza problemi in modalità HardwareSerial.

Avevo costruito una schedina con due PCF8574 per pilotare tramite I2C un LCD 16x2 e una KEYPAD a matrice 4x4, l'avevo testata su un Arduino2009 e funzionava, poi per esigenze ho cambiato Arduino senza testarla.

Una volta impostato il tutto per far funzionare la shield GSM ho collegato SDA e SCL ma niente non funziona, allora ho provato a collegare direttamente ad Arduino sia la KEYPAD che LCD ma sopresa !!!! NON FUNZIONANO o meglio......mi spiego...... se carico il codice di esempio della keypad funziona regolarmente ma se lo integro al codice che uso per il GSM ho un ritardo pazzesco e qualche tasto sembra non funzionare.......stessa prova con LCD solo il codice di esempio di LiquidCrystal tutto ok se integro il codice GSM per stampare sul LCD non parte piu niente ne lcd ne la gsm.

il codice GSM che uso è il seguente, senza la parte della KEYPAD

#include <SoftwareSerial.h>
#include <Wire.h> 
#include <Keypad.h> 
#include "sms.h"
#include "sim900.h"
#include "call.h"

SMSGSM sms;
CallGSM call;

char position;  
char phone_number[20]; 
char sms_text[160];
boolean started=false;
byte stat=0;


const byte ROWS = 4;
const byte COLS = 4; 

char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {37, 36, 35, 34}; 
byte colPins[COLS] = {33, 32, 31, 30}; 

Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup() 
{
  
  Serial.begin(9600);
  Serial.println("GSM Shield testing.");
  if (gsm.begin(9600)){
    Serial.println("\nstatus=READY");
    started=true;  
  }
  else Serial.println("\nstatus=IDLE");
  
};

void loop() 
{
  
  char customKey = customKeypad.getKey();
  
  if (customKey){
    Serial.println(customKey);
  }
  
  //contolla gli sms ed esegue
  position = sms.IsSMSPresent(SMS_ALL);  
  if (position) {
    sms.GetSMS(position, phone_number, sms_text, 160);
    Serial.println(sms_text);
    sms.DeleteSMS(position);  }
  
  //controlla chiamate in arrivo e le interrompe
  stat=call.CallStatus();
  if(stat==CALL_INCOM_VOICE){
    call.HangUp();
    delay(2000);  }
    
    
  delay(1000);
    
};

Avete una minima idea ???? perche io non ne ho !!!!!

GRAZIE

Ho avuto modo di usare la MEGA ed il GSM Shield R2 con un LCD03 che già possiede l'interfaccia per una keypad 3x4.

Personalmente ho preferito modificare la libreria per consentire l'uso delle seriali hardware sia per il GSM che per lo LCD: non ho molta fiducia sul perfetto funzionamento della SoftwareSerial.

Se vuoi maggiore aiuto dovresti fornire il codice completo è lo schema di collegamento.

Ma io al momento non so nemmeno quale e dove possa essere il problema. .....

se puoi usare le seriali hardware,usa quelle,e modifica la libreria gsm x sfruttarla x bene..inoltre molti delay possono essere notevolmente ridotti..
e nella libreria dell'LCD,se puoi evita le situazioni di stallo(es.,se l'arduino manda un solo comando e poi aspetta un ack,non aspettarlo..se invece invii più comandi,intervallati da attese,è un altro discorso)

curiosità:se nel codice che usi per il gsm integri il codice x la scansione dei dispositivi I2c,dato che entrambi i dispositivi sono i2c(trovi lo sketch negli esempi),che succede?

Grazie per i suggerimenti. ....cosa intendi per sfruttarla per bene la libreria GSM.....non sono cosi esperto da individuare quale parte di codice devo modificare e soprattutto se ci riuscissi cosa devo 'limare' oltre ai delay???

m_ri:
curiosità:se nel codice che usi per il gsm integri il codice x la scansione dei dispositivi I2c,dato che entrambi i dispositivi sono i2c(trovi lo sketch negli esempi),che succede?

Se provo a lanciare I2C scanner mi dice che non ci sono devices I2C
....ma mi è sembrata irrilevante come prova xche non funziona anche se stacco la shield GSM......mistero....nessuno ha toccato niente ho solo cambiato board dalla 2009 alla Mega2560....ovviamente al momento non ho la 2009 x vedere se continua a non funzionare.

se invece lanci SOLO lo sketch di scansione dell'I2C,funziona?
(l'I2C nel mega lo colleghi ad altri piedini,rispetto al 2009)..inoltre hai guardato che non ci siano pin usati SIA dal gsm,che dal keypad o LCD contemporaneamente?

tronicman:
Grazie per i suggerimenti. ....cosa intendi per sfruttarla per bene la libreria GSM.....non sono cosi esperto da individuare quale parte di codice devo modificare e soprattutto se ci riuscissi cosa devo 'limare' oltre ai delay???

Giusto per capire se ce la posso fare a fare piccole modifiche che magari possono risolvere.

m_ri:
se invece lanci SOLO lo sketch di scansione dell'I2C,funziona?
(l'I2C nel mega lo colleghi ad altri piedini,rispetto al 2009)..inoltre hai guardato che non ci siano pin usati SIA dal gsm,che dal keypad o LCD contemporaneamente?

Si si ho lanciato solo la scansione e non trovava nessuna device i2c.....per la disposizione dei pin diversi tra le due board confermo che sono collegati giusti......ed invece per i possibili pin in comune posso dire che uso nella GSM i pin 18 e 19 per TX e RX poi il 9 per il TURN ON e ovviamente 5v e GND gli atri 30 31 32 33 ecc per il keypad.....a occhio non dovrebbero andare in conflitto.

le modifiche che accennavo probab non cambiano la situazione, viste le tue risposte..
scusme, ma se colleghi al mega solo il keypad e l'lcd,e lanci lo sketch di scansione,non funge?

m_ri:
le modifiche che accennavo probab non cambiano la situazione, viste le tue risposte..
scusme, ma se colleghi al mega solo il keypad e l'lcd,e lanci lo sketch di scansione,non funge?

No non funge. . ..ma come posso ovviare a questo problema del ritardo sulla seriale

ok, allora cambia il titolo e l'argomento della discussione..è l'LCD a non funzionare,lo shield gsm non c'entra niente..se connetti solo l'lcd(senza keypad) continua a non funzionare,vero?