Go Down

Topic: accendere e spegnere con cellulare (Read 1 time) previous topic - next topic

stefa24

Aug 25, 2012, 05:02 pm Last Edit: Aug 25, 2012, 05:07 pm by stefa24 Reason: 1
ciao
applicazione terminata, scopo accendere e spegnere una utenza elettrica con la chiamata da cell, applicazione banale lo so, sotto lo sketch migliorabile sviluppato con arduino 101

stefano
Code: [Select]

/*
SparkFun Cellular Shield - Pass-Through Sample Sketch
SparkFun Electronics
Written by Ryan Owens
CC by v3.0
3/8/10
max current 330 mA when 'ringing'

versione 25ago2012 stefano
*/
int led13=13;  //led per accensione
int led12=12;  //led per spegnimento
int i;   //contatore

//#include <NewSoftSerial.h>  //Include the NewSoftSerial library to send serial commands to the cellular module.
#include <SoftwareSerial.h>  //per la comuncazione con il modem
#include <string.h>         //per le stringhe

char incoming_char=0;//Will hold the incoming character from the Serial Port.
String stringOne,substringa;

SoftwareSerial cell(3,2);  //Create a 'fake' serial port. cell(RX,TX)
 
void setup()
{
pinMode(led13,OUTPUT);
 digitalWrite(led13,LOW);
pinMode(led12,OUTPUT);
 digitalWrite(led12,LOW);
 
 incoming_char=0;  //inizializza
   stringOne="";  //inizializza
     substringa="";  //inizializza
     
 i=0;  //inizializza
 
 Serial.begin(9600);  //Initialize serial ports for communication.
 cell.begin(9600);  //Initialize serial ports for communication.
 delay(500);  //pausa
 
 cell.print("AT+CLIP=1 \r\n");
 delay(1000);  //pausa
 
 while(cell.available()>0)
 {
   delay(50);  //pausa
    incoming_char=cell.read();
    // Serial.print(incoming_char);  //stampa di controllo
 }
 delay(5000);
}

void loop()
{
while(cell.available()>0)  //while a character is coming from the terminal to the Arduino
 {
   delay(50);  //pausa
     incoming_char=cell.read();
   
      stringOne+=String(incoming_char);
      stringOne.trim();
 
   //Serial.println(stringOne);  //stampa di controllo
   
  substringa=stringOne.substring(11,24);
 }
 //Serial.println(substringa);  //stampa di controllo
   
if(substringa=="+39**********")  //inserire numero di telefono
{
 switch(i)
 {
case 0:  //per accensione utenza

   cell.println("ATH");  //per interruzione chiamata
     delay(100);  //pausa
   i++;
     
  digitalWrite(led13,HIGH);  //preme pulsante avviamento
    delay(500);  //pausa
  digitalWrite(led13,LOW);  //rilascia pulsante avviamento
    delay(500);  //pausa
   
    while(cell.available()>0)
 {
   delay(50);  //pausa
   cell.read();
    // Serial.print(incoming_char);  //stampa di controllo
 }
 
    incoming_char=0;  //svuota
   stringOne="";  //svuota
     substringa="";  //svuota
       
break;

 case 1:  //per spegnimento utenza
 
   cell.println("ATH");  //per interruzione chiamata
    delay(100);  //pausa
   i--;
     
  digitalWrite(led12,HIGH);  //preme pulsante arresto
    delay(500);  //pausa
  digitalWrite(led12,LOW);  //rilascia pulsante arresto
    delay(100);  //pausa
   
  while(cell.available()>0)
 {
   delay(50);  //pausa
   cell.read();
     //Serial.print(incoming_char);  //stampa di controllo
 }
   
    incoming_char=0;  //svuota
   stringOne="";  //svuota
     substringa="";  //svuota
 
 break;
 }
}    
 //If a character is coming from the the Arduino to the terminal
 if(Serial.available()>0)
{
  incoming_char=Serial.read();  //Get the character coming from the terminal
    cell.print(incoming_char);    //Send the character to the cellular module.
}

}

pablos

scusa, ma spendi qualche parola di descrizione, non è molto chiaro, arduino è collegato a un telefono su linea urbana? chiami col cell casa e arduino risponde riconocendo un tono DTMF ? bho non capisco cosa fai col cell, un numero a caso ...

ciao
no comment

stefa24

ciao
con il cellulare chiami un modem gsm lo sketch ricava il numero chiamante e se uguale a quello memorizzato
Code: [Select]

...
if(substringa=="+39**********")  //inserire numero di telefono
...


esegue i comandi che seguono, alla prima interrompe la chiamata
Code: [Select]
cell.println("ATH");  //per interruzione chiamata
e accende l'utenza,
Code: [Select]
digitalWrite(led13,HIGH);  //preme pulsante avviamento
     delay(500);  //pausa
   digitalWrite(led13,LOW);  //rilascia pulsante avviamento
     delay(500);  //pausa


alla seconda interrompe la chiamata e spegne l'utenza
il tutto è migliorabile

stefano

pablos

Quote
il tutto è migliorabile

soprattutto la descrizione perchè ancora ora secondo me è incomprensibile, il software senza hardware sono parole nel deserto  :D
no comment

stefa24

ciao
mi spiace non voglio fare il prof perchè ne meno di tutti qua dentro, a questo risultato ci sono infatti arrivato dopo molti tentativi, comunque i comandi sono semplici, non ci sono particolari virtuosismi di programmazione

stefano

Go Up