• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Zapamiętanie nastawy termostatu
#11
(27-12-2015, 11:15)JasQ napisał(a): Oczywiście w ten sposób zapiszesz tylko zmienną "byte lub char" nie zadziała ze zmienną " float , int , long "

zapis dla int , float używamy 2 bajtów

EEPROM.write(1, highByte(wartosc_int) );
EEPROM.write(0, lowByte(wartosc_int) );

odczyt

wartosc_int = (EEPROM.read(1)<<8)+EEPROM.read(0);
Właśnie w ten sposób co podał sztapl zapisuje zmienne int, a twój sposób nie działa dla float, mam liczbę np. 1.5 i jak ją zapisać do eepromu? Wink
 
Odpowiedź
#12
v-cu według sposobu, który podał sztapl zapiszesz zmienną int, ale tylko jeśli nie będzie miała wartości większej niż 255. Jeśli będzie miała większą, to zapiszesz, ale odczytana będzie nieprawidłowa, no bo jedna komórka pamięci ma tylko 8 bitów, czyli 1 bajt, a int ma 2 bajty. Ten sposób, który podał JasQ będzie poprawny tylko dla intów właśnie.. Dla floatów nie, no bo zmienne float mają 4 bajty a nie 2. Ale metodę tą można zmodyfikować tak, żeby właśnie podzielić zmienną float na 4 bajty.
 
Odpowiedź
#13
Spędziłem z 2 godziny nad próbą zapisu float do eepromu, próbowałem na różne sposoby no i niestety nie dało się.
Ale wymyśliłem coś innego Smile
Kod:
int x= 15;  //  do zmiennej int przypisuje 15
eeprom.write(0,x); // zapisuje do eepromu
x = eeprom.read(0); // odczytuje
float y;  // zmienna typu float
y = x/10; // dzielę x przez 10
Serial.print(y,1);  // otrzymuję 1.5


No i takim sposobem otrzymuje swoją zmienną typu float i działa jak ma Wink

Pozdrawiam
 
Odpowiedź
#14
Tak to chyba mogłoby wyglądać. Zapis i odczyt do EEPROM pominąłem, samo dzielenie i łączenie floata.


Kod PHP:
float x;

byte a 255 //wyzerowanie bitów powyżej 1 bajta
byte b = (>> 8) & 255;    //przesunięcie bitów o 8 w prawo i wyzerowanie bitów powyżej 1 bajta
byte c = (>> 16) & 255;
byte d = (>> 24) & 255;

= (<< 24) | (<< 16) | (<< 8) | a
 
Odpowiedź
#15
Witam
Koledzy w najnowszym IDE 1.6.7 w EEPROM library są nowe funkcje (get i put). One rozwiązują problem z floatem automatycznie.
Pozdrawiam
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości