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 presentartiIN 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.
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 : ... 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! 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...
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.
//#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