ardunio kodu yardım

serkan_ss

Üye
Katılım
8 Ara 2018
Mesajlar
5
Puanları
1
Yaş
29
Makine mühendisliği son sınıfım,projemin bir bölümü için gps kullanarak iki koordinat arasındaki mesafeyi ekrana yazdırmam gerekiyor.Kodlarda Haversin formülü kullandım ve ekranda koordinatları görebiliyorum fakat mesafe hesabını ''mesafe= '' şeklinde görüyorum,ardunio konusunda acemiyim hatanın nerde olduğunu bulamadım yardımcı olursanız sevinirim.







#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
float hedefenlem = 36.1200 ;
float hedefboylam = 34.885596 ;
static const int RXPin = 8, TXPin = 9;
static const uint32_t GPSBaud = 9600;
float lat ;
float lng ;


// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
void setup()
{
lcd.begin(16, 2);
Serial.begin(115200);
ss.begin(GPSBaud);

lcd.print(" WELCOME ");
delay(2000);
lcd.clear();
}

void loop()
{
// This sketch displays information every time a new sentence is correctly encoded.
while (ss.available() > 0)
if (gps.encode(ss.read()))
displayInfo();

if (millis() > 5000 && gps.charsProcessed() < 10)
{
lcd.print(F("No GPS detected"));
while(true);
}
{
float enlemfarki = abs(hedefenlem - lat) * 111194.9 ;
float boylamfarki = 111194.9 * abs(hedefboylam - lng) * cos(radians((hedefboylam + lng) / 2));
float mesafe = sqrt(pow(enlemfarki, 2) + pow(boylamfarki, 2));
}
}

void displayInfo()
{
if (gps.location.isValid())
{
lcd.setCursor(0,0);
lcd.print("Lat=");
lcd.print(gps.location.lat(), 6);
lcd.setCursor(0,1);
lcd.print("Lng=");
lcd.print(gps.location.lng(), 6);
delay(3000) ;
lcd.clear();
lcd.print(" mesafe = ");
delay(5000) ;
}
else
{
lcd.setCursor(0,0);
lcd.print(" INVALID ");
}
}


//yeryüzü ortalama çevresi=2x6371000mxpi==40030173m
//delta(d)enlem=(40030173xenlemfarki)/360=111194.9mxenlemfarki
 
* delay(5000);
Öncesinde mesafe yazdıran print
fonksiyonu eksik.
* Ayrıca 'mesafe' değişkeni genel
olarak tanımlanmalı.
* while(true);
Satırı silinmeli.
 
Öncelikle Yardımcı olduğunuz için teşekkürler.Söylediğim gibi arduino konusunda pek bilgiye sahip değilim o yüzden sorularımı mazur görün.İlk olarak yazdığınız hata için ;
lcd.print(" mesafe = "); satırının altına
Serial.print(" mesafe :"); satırını mı eklemeliyim ?
2.si için mesafe değişkeni genel olarak tanımlanmalı derken en baştaki float lng ; nin altına float mesafe ; şeklinde mi tanımlamalıyım ? problemimi tam olarak açıklamam gerekirse ekranı bu şekilde görüyorum
 

Ekli dosyalar

  • 47572690_341608223331491_8381308788979793920_n.jpg
    47572690_341608223331491_8381308788979793920_n.jpg
    51.1 KB · Görüntüleme: 16
C++:
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>


float hedefenlem = 36.1200 ;
float hedefboylam = 34.885596 ;

static const int RXPin = 8, TXPin = 9;
static const uint32_t GPSBaud = 9600;
float lat ;
float lng ;
float mesafe = 0;

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

/*
 *
 */
void setup()
{
  lcd.begin(16, 2);
  Serial.begin(115200);
  ss.begin(GPSBaud);
 
  lcd.print(" WELCOME ");
  delay(2000);
  lcd.clear();
}

/*
 *
 */
void loop()
{
  // This sketch displays information every time a new sentence is correctly encoded.
  while (ss.available() > 0)
  {
    if (gps.encode(ss.read()))
    {
      float enlemfarki = abs(hedefenlem - lat) * 111194.9 ;
      float boylamfarki = 111194.9 * abs(hedefboylam - lng) * cos(radians((hedefboylam + lng) / 2));
      mesafe = sqrt(pow(enlemfarki, 2) + pow(boylamfarki, 2));
      displayInfo();
    }
  }
  while(true)
  {
  }
 
  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    lcd.print(F("No GPS detected"));
    while(true)
    {
    }
  }
}

/*
 *
 */
void displayInfo()
{
  if (gps.location.isValid())
  {
    lcd.setCursor(0,0);
    lcd.print("Lat=");
    lcd.print(gps.location.lat(), 6);
    lcd.setCursor(0,1);
    lcd.print("Lng=");
    lcd.print(gps.location.lng(), 6);
    delay(3000) ;
    lcd.clear();
    lcd.print(" mesafe = ");
    lcd.print(mesafe);
    delay(5000) ;
  }
  else
  {
    lcd.setCursor(0,0);
    lcd.print(" INVALID ");
  }
}


//yeryüzü ortalama çevresi=2x6371000mxpi==40030173m
//delta(d)enlem=(40030173xenlemfarki)/360=111194.9mxenlemfarki
 
Yardımınız için teşekkürler fakat gönderdiğiniz kodları denediğimde welcome yazısından sonra koordinatlar da dahil olmak üzere hiçbir görüntü alamadım.
 
C++:
#include <TinyGPS++.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
float aimlat = 0 ;
float aimlng = 0 ;
static const int RXPin = 8, TXPin = 9;
static const uint32_t GPSBaud = 9600;
float lat ;
float lng ;
float mesafe = 0 ;
float mes1 = 0 ;
float mes2 = 0 ;
float a = 0 ;
float latdif = 0 ;
float lngdif = 0 ;
//son millis değerini tutacağımız değişken
unsigned long lastTime = 0 ;


 
// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
void setup()
{
  lcd.begin(16, 2);
  Serial.begin(115200);
  ss.begin(GPSBaud);
    
  lcd.print("    WELCOME ");
  delay(2000);
  lcd.clear();
}

void loop()
{
aimlat = 37.06173 ;
aimlng = 35.35334 ;

 
  // This sketch displays information every time a new sentence is correctly encoded.
  while (ss.available() > 0)
    if (gps.encode(ss.read()))
    {
latdif = (aimlat - gps.location.lat())*111.1949 ; //km
a=radians((aimlng + gps.location.lng()) / 2) ;
lngdif = 111.1949*((aimlng - gps.location.lng())*(cos(a))) ;
mes1 = pow(latdif, 2);
mes2 = pow(lngdif, 2);
 
mesafe = sqrt(mes1 + mes2);
    }
      displayInfo();

  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    lcd.print(F("No GPS detected"));
    while(true);
  }


}

void displayInfo()
{   
  if (gps.location.isValid())
  {
    lcd.setCursor(0,0);
    lcd.print("Lat=");
    lcd.print(gps.location.lat(), 5);
    lcd.setCursor(0,1);
    lcd.print("Lng=");
    lcd.print(gps.location.lng(), 5);
    delay(3000) ;
    lcd.clear();
    
// deneme bolgesi

//lcd.setCursor(0,0);
//lcd.print("a=");
//lcd.print( a ,5);
//delay(1000) ;
//lcd.clear();
 
//lcd.setCursor(0,0);
  //  lcd.print("aimlat=");
    //lcd.print( aimlat ,5);
   // lcd.setCursor(0,1);
    //lcd.print("aimlng=");
    //lcd.print( aimlng , 5);
    //delay(5000) ;
    //lcd.clear();
//lcd.setCursor(0,0);
    //lcd.print("latdif=");
    //lcd.print(latdif, 5);
    //lcd.setCursor(0,1);
    //lcd.print("lngdif=");
    //lcd.print(lngdif , 5);
    //delay(5000) ;
    //lcd.clear();
//lcd.setCursor(0,0);
    //lcd.print("mes1=");
    //lcd.print( mes1, 5);
    //lcd.setCursor(0,1);
    //lcd.print("mes2=");
    //lcd.print( mes2, 5);
    //delay(5000) ;
    //lcd.clear();
    

//lcd.setCursor(0,0);
//lcd.print(" erasing... ");
  //  lcd.clear();

// deneme bitis
lcd.print("mesafe= ");
 lcd.print(mesafe, 6);
 delay(5000) ;
 lcd.clear();
  }
  else
  {
   lcd.setCursor(0,0);
   lcd.print("    INVALID   ");
   lcd.clear () ;
  }   
}

 
 //yeryüzü ortalama çevresi=2x6371000mxpi==40030173m
 //delta(d)enlem=(40030173xenlemfarki)/360=111194.9mxenlemfarki
 
Merhaba konuyla ilgilendiğiniz için teşekkür ederim,mesafeyi ekrana yazdırma problemini çözdüm.Bundan sonraki aşama ise ekrana belirli aralıklarla hız yazdırma,sanırım millis () komutunu kullanmam gerekiyor.Nasıl bir kod yazmam gerekiyor yardımcı olabilir misiniz ?
 

Forum istatistikleri

Konular
128,179
Mesajlar
915,658
Kullanıcılar
449,940
Son üye
yavuzturan

Yeni konular

Çevrimiçi üyeler

Geri
Üst