using two softwareserial in the code..!


hi everyone!
i need use 2 softwareserial object when run it, cannot recieve last created softwareserial object...
what should do?
i have read examples working technically not in practise..

i tried take coordinates 6 times start gsm modem not working too....

my code trying communicate gps , gsm modem...

pls help,, need advice or solution.. ????  :smiley-eek: :smiley-eek:

code: [select]

#include <tinygps.h>
#include <eeprom.h>
#include <softwareserial.h>

#define  indatalentgth 128
//--------------------------------------------
// bora ciner -- gsm modem home control system
//--------------------------------------------

tinygps gps;

softwareserial gsmserial(2, 3); //softwareserial(rxpin, txpin);
softwareserial ss(5,6);

boolean debug = true;

const int sicaklik_port =12;

const int rolepin1 = 6;     // isiklarin bagli oldugu pin
const int rolepin2 = 7;     // isiklarin bagli oldugu pin
const int rolepin3 = 8;     // isiklarin bagli oldugu pin
const int rolepin4 = 9;     // isiklarin bagli oldugu pin
const int rolepin5 = 10;     // isiklarin bagli oldugu pin
const int rolepin6 = 11;     // isiklarin bagli oldugu pin


string indata = string(indatalentgth); // allocate space string
boolean inputavailable = false;
string strwhichmsg = string(1);
string newmessagedef = string(15);
string messagereadstring = string(10);
string readingfrominbox = string(10);
string sendreadrequest = string(10);
string password = string();
string removecommand = string("at+cmgd=");
string admin_phone_number = string(11);
string durumbilgisistr = string(150);

int gpsoku=true;

void setup()  
{
 serial.begin(9600);
 gsmserial.begin(9600);
 ss.begin(9600);
 
 
 pinmode(rolepin1, output);
 pinmode(rolepin2, output);
 pinmode(rolepin3, output);
 pinmode(rolepin4, output);
 pinmode(rolepin5, output);
 pinmode(rolepin6, output);

 digitalwrite(rolepin1,high);
 digitalwrite(rolepin2,high);
 digitalwrite(rolepin3,high);
 digitalwrite(rolepin4,high);
 digitalwrite(rolepin5,high);
 digitalwrite(rolepin6,high);
 

 newmessagedef = "+cmti: \"sm\",";
 strwhichmsg = "";
 messagereadstring = "at+cmgr=";
 readingfrominbox = "rec unread";

 readpasswordfromeeprom();
 
 serial.print("password =");
 serial.println(password);
 
 if(debug)
 serial.println("setup..! wait 1 sec");
 delay(1000);
 serial.print("_ss_max_rx_buff = ");
 serial.println(_ss_max_rx_buff);
}

void loop() // run on , over
{


bool newdata = false;
 unsigned long chars;
 unsigned short sentences, failed;

if(gpsoku <=5)
  {
   while (ss.available())
   {
     char c = ss.read();
     //serial.write(c); // uncomment line if want see gps data flowing
     if (gps.encode(c)) // did new valid sentence come in?
       {
         printgpsdata();
         gpsoku++;
       }
   }
           
  }
 else{
   
 //-------------------gsm---------------------
 while(gsmserial.available() > 0 )
 {
   inputavailable = true;
   int tmp = gsmserial.read();
   indata += (char) tmp;
   delay(7);
 }
 
 if(inputavailable){
   inputavailable=false;
   processdata();
 }
 indata="";
 //-------------------gsm---------------------
 
 }
}
void printgpsdata(){
 
   float flat, flon;
   unsigned long age;
   gps.f_get_position(&flat, &flon, &age);
   serial.print("lat=");
   serial.print(flat == tinygps::gps_invalid_f_angle ? 0.0 : flat, 6);
   serial.print(" lon=");
   serial.print(flon == tinygps::gps_invalid_f_angle ? 0.0 : flon, 6);
   serial.print(" sat=");
   serial.print(gps.satellites() == tinygps::gps_invalid_satellites ? 0 : gps.satellites());
   serial.print(" prec=");
   serial.println(gps.hdop() == tinygps::gps_invalid_hdop ? 0 : gps.hdop());
 
 
}
void processdata(){
 if(debug){
 serial.println("okudugum veri");
 serial.println(indata);  
 }
 if(thereisnewmessage())
 { // yeni mesaj var
   if(debug)serial.println("yeni mesaj var");
   string sendreadrequest = "";
   sendreadrequest += messagereadstring;
   
   int indexofmsgstr = indata.indexof(newmessagedef);
   indexofmsgstr += newmessagedef.length();
   strwhichmsg = indata.substring(indexofmsgstr , indexofmsgstr+1);
   sendreadrequest +=strwhichmsg;
   
   if(debug){
   serial.print("gonderilen komut = ");
   serial.println(sendreadrequest);
   }
   //gsmserial.println(sendreadrequest); // xxxx inci mesaji oku
   
   
 }else if(isringing())
 { // telefon caliyor
   if(debug)serial.println("telefon caliyor");
   aramayimesgulecevir();    
   removesms();
   
 }else if(readfrominbox())
 {
   takemessagebody();
   processmessagebody();
   removesms();
 }else
 {
   if(debug)serial.println("else");  
 }
 

}

void aramayimesgulecevir(){
 //gsmserial.println("at h");
 delay(50);
}


void takemessagebody(){
if(debug)serial.println("---->takemessagebody");  
int index_of_newline = 0;

int indexofphonestr = indata.indexof("\",\"+9");
indexofphonestr += 5;
admin_phone_number = indata.substring(indexofphonestr , indexofphonestr+11);
if(debug)
{
 serial.print("admin phone number ");
 serial.println(admin_phone_number);
}
 index_of_newline = indata.indexof("rec unread");  
 index_of_newline += 53;
 indata = indata.substring(index_of_newline,index_of_newline+29);

if(debug)
{
 serial.println("message body ===>");
 serial.println(indata);
 serial.println("<----takemessagebody");  
}
}

void processmessagebody(){
....
..
.
..
..
.

code: [select]
string indata = string(indatalentgth); // allocate space string
you should spend time looking @ string class. not comment says.

code: [select]
const int rolepin1 = 6;     // isiklarin bagli oldugu pin
const int rolepin2 = 7;     // isiklarin bagli oldugu pin
const int rolepin3 = 8;     // isiklarin bagli oldugu pin
const int rolepin4 = 9;     // isiklarin bagli oldugu pin
const int rolepin5 = 10;     // isiklarin bagli oldugu pin
const int rolepin6 = 11;     // isiklarin bagli oldugu pin

you ever heard of arrays?

only 1 instance of softwareserial class can listen @ time. never changing instance listening.

you need mega.


Arduino Forum > Using Arduino > Networking, Protocols, and Devices (Moderator: fabioc84) > using two softwareserial in the code..!


arduino

Comments

Popular posts from this blog

Thread: PKI Client 5.00 install (for eToken Pro)

ATmega2560-Arduino Pin Mapping

Crossfader Arduino Tutorial