Serial monitöre yazdırılan veriyi eeproma kaydetmek

black3556

Yeni Üye
Katılım
29 Eylül 2022
Mesajlar
2
Sayın arkadaşlar foruma yeni üye oldum.Neo 6gprs arduino modülünden RX,TXpinleri ile seri monütere yazdırdığım enlem ve boylam değerini sistemin ilk çalıştığında eeproma kaydetmek istiyorum aşağıdaki kodda bunu yapmaya çalıştım ama başaramadım internetteki bilgiler belirli bir pin moddan gelen verilerin kaydedilmesi üzerine bu konuda bana yardımcı olursanız sevinirim.Teşekkürler.


C++:
#include <SoftwareSerial.h>
#include <TinyGPS++.h>
#include <SPI.h>              // include libraries
#include <EEPROM.h>

static const int RXPin = 9, TXPin = 8;
static const uint32_t GPSBaud = 9600;

 
 float addres1=0;
 float addres2=10;

 float veri1=0.0000;
 float veri2=0.0000;
 float veritipi1;
 float veritipi2;

 TinyGPSPlus gps;
 SoftwareSerial ss(RXPin, TXPin); // RX 8,TX 9


float latitude,longitude;

//--------------------------------------------------------------
float initialLatitude =EEPROM.get(addres1,veritipi1);
float initialLongitude =EEPROM.get(addres2,veritipi2);
 

char buff[10];
String mylong = ""; // for storing the longittude value
String mylati = ""; // for storing the latitude value





float distance;


void setup()
{
  Serial.begin(9600);
  Serial.println("NEO6M serial initialize");
    ss.begin(GPSBaud);

   veri1=latitude;
 veri2=longitude;


  
 
  EEPROM.put(addres1,veri1);
  EEPROM.put(addres2,veri2);
  delay(100);
   Serial.print(EEPROM.get(addres1,veritipi1));
   Serial.print(EEPROM.get(addres2,veritipi2));
}

void loop()
{
 
  while (ss.available() > 0)
    if  ( gps.encode(ss.read() ) )
    {
 
 latitude = gps.location.lat(), 4 ;
 longitude = gps.location.lng(), 4;

 

 
  mylati = dtostrf(latitude, 3, 4, buff);
  mylong = dtostrf(longitude, 3, 4, buff);
  distance = getDistance(latitude, longitude, initialLatitude, initialLongitude);



  Serial.print("Latitude= "); Serial.println(latitude, 4);
  Serial.print("Longitude= "); Serial.println(longitude, 4);
  Serial.print(F("Speed:"));
  Serial.println(gps.speed.kmph());
  Serial.print(F("Course:"));
 Serial.println(gps.course.deg());
  delay(500);
{


 
}
   
 
  
    }
}
// Calculate distance between two points
float getDistance(float flat1, float flon1, float flat2, float flon2) {
 
  // Variables
  float dist_calc=0;
  float dist_calc2=0;
  float diflat=0;
  float diflon=0;
 
  // Calculations
  diflat  = radians(flat2-flat1);
  flat1 = radians(flat1);
  flat2 = radians(flat2);
  diflon = radians((flon2)-(flon1));
 
  dist_calc = (sin(diflat/2.0)*sin(diflat/2.0));
  dist_calc2 = cos(flat1);
  dist_calc2*=cos(flat2);
  dist_calc2*=sin(diflon/2.0);
  dist_calc2*=sin(diflon/2.0);
  dist_calc +=dist_calc2;
 
  dist_calc=(2*atan2(sqrt(dist_calc),sqrt(1.0-dist_calc)));
 
  dist_calc*=6371000.0; //Converting to meters
 
  Serial.print("DİSTANCE = ");
  Serial.println(distance);
 
  return dist_calc;


}
 
Last edited by a moderator:
Ben bir yerde şöyle kullanmışım.

C++:
float toplam = EEPROM.get(0, veritipi);
  toplam += gelen_para;
 
  EEPROM.put(0, toplam);

Yani temelde çalışması lazım. Önce tek satırı ekle. O çalıştıktan sonra ikinci eklemeyi denersin. Birde adres1 ve 2 değişkenlerinin tipi float olmamalı. int yap onları. Hatta bence değişkene gerek yok. Benim gibi 0 ve 10 koy direk.
 
Ben bir yerde şöyle kullanmışım.

C++:
float toplam = EEPROM.get(0, veritipi);
  toplam += gelen_para;
 
  EEPROM.put(0, toplam);

Yani temelde çalışması lazım. Önce tek satırı ekle. O çalıştıktan sonra ikinci eklemeyi denersin. Birde adres1 ve 2 değişkenlerinin tipi float olmamalı. int yap onları. Hatta bence değişkene gerek yok. Benim gibi 0 ve 10 koy direk.
yanıtınız için çok teşekkür ederim maalesef çalışmıyor yazılıma değerleri elle girersem kaydediyor.
 
Yazdığınız program mikrokontrolör üzerinde çalışırken önce setup() fonksiyonu BİR kere çalışır. Sonra güç kapatılana kadar loop() fonksiyonu tekrar tekrar çalışır.

Siz setup() fonksiyonun daha en başına henüz gps okunup latitude ve logtitude değişkenleri dolmadan eproma yazmışsınız. sonra da aynı şeyi okumuşsunuz. Sonra loop() içerisinde gps koordinatını okutmaya ve seri porta yazdırmaya başlamışsınız.

EEPROMa yazdırdığınız yer;

latitude = gps.location.lat(), 4 ;
longitude = gps.location.lng(), 4;


satırlarından sonra olmalı.
 

Forum istatistikleri

Konular
5,659
Mesajlar
97,354
Üyeler
2,438
Son üye
İbrahimSönmez

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top