AIUTOOOO, problemi con compilazione sketch GSM900

Ciao a tutti, ormai sono mesi che ci pesto la testa, ma senza venirne a capo. Uso Arduino1 con scheda Quad-band scheda di sviluppo scudo gsm gprs sim900 per arduino,. Lo sketch l’ho copiato dal sito
https:\tronixstuff.com /2014/01/08/tutorial-arduino-and-sim900-gsm-modules/” . Lo sketch in questione, all’origine da la possibilità di comandare un solo led, e sin qui tutto ok funziona perfettamente, desideravo aggiungere degli altri led, e così mi sono perso a modificare il codice ma nulla, non c’è verso che vada. Pur ricevendo sul monitor seriale dei messaggi inviati per l’attivazione degli altri led. Lo scudo alimentato con 7,5 volt e 2A, e con l’IDE 1.8.7… Chiedo umilmente se potete aiutarmi grazie.

//#include <GSM.h>
//#include <Arduino.h>
#include <SoftwareSerial.h>;
SoftwareSerial SIM900(7, 8); // Configurare la porta seriale per GSM SIM

char incoming_char=0; //Variabile che salva i caratteri inviati dalla SIM
int salir=0;

int led1 = 10;
int led2 = 11;
int led3 = 12;
int led4 = 13;

void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  Serial.println("a\n");
    // wake up the GSM shield
  SIM900.begin(19200); //Configura velocidad serial para el SIM
  delay(25000); //Ritardo per trovare un NET
  Serial.begin(19200); //Configura velocidad serial para el Arduino
  Serial.println("OK"); //OK messaggio sul arduino, per sapere che tutto sta andando bene
pinMode(9, OUTPUT); 
  digitalWrite(9,LOW);
  delay(1000);
  digitalWrite(9,HIGH);
  delay(2000);
  pinMode(9, INPUT);
}
void llamar()
// Funzione che consente di chiamare un telefono cellulare locale
{
  SIM900.println("ATD +393200000003;"); //Celular
  delay(100);
  SIM900.println();
  delay(30000); // wait for 30 seconds...
  SIM900.println("ATH"); //Appendere il telefono
  delay(1000);
}
void mensaje_sms()
//Funcion para mandar mensaje de texto. =Funzione di messaggistica di testo
{
  SIM900.print("AT+CMGF=1\r"); // Comando AT per inviare il messaggio SMS
  delay(100);
  SIM900.println("AT+CMGS=\"+390000000000;\""); //numero di cellulare del destinatario, in formato internazionale
  delay(100);
  SIM900.println("SaluTI DA LUCA"); // messaggio da inviare
  delay(100);
  //SIM900.println("AT + CSCS = "GSM");
  SIM900.println((char)26); // Terminare il comando AT con un codice ^ Z, ASCII 26 // Comando finale
  delay(100);
  SIM900.println();
  delay(5000); // Tempo per il messaggio da inviare
  Serial.println("SMS sent successfully");
}
void espera_mensaje()
{
  salir=1;
  while(salir==1)
  {
    if (SIM900.available()>0)
    {
      incoming_char = SIM900.read(); //Prendi il carattere dalla porta seriale cellulare.
      Serial.print(incoming_char); //Stampare il carattere in entrata nel terminale.
      salir = 0;
    }
  }
}
void modo_recibe_mensaje()
{
  //Impostare la modalità  di testo per inviare o ricevere messaggi
  SIM900.print("AT+CMGF=1\r"); // impostare la modalità  SMS al testo
  delay(100);
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  // sbloccare i contenuti di nuovi SMS al momento della ricezione allo schermo di scansione GSM
  delay(1000);
  //Serial.println("Ready...");
}
//void SIM900power()
// software equivalent of pressing the GSM shield "power" button
//  } 
void loop()
{
  llamar(); //fiamma
  mensaje_sms(); //Envia mensaje
  modo_recibe_mensaje();
  for (;;)
  {
    if (SIM900.available()>0)
    {      
      incoming_char=SIM900.read();
      Serial.print(incoming_char); //Print the incoming character to the terminal.
      if (incoming_char=='#')
      {
        delay(10);
        incoming_char=SIM900.read();
        if (incoming_char=='a')
        {
          delay(10);
          incoming_char=SIM900.read();
          if (incoming_char=='0')
          {
            digitalWrite(led1, LOW);
          }
          else if (incoming_char=='1')
          {
            digitalWrite(led1, HIGH);
          }
          //if (incoming_char=='#')
              {
          delay(10);
          incoming_char = SIM900.read();
          if (incoming_char =='b')
          {
            incoming_char = SIM900.read();
            if (incoming_char =='0')
            {
              digitalWrite(led2, LOW);
            }
            else if (incoming_char =='1')
            {
              digitalWrite(led2, HIGH);
            }
           // if (incoming_char=='#')
                {
            delay(10);
            incoming_char = SIM900.read();
            if (incoming_char =='c')
            {
              incoming_char = SIM900.read();
              if (incoming_char =='0')
              {
                digitalWrite(led3, LOW);
              }
              else if (incoming_char =='1')
              {
                digitalWrite(led3, HIGH);
              }
             // if (incoming_char=='#')
                   {
              delay(10);
              incoming_char = SIM900.read();
              if (incoming_char =='d')
              {
                delay(10);
                incoming_char = SIM900.read();
                if (incoming_char == '0')
                {
                  digitalWrite(led4, LOW);
                }
                else if (incoming_char =='1')
                {
                  digitalWrite(led4, HIGH);
                }
              }
            }
            delay(10);
          }
        }
        SIM900.println("AT+CMGD=1,4"); // delete all SMS
      }
    }
  }
}
}
}
}

Prima di tutto, nella sezione in lingua Inglese si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post ...

... poi, essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Il tuo post è già stato spostato nell'opportuna sezione del forum "Italiano”dove puoi proseguire.

Buona sera Guglielmo, pensavo che non potendo pubblicarlo quì in lingua italiana , ho pensato che avrei dovuto postarlo in altra pagina!!! di certo non volevo fare cross-posting. Grazie e scusa, ma non è semplice, devo capire bene come funziona.
Buona serata.
Luca55

Buona sera Guglielmo, non riesco a trovare il mio post, nella sez forum Italiano. desideravo anche cambiare email, quella registrata quì " Kappa155@libero.it" in " Kappa.155@hotmail.it" e possibile? Grazie

Nel tuo thread ci stai scrivendo, è questo ... bastava guardassi il primo post e leggessi attentamente quello che ti avevo scritto nel post #1:

gpb01:
P.S.: Il tuo post è già stato spostato nell'opportuna sezione del forum "Italiano”dove puoi proseguire.

In merito all'eMail non sono certo che si possa fare ::slight_smile: ... vedi se ci riesci dal tuo profilo, altrimenti puoi provare a contattare (con i tempi del caso) webmaster (at) arduino.cc (ovviamnete togliendo gli spazi e mettendo al posto di (at) il simbolo @).

Guglielmo

P.S.: Che ne dici inoltre di accorciare quel "poema" che hai nel profilo? ... ogni tuo post, anche di una riga, occupa mezza pagina! :grin: Grazie.

per la mail si può fare senza problemi (l'ho fatto) solo se quella vecchia è ancora attiva! altrimenti dovrai contattare il webmaster come dice Guglielmo... :wink:

Grazi Guglielmo, e grazie anche a te Patrik

Ciao Buonasera a tutti, ma nessuno può aiutarmi?

Buongiorno, non so se la mia richiesta e postata male, oppure nessuno la legge. Qualcuno può darmi una dritta.
Grazie e AUGURI a tutti.

ciao...non me ne intendo di moduli GSM...però posso dirti che se identi correttamente il codice ti accorgi che hai messo una serie di istruzioni all'interno di parentesi graffe che non sono legate ad alcunche (if, if else, else etc)...sono quelle nel loop() subito dopo le righe commentate...ovviamente anche le relative chiusure...poi ci sono gli ultimi due if ('c' e 'd') che sono uno all'interno dell'altro...è giusto?

Ciao ORSO2001, ad essere sincero non lo so... avendolo copiato, io desideravo ampliarlo, così inserendo b-c-d, ma funziona solo -a- ora proverò a capire come correggere il codice. se non ti dispiace e vuoi aiutarmi a me faresti un enorme favore!!! CiaoAuguri e Bun Anno

bhe…io un favore te lo posso anche fare (vedi il programma di seguito)…non so se è quello che vuoi fare tu…ho solo messo un po’ in ordine seguendo la logica che i tuoi messaggi saranno o #a1/#a0 o #b1/#b0 o #c1/#c0 o #d1/#d0…però lasciami dire che non mi piace proprio come è strutturato sto codice.
prova e facci sapere.

//#include <GSM.h>
//#include <Arduino.h>
#include <SoftwareSerial.h>;
SoftwareSerial SIM900(7, 8); // Configurare la porta seriale per GSM SIM

char incoming_char = 0; //Variabile che salva i caratteri inviati dalla SIM
int salir = 0;

int led1 = 10;
int led2 = 11;
int led3 = 12;
int led4 = 13;

void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  Serial.println("a\n");
  // wake up the GSM shield
  SIM900.begin(19200); //Configura velocidad serial para el SIM
  delay(25000); //Ritardo per trovare un NET
  Serial.begin(19200); //Configura velocidad serial para el Arduino
  Serial.println("OK"); //OK messaggio sul arduino, per sapere che tutto sta andando bene
  pinMode(9, OUTPUT);
  digitalWrite(9, LOW);
  delay(1000);
  digitalWrite(9, HIGH);
  delay(2000);
  pinMode(9, INPUT);
}
void llamar()
// Funzione che consente di chiamare un telefono cellulare locale
{
  SIM900.println("ATD +393200000003;"); //Celular
  delay(100);
  SIM900.println();
  delay(30000); // wait for 30 seconds...
  SIM900.println("ATH"); //Appendere il telefono
  delay(1000);
}
void mensaje_sms()
//Funcion para mandar mensaje de texto. =Funzione di messaggistica di testo
{
  SIM900.print("AT+CMGF=1\r"); // Comando AT per inviare il messaggio SMS
  delay(100);
  SIM900.println("AT+CMGS=\"+390000000000;\""); //numero di cellulare del destinatario, in formato internazionale
  delay(100);
  SIM900.println("SaluTI DA LUCA"); // messaggio da inviare
  delay(100);
  //SIM900.println("AT + CSCS = "GSM");
  SIM900.println((char)26); // Terminare il comando AT con un codice ^ Z, ASCII 26 // Comando finale
  delay(100);
  SIM900.println();
  delay(5000); // Tempo per il messaggio da inviare
  Serial.println("SMS sent successfully");
}
void espera_mensaje()
{
  salir = 1;
  while (salir == 1)
  {
    if (SIM900.available() > 0)
    {
      incoming_char = SIM900.read(); //Prendi il carattere dalla porta seriale cellulare.
      Serial.print(incoming_char); //Stampare il carattere in entrata nel terminale.
      salir = 0;
    }
  }
}
void modo_recibe_mensaje()
{
  //Impostare la modalità di testo per inviare o ricevere messaggi
  SIM900.print("AT+CMGF=1\r"); // impostare la modalità SMS al testo
  delay(100);
  SIM900.print("AT+CNMI=2,2,0,0,0\r");
  // sbloccare i contenuti di nuovi SMS al momento della ricezione allo schermo di scansione GSM
  delay(1000);
  //Serial.println("Ready...");
}
//void SIM900power()
// software equivalent of pressing the GSM shield "power" button
//  }
void loop()
{
  llamar(); //fiamma
  mensaje_sms(); //Envia mensaje
  modo_recibe_mensaje();
  for (;;)
  {
    if (SIM900.available() > 0)
    {
      incoming_char = SIM900.read();
      Serial.print(incoming_char); //Print the incoming character to the terminal.
      if (incoming_char == '#')
      {
        delay(10);
        incoming_char = SIM900.read();
        if (incoming_char == 'a')
        {
          delay(10);
          incoming_char = SIM900.read();
          if (incoming_char == '0')
          {
            digitalWrite(led1, LOW);
          }
          else if (incoming_char == '1')
          {
            digitalWrite(led1, HIGH);
          }
        }

        if (incoming_char == 'b')
        {
          delay(10);
          incoming_char = SIM900.read();
          if (incoming_char == '0')
          {
            digitalWrite(led2, LOW);
          }
          else if (incoming_char == '1')
          {
            digitalWrite(led2, HIGH);
          }
        }

        if (incoming_char == 'c')
        {
          delay(10);
          incoming_char = SIM900.read();
          if (incoming_char == '0')
          {
            digitalWrite(led3, LOW);
          }
          else if (incoming_char == '1')
          {
            digitalWrite(led3, HIGH);
          }
        }

        if (incoming_char == 'd')
        {
          delay(10);
          incoming_char = SIM900.read();
          if (incoming_char == '0')
          {
            digitalWrite(led4, LOW);
          }
          else if (incoming_char == '1')
          {
            digitalWrite(led4, HIGH);
          }
        }
      }
      SIM900.println("AT+CMGD=1,4"); // delete all SMS
    }
  }
}

PS: attenzione che le due #include all’inizio sono commentate…non so se devi togliere le // di commento ed attivare le librerie.

Grazie ORSO2001, se riesco domani provo, pensi che si possa strutturare meglio? cmq ora provo questo. Sono contento già se va bene questo, grazie ancora ti farò sapere molto presto!!! Ciao buona serata

Ciao ORSO2001, mille grazie, funziona alla grande, sono felicissimo... era da tanto che cercavo di risolvere il problema. Mi dicevi comunque che si potrebbe migliorare questo codice, vogliamo provarci, ancora tante grazie, ciao buona serata.

ciao...sono contento che ti funzioni...ha senso metterci mano se un giorno vorrai ampliare il programma...nel senso fargli fare cose diverse che il solo leggere se c'è un messaggio.

Ciao, sarebbe una cosa fantastica, se puoi ti ringrazio infinitamente ORSO, sei grande!!! Ciao

prova questo:

//#include <GSM.h>
//#include <Arduino.h>
#include <SoftwareSerial.h>;
SoftwareSerial SIM900(7, 8); // Configurare la porta seriale per GSM SIM

char incoming_char = 0; //Variabile che salva i caratteri inviati dalla SIM
int salir = 0;

int led1 = 10;
int led2 = 11;
int led3 = 12;
int led4 = 13;

// prototipi funzioni
void llamar();
void mensaje_sms();
void espera_mensaje();
void modo_recibe_mensaje();

void setup()
{
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  digitalWrite(led1, LOW);
  digitalWrite(led2, LOW);
  digitalWrite(led3, LOW);
  digitalWrite(led4, LOW);
  Serial.println("a\n");
  // wake up the GSM shield
  SIM900.begin(19200); //Configura velocidad serial para el SIM
  delay(25000); //Ritardo per trovare un NET
  Serial.begin(19200); //Configura velocidad serial para el Arduino
  Serial.println("OK"); //OK messaggio sul arduino, per sapere che tutto sta andando bene
  pinMode(9, OUTPUT);
  digitalWrite(9, LOW);
  delay(1000);
  digitalWrite(9, HIGH);
  delay(2000);
  pinMode(9, INPUT);

  // spsostato dal loop al setup
  llamar(); //fiamma
  mensaje_sms(); //Envia mensaje
  modo_recibe_mensaje();
}

void loop()
{
  //se c'è un messaggio
  if (SIM900.available() > 0)
  {
    incoming_char = SIM900.read();
    Serial.print(incoming_char); //Print the incoming character to the terminal.
    if (incoming_char == '#')
    {
      delay(10);
      incoming_char = SIM900.read();
      if (incoming_char == 'a')
      {
        delay(10);
        incoming_char = SIM900.read();
        if (incoming_char == '0')
        {
          digitalWrite(led1, LOW);
        }
        else if (incoming_char == '1')
        {
          digitalWrite(led1, HIGH);
        }
      }

      if (incoming_char == 'b')
      {
        delay(10);
        incoming_char = SIM900.read();
        if (incoming_char == '0')
        {
          digitalWrite(led2, LOW);
        }
        else if (incoming_char == '1')
        {
          digitalWrite(led2, HIGH);
        }
      }

      if (incoming_char == 'c')
      {
        delay(10);
        incoming_char = SIM900.read();
        if (incoming_char == '0')
        {
          digitalWrite(led3, LOW);
        }
        else if (incoming_char == '1')
        {
          digitalWrite(led3, HIGH);
        }
      }

      if (incoming_char == 'd')
      {
        delay(10);
        incoming_char = SIM900.read();
        if (incoming_char == '0')
        {
          digitalWrite(led4, LOW);
        }
        else if (incoming_char == '1')
        {
          digitalWrite(led4, HIGH);
        }
      }
    }
    SIM900.println(F("AT+CMGD=1,4")); // delete all SMS
  }
}

// DICHIARAZIONE FUNZIONI

void llamar()
// Funzione che consente di chiamare un telefono cellulare locale
{
  SIM900.println(F("ATD +393200000003;")); //Celular
  delay(100);
  SIM900.println();
  delay(30000); // wait for 30 seconds...
  SIM900.println(F("ATH")); //Appendere il telefono
  delay(1000);
}
void mensaje_sms()
//Funcion para mandar mensaje de texto. =Funzione di messaggistica di testo
{
  SIM900.print(F("AT+CMGF=1\r")); // Comando AT per inviare il messaggio SMS
  delay(100);
  SIM900.println(F("AT+CMGS=\"+390000000000;\"")); //numero di cellulare del destinatario, in formato internazionale
  delay(100);
  SIM900.println(F("SaluTI DA LUCA")); // messaggio da inviare
  delay(100);
  //SIM900.println("AT + CSCS = "GSM");
  SIM900.println((char)26); // Terminare il comando AT con un codice ^ Z, ASCII 26 // Comando finale
  delay(100);
  SIM900.println();
  delay(5000); // Tempo per il messaggio da inviare
  Serial.println(F("SMS sent successfully"));
}
void espera_mensaje()
{
  salir = 1;
  while (salir == 1)
  {
    if (SIM900.available() > 0)
    {
      incoming_char = SIM900.read(); //Prendi il carattere dalla porta seriale cellulare.
      Serial.print(incoming_char); //Stampare il carattere in entrata nel terminale.
      salir = 0;
    }
  }
}
void modo_recibe_mensaje()
{
  //Impostare la modalità di testo per inviare o ricevere messaggi
  SIM900.print(F("AT+CMGF=1\r")); // impostare la modalità SMS al testo
  delay(100);
  SIM900.print(F("AT+CNMI=2,2,0,0,0\r"));
  // sbloccare i contenuti di nuovi SMS al momento della ricezione allo schermo di scansione GSM
  delay(1000);
}

ho fatto un po’ di ordine…ho eliminato quel for( ; ; ) che vincolava tutto .

Ciao ORSO2001, l’ultimo codice che mi hai mandato, fa sballare il monitor seriale… scrive in continuazione e non prende i comandi. cmq devo dirti che sono già felice!!! ciao grazie
P.S. se quando hai tempo e puoi farmi il codice completo con chiamata in caso si accenda, non so… l’antifurto per dirne una… Ciao