хранение float переменной в eeprom

Павел74
Offline
Зарегистрирован: 27.03.2019

Всем добрый день!

До последнего эксперимента справлялся сам - а тут просто стена: вроде вещи очевидные , но не могу понять - есть цикл , в коотором задаю параметры настройки и храню их как эталонные значения, с целыми числами все работает, а вот значение pH  в моем проекте аква-контроллера не могу реализовать

Вся программа получилась емкая на 48% памяти в UNO? поэтому хотел потренироваться на малом "кусочке" 

#include <EEPROM.h>


void setup() {

 float S=15.3;
    
Serial.begin(9600);
   EEPROM.update(100,S);
Serial.println("1");
Serial.println(EEPROM.read(100));
S=S+0.1;
Serial.println("S");
Serial.print(S);
Serial.println(EEPROM.read(100));
}

void loop() {
  
}

 

Павел74
Offline
Зарегистрирован: 27.03.2019

выдает  в порт в первом случае 15, а во втором 15.4015 ( после запятой важно .40 - остальное не влияет ни на что ) - но почему первый раз значение ячейки возвращается , как "15" , а где все остальное?

 

sadman41
Offline
Зарегистрирован: 19.10.2016

Здесь более уместны EEPROM.put() и EEPROM.get()

Павел74
Offline
Зарегистрирован: 27.03.2019

Спасибо огромное ! 

СУПЕР! Заработало!

Сейчас в общий скейтч все встрою и попробую посмотреть , как на экране меняется настройка вращение ручки энкодера ( кстати с нуля сам не подглядывая написал менюшку с выбором параметра для настройки и занания ему нужного значение используя один энкодер с кнопкой.)

sadman41
Offline
Зарегистрирован: 19.10.2016

Тут у меня есть вам совет: писать в EEPROM не сразу после изменения параметра энкодером, а через несколько секунд после того, как энкодер перестали крутить. Это здорово сэкономит ресурс MK.

Павел74
Offline
Зарегистрирован: 27.03.2019

Воспользуюсь Вашим советом, я уже читал про ограниченный ресурс ячейки памяти , поэтому с энкодера импульсы подаю по 1 шт в 1 секунду (медленно щелкаю плаными поворотами)

Pyotr
Offline
Зарегистрирован: 12.03.2014

Павел, а у Вас что рН и 15 бывает?? ;)

Здесь достаточно типа uint16_t . рН считать в тысячных 6666 = 6.666 до 65 единиц можно намерить;)
И писать в епром только при выходе из редактирования, не спрашивая. 

Павел74
Offline
Зарегистрирован: 27.03.2019

Нет 15 pH не будет ! Просто я разные цифры вгонял пока тренировался, главное, чтобы после запятой цифра сохранялась, а про сохранение в режиме "работа" - после выхода из режима настройка , Вы мне правильно подсказали. Сейчас  я меняю параметры и сохраняю их в памяти: установленное значение температуры, время включения освещения, длительность включения освещения и ... pH.

С float это последнее, что мне нужно освоить в этом проекте - если все заработает - буду считать проект подготовленным к завершению , остается только корпус и кросс-плату на которую все соберу. Корпус вообще не проблема - на нашем предприятии -лазерная резка металлов и программная гибка  это основной процесс.