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..
?

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..
?

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 stringyou 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 pinyou 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
Post a Comment