Kod olusturma hakkinda
  • Merhabalar, Ben gps modulu (GY NEO6MV2) kullanarak arduino ile olusturacagim robotu hedef konuma gondermek istiyorum ( pusula modulude kullanacam )
    Simdi benim sorunum : Son konum ile ilk konum farkini nasil belirticem yazilimda . Yada nasil bir fonkaiyon olusturabilirim her hareketinde tekrar tekrar hesaplasin yardimci olabilirseniz cok sevinirim , iyi gunler
  • gps sadece konum vermez kuzeye gore gıdış açını ve hızını da verir. hedef konumla guncel konum farkını hesaplayacaksın her gps okudugunda ve hedefe olan uzaklığı azaltmaya çalışacaksın.
  • peki hocam hani gps hız ve açıyı felan da veriyor ya biz sadece konumu içeriğini nasıl alabiliriz ?
    Mesela seri monitörde yazıyor konum tarih saat vb.
    biz ordan direk konumu alabilirmiyiz?
  • gelen bilgiyi bir diziye aktarırsın, oradan da ayıklarsın.
  • TinyGps diye bir kütüphane var onu kullanabilirsin.
    Şurada NEMA datalarını da anlatmıştım.
  • Hepinize çok teşekkürler, dün bir tane bulmustum ona bir bakabilirmisiniz acaba ?
    TinyGps i de denicem hocam çok sağolun :)
  • #include < SoftwareSerial.h>

    #define rx1Pin 3 // GPS bağlantısındaki rx pini. GPS.TX <-> ARDUİNO.RX
    #define tx1Pin 4 // GPS bağlantısındaki tx pini. GPS.RX <-> ARDUİNO.TX


    SoftwareSerial gps(rx1Pin, tx1Pin); // GPS modül için kullanılacak seri haberleşme pinleri tanımlanıyor:

    byte byteGPS = 0; // byte veri türü 0-255 arasındaki işaretsiz(pozitif) sayıları sakar.
    int i = 0; // int veri türü 2 byte'lık tam sayıları saklar.
    int durum = 0;
    int uydu = 0;
    char dataGPS[100] = ""; //verilerin kaydedildiği değişken
    char *parca;
    char *GGA[15];


    void string();
    void cikti(char **GGAPrint, char *veri);


    void setup() {
    Serial.begin(9600);
    // GPS seri port için kurulum.

    pinMode(rx1Pin, INPUT);
    pinMode(tx1Pin, OUTPUT);
    gps.begin(9600);

    }


    void loop() {

    while(gps.available())
    {
    memset(dataGPS, 0, sizeof(dataGPS)); // Önceki okumaları kaldırır. dataGPS=0 olacak.
    //memset(p1,p2,p3) : Bu fonksiyon üç tane parametre alır. p3 boyutunda p1 verisine p2 yi atar.

    byteGPS = 0; // Verileri kaldırır.
    byteGPS = gps.read(); // GPS seri porttan gelen verileri okur.
    delay(1000);

    // İstenilen Stringi(Karakter Dizisi) bul.
    while(byteGPS != '$')
    {

    byteGPS = gps.read();
    }
    //Stringi bir diziye kaydet.
    i = 1;
    dataGPS[0] = '$';
    while(byteGPS != '*') // * işaretinin olduğu yer sağlama verilerinin başladığı yerdir //byte GPS * İşertine eşit olmadığı sürece dataGPS dizisine veriler kaydedililir.
    {

    byteGPS = gps.read();
    dataGPS[i] = byteGPS;
    i++;
    }
    dataGPS[i] = '/0';
    string(); // string() olarak tanımladığımız fonksiyonu çağırıyoruz.
    } // GELEN VERİLERİN SONU
    } // LOOP SONU


    /*
    Bu Fonksiyon( İşlev ) enlem ve boylam almak için ihtiyacımız olan verileri tanımlamamıza olanak sağlar ...
    */
    void string()
    {
    i=0;
    memset(GGA, 0 ,sizeof(GGA)); // Önceki okumaları kaldırır.
    parca = strtok(dataGPS, ","); // strtok(): (String Tokenizer): Karakter dizisini parçalamak için kullanılır.
    if (strcmp(parca, "$GPGGA") == 0)
    //strcmp(p1,p2): p1 ve p2'yi karşılaştırır. Eşitse 0, p1 büyükse 0'dan büyük küçükse 0'dan küçük bir değer gönderir.
    {
    while (parca != NULL)
    {
    parca = strtok (NULL, ",");
    GGA[i] = parca;
    i++;
    }

    cikti(GGA, "$GPGGA"); // Verileri görüntülemek için bu fonksiyonu çağırırız.

    }

    }
    /*
    Bu fonksiyon GPS'den alınan verilerin seri monitörde yazılmasını düzenler.
    */
    void cikti(char **GGAPrint, char *veri)
    {
    durum = atoi(GGAPrint[5]); // atoi içindeki strig olan parametresini int türüne çevirir.
    uydu = atoi(GGAPrint[6]);

    if(veri == "$GPGGA" && durum == 1)
    {
    Serial.println("");
    Serial.println("---------------------------------------"); // Verileri satır satır //gönderir. Yani imleci bir alt satıra geçirir.
    Serial.print("UTC Saat -> "); // Veriyi aynı satıra yazar.
    Serial.println(GGAPrint[0]);
    Serial.print("Enlem -> ");
    Serial.print(GGAPrint[1]); //GGAPrint[2] == enlem 1
    Serial.println(GGAPrint[2]); //GGAPrint[2] == enlem 2
    Serial.print("Boylam -> ");
    Serial.print(GGAPrint[3]); //GGAPrint[3] == boylam1
    Serial.println(GGAPrint[4]); //GGAPrint[4] == boylam 2
    Serial.print("GPS Kalitesi : 0=null; 1= GPS sabit -> ");
    Serial.println(durum);
    Serial.print("Uydu Sayısı -> ");
    Serial.println(uydu);
    Serial.print("Yatay Hassasiyet Kaybı -> ");
    Serial.println(GGAPrint[7]);
    Serial.print("Anten Yüksekliği -> ");
    Serial.print(GGAPrint[8]);
    Serial.println(GGAPrint[9]);
    Serial.print("Geoid Ayırma -> ");
    Serial.print(GGAPrint[10]);
    Serial.println(GGAPrint[11]);
    Serial.println("---------------------------------------");
    Serial.println("");

    }

    }

  • bu kodlamadaki cikti fonksiyonundaki degerler var ya hocam direk onların ismini belirterek kullanabilirmiyim yoksa değer döndüren bir fonksiyonamı çevirmeliyim? GGAPrint[1] falan var ya en aşağıda ,onları.

  • Direkt olarak GGAprint[9] gibi kullanabilirsiniz , örneğin anten yüksekliği datasını veriyormuş
  • peki hocam cok sagolun :)

Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Login with Facebook
Açık kaynak kültürü gereği, çözdüğünüz problemlerin çözümlerini paylaşmayı lütfen unutmayın.