La mia gsm shield non funziona più correttamente !

Salve, stamattina mi è arrivata la mia gsm shield ho inserito un codice di prova ed il modulo ha funzionato senza problemi ! ad un certo punto ho disconnesso il modulo per un aggiornamento l’ho ricollegato ma adesso non funziona niente più bene ! per farvi un’esempio pratico adesso la shield asm legge gli sms soltanto eseguendo il reset del dispositivo togliendolo dall’alimentazione o cliccando sul pulsante “reset” secondo voi cosa può essere successo ?? la cosa assurda è che con lo stesso codice prima funzionava bene e adesso mi legge soltanto gli sms quando la resetto mi legge il primo sms e poi come se non funzionasse più!! vi posto il link della mia asm shield poggiata su una board arduino uno

https://www.arduino.cc/en/Main/ArduinoGSMShield

/*
 SMS heather remote control
 
 This sketch, designed for the GSM shield, allows you to remotely control any
 device connected to your Arduino. By sending an SMS, through certain keywords, 
 it's possible, as in this case, to turn on or off a simple heater.
 
 The GSM module, mounted on an Arduino board, processes the message and executes an action.
 Then, it sends a notification message containing the state of the device.
 If the message doesn't contain any valid keyword, the Arduino doesn't execute any 
 operation and the message is deleted from the sim card. 
 The sketch also manages keywords with uppercase or lowercase.
 
 Circuit:
 * GSM shield and an Arduino board
 * SIM card that can send/receive SMS
 * a relay connected to digital pin 12
 
 based on the ReceiveSMS example by Javier Zorzano / TD
 modified by Federico Vanzati & Alberto Cicchi (03/2013)
 
 */

// include the GSM library
#include <GSM.h>

const int heaterControlPin = 12;

// initialize the library instances
GSM gsmAccess;
GSM_SMS sms;

// Array to hold the number a SMS is retreived from
char senderNumber[20];  

// String to hold the incoming message
String message = "";

// String that will contain the parsed values from the message
String commandID, deviceID;

void setup() 
{
  // set the pin connected to the relay that control the heater as output
  pinMode(heaterControlPin, OUTPUT);

  // initialize serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  } 

  // connection state
  boolean notConnected = true;

  // Start GSM connection
  while(notConnected)
  {
    if(gsmAccess.begin()==GSM_READY)
      notConnected = false;
    else
    {
      Serial.println("Not connected");
      delay(1000);
    }
  }

  Serial.println("GSM initialized");

}

void loop() 
{
  char c;

  // If there are any SMS available  
  if (sms.available())
  {
    Serial.println("Message received from:");

    // Get remote number
    sms.remoteNumber(senderNumber, 20);
    Serial.println(senderNumber);

    // An example of message disposal    
    // Any messages starting with # should be discarded
    // usually anonymous messages starts with #
    if(sms.peek()=='#')
    {
      Serial.println("Discarded SMS");
      sms.flush();
    }

    // Read message bytes and print them
    while(c = sms.read())
      message += c;

    // cancella message ricevuto 
    sms.flush();
    Serial.println("MESSAGE DELETED");
  }

  // if there is a new message start to parse the command and the device to control
  if(message != "") {

    // put the incoming characters that compose the message to lower case
    message.toLowerCase();

    int i=0; 

    // deviceID and commandID are separated by a space
    // find it and store the position in two strings
    while(message.charAt(i) != ' ') i++;

    commandID = message.substring(0,i);
    deviceID = message.substring(i+1, message.length());

    // check the device to control
    if(deviceID == "stufetta")
    {
      //check the command to execute
      if(commandID == "accendi") {
        sendFeedbackSMS(senderNumber, deviceID, "ON");  // send the feedback to the sender
        digitalWrite(heaterControlPin, HIGH);
      }
      if(commandID == "spegni") {
        sendFeedbackSMS(senderNumber, deviceID, "OFF"); // send the feedback to the sender
        digitalWrite(heaterControlPin, LOW);
      }
    }

    // clear the message that has just been processed
    message = "";
  }

  delay(1000);
}

// this function, given a phone number and two strings representing the device and 
// its state send a feedback text message to the phone number
void sendFeedbackSMS(char remoteNum[], String devString, String devState) {
  String txtMsg = devString + " " + devState;
  Serial.println(txtMsg);
  Serial.println(remoteNum);

  sms.beginSMS(remoteNum);
  sms.print(txtMsg);
  sms.endSMS(); 
}

dandi98:
... ad un certo punto ho disconnesso il modulo per un aggiornamento l'ho ricollegato ma adesso non funziona niente più bene !

... che cosa vuol dire ? Che aggiornamento hai fatto ? Quando hai disconnesso il modulo da Arduino, avevi tolto l'alimentazione ?

Guglielmo

Avevo settato i pin analogici su digitale in output per recuperare i pin per il modulo rfid (quello di cui ti parlai ieri) poi ho rimesso tutto com'era ma niente !

Io tolgo sempre l'alimentazione prima scllegare o modificare l'alloggiamento di qualche filo

dandi98:
Avevo settato i pin analogici su digitale in output per recuperare i pin per il modulo rfid (quello di cui ti parlai ieri) poi ho rimesso tutto com'era ma niente !

E a cosa doveva servire impostare gli analogici come pin di I/O ? Quel modulo usa il bus SPI e i pin del SPI sono fissi NON puoi deciderli tu ... 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) ... quindi che volevi fare ? ? ? :o

Guglielmo

dandi98:
Io tolgo sempre l’alimentazione prima scllegare o modificare l’alloggiamento di qualche filo

Ok, bene …
… anche perché, in caso contrario, puoi facilmente fare danni.

Guglielmo

... la prima cosa da farsi è, rimontare il modulo GSM così come era e caricare dall'IDE l'esempio "Receive SMS" che trovi sotto gli esempi della libreria GSM.

Se con quello va ... è un problema del tuo programma.

Guglielmo

Ho provato ma nemmeno va ! È un problema strano come se l'arduino eseguisse il void loop una sola volta durante la sua accensione

in quello sketch che hai messo all'inizio, usano il Pin 12 per comandare un rele'.
Il Pin 12 e' anche il MISO del bus SPI, quello usato dal modulo RFID, o cambi Pin o stacchi il modulo

Ma infatti io l'ho riportato a zero reinserendo di nuovo il programma accendi stufetta e scollegando in modulo rfid ma niente da fare mi funziona solo al promo avvio appena dopo quello non funziona più non rocevendo nessun sms

dandi98:
Ho provato ma nemmeno va ! È un problema strano come se l’arduino eseguisse il void loop una sola volta durante la sua accensione

Cioè hai provato l’esempio allegato all’IDE e dopo il primo SMS si blocca anche quello ?

Hai staccato qualunque altra cosa da Arduino ? Ovvero, hai SOLO Arduino UNO e la GSM Shield, senza null’altro, né fili, né altre schede ?

Guglielmo

c'è collegato un relay... adesso rimuovo anche quello

dandi98:
c'è collegato un relay... adesso rimuovo anche quello

... oltre a rimuoverlo, mi dici esattamente come avevi collegato questo relè ?

Guglielmo

Nulla anche con i relay scollegati e cn l'esempio della libreria gsm Receive SMS da sempre lo stesso problema, cioè riceve il comando soltanto cliccando sul pulsante di reset e per elaborare un nuovo comando dovrei resettarlo nuovamente ! quindi a livello hardware si direbbe funzionante, come se una volt partito non esegue più il loop dopo il primo comando !

Ho notato un altra cosa... di solito quando carichi un nuovo codice i relay dovrebbero spegnersi per qualche attimo (perché la board non si riavvia) invece da quando mi da questo problema la board sembra no riavviarsi quando carico un nuovo codice !!

Ripeto la domanda ...
... quanti relè hai ? Che board relè usi ? Come la colleghi/li colleghi ?

Guglielmo

P.S.: Lo shield GSM lo hai lasciato come arriva ? pin 2, 3 e 7 ?

Lo shield lasciata sempre sui suoi pin
questo è il modello del relay: Modulo Relè 5V Carichi fino 250V 10A - Relay Module Arduino PIC ARM Atmel

Ho usato fino a stamattina 8 di questi relay contemporaneamente alimentandoli dalla bred board con 5v e gnd e ovviamente poi eseguivo il collegamento del relay (IN) ad un qualsiasi pin digitale disponibile che non siamo i pin 2 3 e 7 poi visto che mi servivano più pin per collegale il modulo rfid (che adesso non è più collegato) ho dichiarato i pin analogici come digitali, ho passato 4 relay sui rispettivi pin analogici convertiti in digitali e da quel momento non mi ha funzionato più niente "ma credo per coincidenza" visto che non ho fato altro che spostare i pin da una parte all'altra "ovviamente i pin erano già stati convertiti alla funzione di output digitale

Come credo di averti già detto in passato ... se non metti il link, come vuoi che troviamo di cosa stai parlando ?

Se la board è come quando ti è arrivata e tutto è scollegato e non c'è altro connesso ...
... mi viene in mente solo un qualche guasto ... da capire se ad Arduino UNO o allo shield GSM.

Fai cortesemente anche uno schema dei collegamenti che hai fatto prima di riscontrare il difetto ...
... va bene anche un disegno a penna su un foglio di carta, purché sia esattamente rispondente hai collegamenti.

Guglielmo

Ho provato la gsm shield su un altra board uno ed il problema persiste mi legge il primo mex e poi come se si bloccasse ! ma il primo home lo legge solo all'inizializzazione (quindi per far leggere un mex che mando devo prima inviare il messaggio che non verrà letto poi reietto la asm shield e all'avvio della asm shield arriverà il messaggio mandato prima

ecco un disegno meglio di questo non son riuscito a fare

Guglielmo ho trovato il problema e non è l'hardware ! era la sim card che aveva finito la memoria e andava in blocco durante la lettura dell'sms !! adesso però il problema è come fare a non far memorizzare i messaggi sulla sim ?

... Grrrrrrr ... >:( >:( >:(

Va beh ...
... hai guardato i metodi della libreria GSM ? ha visto il metodo flush() ? Prova a vedere se fa al caso tuo, altrimenti hai solo una soluzione ... studiarti i comandi AT del Quectel M10 e mandare direttamente i comandi invece di passare per la libreria.

Ad esempio, il comando "AT+CMGD" fa esattamente quello che chiedi : Delete SMS Message

Usare direttamente i comandi AT ti da la massima flessibilità e la libertà di fare quello che TU vuoi (... e non quello che vuole l'autore della libreria GSM), ma .. ti avverto, tocca dedicare una bella quantità di tempo a STUDIARLI e CAPIRLI ... quindi .. vedi tu ... ::slight_smile:

Guglielmo