Arama butonu
Bu konudaki kullanıcılar: 2 misafir, 2 mobil kullanıcı
26
Cevap
3700
Tıklama
0
Öne Çıkarma
FLOAT Değişkenini EEPROM a aktarma.
P
9 yıl
Teğmen
Konu Sahibi

Float değişkenini EEPROM dan yazdırıyorum. Ve lcd ye gösteriyorum fakat 255 yazısı çıkıyor. ilk kullanımda sanırım öyle oluyor muş. Eeprom read komutunu setupda ilk açılışta kullanmak istiyorum. nasıl yapabilirim.Yani degiskeni butonla değiştireceğim. değiştirdikten sonra eeproma kaydedecek ve de elektrik kesintisinde en son ki float değerine ulaşacak
Örneği gelişi güzel yaptım. Şu anda Kod yanımda olmadığı için.

örnek olarak

float degisken=23,2;

void setup (){
degisken=EEPROM.read(3);
}
void loop(){
while(menubuton==1){
EEPROM.write(3,degisken);
}
}

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



L
9 yıl
Binbaşı

Bu yazdırdığın 8 bitlik değerler. Float'lar 32 bittir. (https://en.wikipedia.org/wiki/Single-precision_floating-point_format )

Doğrudan bellekten okuyup kopyala:

 
for(x=0;x<4;x++) eeprom.write(A+x, ((char*) & degisken)[x] );


& degisken diyerek adresini belirttim, sonra (char*) ile burayı bir 8 bitlik bir veri olarak görmesini sağladım. Bundan sonra 32 bitlik verinin başlangıcı olarak sıradan bir array gibi (örnekteki gibi) [] kullanabilirsin veya + - ile pointer aritmetiği uygulayabilirsin.





< Bu mesaj bu kişi tarafından değiştirildi Liu Kang -- 27 Ağustos 2016; 23:23:12 >
Bu mesaja 2 cevap geldi.
P
9 yıl
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: Liu Kang

Bu yazdırdığın 8 bitlik değerler. Float'lar 32 bittir. (https://en.wikipedia.org/wiki/Single-precision_floating-point_format )

Doğrudan bellekten okuyup kopyala:

 
for(x=0;x<4;x++) eeprom.write(A+x, ((char*) & degisken)[x] );


& degisken diyerek adresini belirttim, sonra (char*) ile burayı bir 8 bitlik bir veri olarak görmesini sağladım. Bundan sonra 32 bitlik verinin başlangıcı olarak sıradan bir array gibi (örnekteki gibi) [] kullanabilirsin veya + - ile pointer aritmetiği uygulayabilirsin.


teşekkür ederim ilginiz için. A+x neyi ifade ediyor . amacım birazda nedenleri ve mantıklarıda öğrenmek. birde neden 3 defa tekrarlattık?





< Bu mesaj bu kişi tarafından değiştirildi prax -- 29 Ağustos 2016; 8:51:51 >

< Bu ileti mobil sürüm kullanılarak atıldı >

P
9 yıl
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: Liu Kang

Bu yazdırdığın 8 bitlik değerler. Float'lar 32 bittir. (https://en.wikipedia.org/wiki/Single-precision_floating-point_format )

Doğrudan bellekten okuyup kopyala:

 
for(x=0;x<4;x++) eeprom.write(A+x, ((char*) & degisken)[x] );


& degisken diyerek adresini belirttim, sonra (char*) ile burayı bir 8 bitlik bir veri olarak görmesini sağladım. Bundan sonra 32 bitlik verinin başlangıcı olarak sıradan bir array gibi (örnekteki gibi) [] kullanabilirsin veya + - ile pointer aritmetiği uygulayabilirsin.


A+x olarak kabul etmiyor..
bende
for(int x=0;x<4;x++){
EEPROM.write(x,((char*) & degisken
}

yaptım fakat kabul olmuyor alakasız sayılar çıkıyor .

Setup Bölümüne de
for(int x=0;x<4;x++){
degisken=EEPROM.read(x);
}

yaptım. Ama olmuyor. 29.1 gelmiyor. float olarakda yazmıyor kendi yaptığımda . Bi çare derdime bi çare :D



L
9 yıl
Teğmen

Arduino ile ilgili Türkçe kaynaklarda EEPROM ile ilgili kısımları okuyun. EEPROM.put() ve EEPROM.get() fonksiyonları ile istediginiz veri turunu EEPROM'a aktarabilirsiniz.
Ben kullanmaniz gereken yontemlerden en kolay olani yazayim.

float var = 3.14f;
EEPROM.put(adres, var);
Yukaridaki kisim gerekli veriyi yaziyor.

float okunan;
EEPROM.get(adres, okunan);
Bu da okumak icin gerekli.
Eger float degerini daha once o adrese yazmadan okuma yaparsaniz, hatali veya gecersiz float degeri okuyabilir ve bu haliyle programda kullanmaya calisirsaniz kritik hatalara meydan verebilirsiniz.

https://www.arduino.cc/en/Reference/EEPROMGet
Suna da goz atin bence



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 3 cevap geldi.
P
9 yıl
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: lucky16

Arduino ile ilgili Türkçe kaynaklarda EEPROM ile ilgili kısımları okuyun. EEPROM.put() ve EEPROM.get() fonksiyonları ile istediginiz veri turunu EEPROM'a aktarabilirsiniz.
Ben kullanmaniz gereken yontemlerden en kolay olani yazayim.

float var = 3.14f;
EEPROM.put(adres, var);
Yukaridaki kisim gerekli veriyi yaziyor.

float okunan;
EEPROM.get(adres, okunan);
Bu da okumak icin gerekli.
Eger float degerini daha once o adrese yazmadan okuma yaparsaniz, hatali veya gecersiz float degeri okuyabilir ve bu haliyle programda kullanmaya calisirsaniz kritik hatalara meydan verebilirsiniz.

https://www.arduino.cc/en/Reference/EEPROMGet
Suna da goz atin bence

teşekkür ederim az sonra deneyecem fakat bu float değerinin sonuna ^f^ eklememiz gerekiyor dimi . bende degisken =29.1f;gibi sonuçta ben bu değeri buton ile değiştireceğim



< Bu ileti mobil sürüm kullanılarak atıldı >

P
9 yıl
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: lucky16

Arduino ile ilgili Türkçe kaynaklarda EEPROM ile ilgili kısımları okuyun. EEPROM.put() ve EEPROM.get() fonksiyonları ile istediginiz veri turunu EEPROM'a aktarabilirsiniz.
Ben kullanmaniz gereken yontemlerden en kolay olani yazayim.

float var = 3.14f;
EEPROM.put(adres, var);
Yukaridaki kisim gerekli veriyi yaziyor.

float okunan;
EEPROM.get(adres, okunan);
Bu da okumak icin gerekli.
Eger float degerini daha once o adrese yazmadan okuma yaparsaniz, hatali veya gecersiz float degeri okuyabilir ve bu haliyle programda kullanmaya calisirsaniz kritik hatalara meydan verebilirsiniz.

https://www.arduino.cc/en/Reference/EEPROMGet
Suna da goz atin bence

nan değeri yazıyor



P
9 yıl
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: lucky16

Arduino ile ilgili Türkçe kaynaklarda EEPROM ile ilgili kısımları okuyun. EEPROM.put() ve EEPROM.get() fonksiyonları ile istediginiz veri turunu EEPROM'a aktarabilirsiniz.
Ben kullanmaniz gereken yontemlerden en kolay olani yazayim.

float var = 3.14f;
EEPROM.put(adres, var);
Yukaridaki kisim gerekli veriyi yaziyor.

float okunan;
EEPROM.get(adres, okunan);
Bu da okumak icin gerekli.
Eger float degerini daha once o adrese yazmadan okuma yaparsaniz, hatali veya gecersiz float degeri okuyabilir ve bu haliyle programda kullanmaya calisirsaniz kritik hatalara meydan verebilirsiniz.

https://www.arduino.cc/en/Reference/EEPROMGet
Suna da goz atin bence

loop kısmına

for(int x=4;x<8;x++)
EEPROM.write(0+x, ((char*) & sicaklik)[x] );


setup kısmına ise

for(unsigned int x=4;x<8;x++)
*((char*)&sicaklik+x)=EEPROM.read(0+x);

yaptım fakat ilk çalıştırdığımda oluyor fakat sonra menüler arası geçiş yapmıyor. acaba LCD ye yazdırırken mi hata yapıyorum.

lcd.print(sicaklik,1)

denedim

lcd.print(sicaklik,DEC) denedim. Ne yapmalıyım üstteki mesajda bütün kodlar var.



G
9 yıl
Yarbay

https://www.arduino.cc/en/Reference/EEPROMPut

EEPROM.put() diye bişey varmış bak her türden veriyi yazıyor. Bunu niye kullanmıyorsun?


Bu mesaja 1 cevap geldi.
P
9 yıl
Teğmen
Konu Sahibi

quote:

Orijinalden alıntı: elektro_gadget

https://www.arduino.cc/en/Reference/EEPROMPut

EEPROM.put() diye bişey varmış bak her türden veriyi yazıyor. Bunu niye kullanmıyorsun?

denedim fakat yapamadım. C programlama diline baştan başlıyorum . artık hayırlısı :-) teşekkürler emeği geçen herkese



< Bu ileti mobil sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
E
8 yıl
Onbaşı

Detaylı şekilde inceleyemedim ama eeproma yazarken yazdığın verinin üstüne tekrar yazıyorsun gibi geldi çünkü adres hesaplamaların hatalı görünüyor.

Ben olayın mantığını anlatayım, sen kendin çözersin.

https://www.arduino.cc/en/Reference/EEPROMPut

Burada yazdığına göre EEPROM.put() ın ilk parametresi adres, ikinci parametresi ise eeproma yazılacak nesne. Bu nesne her türlü uzunlukta olabilir. Adres ise 0'dan başlıyor ve eeprom boyutuna kadar gidiyor. Diyelim eeprom 512 byte ise adres 0-511 arasıdır. Bir veri yazdığın zaman adresi verinin uzunluğu kadar arttıracaksın, 1 değil! Eğer nesnenin kaç byte kapladığından emin değilsen sizeof() operatörünü kullanabilirsin. Örnek olarak eepromun en başından itibaren birkaç nesne yazdıralım. Tabi okurken de aynı şekilde yapacaksın.

unsigned int adres = 0;
byte a;
float b;
int c;
...

EEPROM.put(adres, a); // adres = 0
adres += sizeof(a);
EEPROM.put(adres, b); // adres = 1
adres += sizeof(b);
EEPROM.put(adres, c); // adres = 5




Bu mesajda bahsedilenler: @berk263
DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.