цифры в епром

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

Добрый день, есть вопрос)
Как можно записать число 12,34567 в EEPROM для дальнейшего использования в вычислениях?

Пишется только целая часть, дробная отбрасывается (оно и понятно - в епроме int).

Умножал на 100000 перед записью, всё нормально записалось и считалось - 1234567, но вот когда хочу вернуть к первоначальному виду 12,34567 (т.е. делю считанное на 100000) получаю 12.00000 и хоть тресни. Использую EEPROM2.

Посоветуйте как поступить.

ales2k
Offline
Зарегистрирован: 25.02.2013

Добрый день.

А записываешь во float? не в int или byte?

Попробуй делить на 100000.0 - думаю поможет

 

nestandart
nestandart аватар
Offline
Зарегистрирован: 15.06.2011

Вы же сами пишите "оно и понятно - в епроме int"

А как вы думаете тип int может иметь дробные значения ?

Правильно , не может. Так что используйите тип данных float.

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

ales2k пишет:

Попробуй делить на 100000.0 - думаю поможет

 

Ах ты ж ёжик жыш!

Дай Бог тебе здоровья, уважаемый ales2k !

А я себе голову уже сломал, а решение так банально!

maksim
Offline
Зарегистрирован: 12.02.2012
#include <EEPROM.h>

void setup()
{
  float val_1 = 30.12345;
  float val_2 = 0;

  // запись в ЕЕПРОМ
  byte *x = (byte *)&val_1;
  for(int i = 0; i < 4; i++) EEPROM.write(i, x[i]);

  // чтение из ЕЕПРОМ
  byte xx[4];
  for(int i = 0; i < 4; i++) xx[i] = EEPROM.read(i);
  float *y = (float*)&xx;
  val_2 = y[0];

  // выводим в сериал
  Serial.begin(9600);
  Serial.println(val_2, 5);
}

void loop(){}

 

Бублик
Бублик аватар
Offline
Зарегистрирован: 05.12.2012

Спасибо, maksim.

Zen
Offline
Зарегистрирован: 10.12.2015

Добрый день.

В инете не могу найти информацию, прошу оказать помощь в части кода:)

Суть такова есть 4 кнопки (Up, Down, Esc, Enter), есть дисплей 1602 и arduino nano. Надо при помощи этих 4-х кнопок в программу вводить различные уставки типа float с последующей записью в EEPROM.  Например мне надо задать уставку по напряжению отключения 12,6В. Как это организовать? Вариант setpoint=setpoint+0.1; не предлагать:))) Буду очень благодарен если кто подскажет:)

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

setpoint += 0.1

Zen
Offline
Зарегистрирован: 10.12.2015

Yarik.Yar пишет:

setpoint += 0.1

это тот же вариант что я и привел просто по другому записан:) это очень утомительно, особенно если необходимо будет ввести например 65,5В.

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Да ладно, а я не знал...(сарказм)

Можно сделать обработку длинного нажатия и прибавлять в этом случае 1...10...20...50...много

Zen
Offline
Зарегистрирован: 10.12.2015

Yarik.Yar пишет:

Да ладно, а я не знал...(сарказм)

Можно сделать обработку длинного нажатия и прибавлять в этом случае 1...10...20...50...много

как?:) думал как-то завязаться с millis ()..... думаю может сделать прибавление по 0,1, но при длительном удержании кнопки как-то ускорить ввод.....

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014
Zen
Offline
Зарегистрирован: 10.12.2015

первую ссылку видел уже, это не то:) а вот вторая интересней:) буду читать:) спасибо.