How to take data from gps then send to my phone in arduino uno?

Using TinyGPS on SoftwareSerial + a loop() structure using delay(1000), has very low odds of working. The m counter is really useless here, because loop() will execute 1000's of times while the GPS characters are arriving. And doing a get_position is useless, because you may not have any GPS data yet.

Basically, loop() should be constantly running, without delays. When something important happens (like getting a complete GPS sentence, or enough time has passed), that's when you do your other work (like send an SMS message). The TinyGPS smartDelay is not smart.

You should restructure the loop to look more like this example from the NeoGPS library. All the non-GPS work should be performed where the digitalWrite is in that example (line 62). That's where you would take the time to send an SMS.

The TinyGPS examples are fine by themselves, but it is difficult to extend them to do other things, like send an SMS. As I said, the loop structure must change.

I suggest taking a look at the NeoGPS library I wrote, as the examples are more robust. The library also uses much less RAM and CPU time, but that isn't a big problem if all you need to do is send an SMS message. If you do want to try it, be sure to review the default SoftwareSerial choice.

If you get the simple NMEAblink.ino example to work, I would suggest trying NMEA.ino. Then insert your code into the doSomeWork function. Most of what you have in loop needs to go in the doSomeWork function, which is called only when a complete RMC sentence is received:

#include <SoftwareSerial.h>
#include "SIM900.h"
#include "NMEAGPS.h"
#include "sms.h"

SMSGSM sms;

static NMEAGPS gps;
SoftwareSerial ss(4, 3);
SoftwareSerial SIM900(7, 8);

static uint8_t number_valid_locations = 0; // consecutive good data

void doSomeWork()
{
  char text[60];
  char *ptr = &text[0];

  strcpy( ptr, "Abuwesam Home\nlatitude: " );
  ptr = &ptr[ strlen(ptr) ]; // step to the end
  dtostrf( gps.fix().latitude(), 8, 6, ptr );
  ptr = &ptr[ strlen(ptr) ];
  strcpy( ptr, "\nlongitude: " );
  ptr = &ptr[ strlen(ptr) ];
  dtostrf( gps.fix().longitude(), 8, 6, ptr );

  Serial.println( text );

  gsm.begin(9600); // not listening to GPS any more!
  if (sms.SendSMS("+9999999999", text)) {
    Serial.println("\nSMS sent OK.");
  } else {
    Serial.println("\nError sending SMS.");
  }

  do {} while (1);
}

void setup()
{
  Serial.begin(9600);
  ss.begin(9600);
}

void loop()
{
  while (ss.available()) {

    if (gps.decode( ss.read() ) == NMEAGPS::DECODE_COMPLETED) {

      if (gps.nmeaMessage == NMEAGPS::NMEA_RMC) {

        if (gps.fix().valid.location) {
          number_valid_locations++;

          if (number_valid_locations >= 4) {
            doSomeWork();
            number_valid_locations = 0; // reset counter
          }

        } else // no valid location, reset counter
          number_valid_locations = 0;

      }
    }
  }
}

Regardless of which library you use, you also need to check whether the data is valid. What if your GPS isn't receiving any satellites? It may still send an RMC sentence, but there won't be any lat/lon data. You probably shouldn't send an SMS if the location field is not valid.

Cheers,
/dev