1. sayfa
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:
& 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? |
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 |
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 |
nan değeri yazıyor |
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. |
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 |
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 |
1. sayfa
Ö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 Ol Şimdi DeğilÜ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.