Вопрос по переменным

LamaKING
Offline
Зарегистрирован: 16.02.2018

В скетче, в переменные заносятся данные.

Как сделать так, чтобы при отключении/перезагрузке ардуино, данные с переменных не сбрасывались?

vvadim
Offline
Зарегистрирован: 23.05.2012

при изменении данных записывать их в EEPROM, а при включении мк в сетапе прочитать из памяти.

LamaKING
Offline
Зарегистрирован: 16.02.2018

А подскажи, как это реализовать?

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

Прочитал, по примеру немного не понял. Если не затруднит, подскажи пожалуйста, как это реализовать в вот этом коде,чтобы  значение hour записывалось.

hour = (millis()-timemark)/MSEK_PER_HOUR; 
	  if (hour == 8)
	   {
  if (an_3 > 40000)
  {
digitalWrite(len, HIGH);
digitalWrite(cpr, LOW);
delay(600000);
  }
	    timemark=millis();
	   }
	  else {
	   
	  }

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

LamaKING, по Вашему описанию не совсем понятно, чего именно Вы хотите.

В зависимости от того, что Вам нужно, может, поможет совет совет из ответа №1, м может, Вам достаточно будет просто описать ваши "переменные" как константы (const).

LamaKING
Offline
Зарегистрирован: 16.02.2018

У меня в скетче идет отчет времени и раз в 8 часов выполняется определенная функция.

Допустим отчет дошел до 6 часов, а питание пропало на ардуине. И я хочу, чтобы значение 6 оставалось, а не скидывалось.

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

А если питание пропало на три часа, то событие произойдет через 13... Смысла от такого хранения нет никакого.

vk007
Offline
Зарегистрирован: 16.06.2015

Есть несколько вариантов.

Первый - использовать аккумулятор в качестве резервного питания и забыть о перебоях в напряжении.

Второй - ардуиной мониторить напряжение на блоке питания и как только оно пропало, записывать переменную в EEPROM. На питание ардуины поцепить конденсатор, чтобы он смог ее питать хоть немного времени после пропадания напряжения от блока питания, чтобы успеть записать данные в EEPROM. И развязать диодом блок питания и ардуину с конденсатором, чтобы не было влияния заряда конденсатора на мониторинг напряжения.

Третий - периодически записывать состояние переменной в EEPROM, помня об ограниченном количестве циклов записи туда.

Четвертый - использовать RTC и читать время оттуда.

vvadim
Offline
Зарегистрирован: 23.05.2012

LamaKING пишет:

У меня в скетче идет отчет времени и раз в 8 часов выполняется определенная функция.

Допустим отчет дошел до 6 часов, а питание пропало на ардуине. И я хочу, чтобы значение 6 оставалось, а не скидывалось.

ну так кждую минуту записывайте время в память.

vvadim
Offline
Зарегистрирован: 23.05.2012

LamaKING пишет:

Прочитал, по примеру немного не понял. Если не затруднит, подскажи пожалуйста, как это реализовать в вот этом коде,чтобы  значение hour записывалось.

hour = (millis()-timemark)/MSEK_PER_HOUR; 
	  if (hour == 8)
	   {
  if (an_3 > 40000)
  {
digitalWrite(len, HIGH);
digitalWrite(cpr, LOW);
delay(600000);
  }
	    timemark=millis();
	   }
	  else {
	   
	  }

 

 

какая то пурга с такими делеями))))

вы же миллис используете, так вместо делеев и запускайте таймер.

LamaKING
Offline
Зарегистрирован: 16.02.2018

В ардуино я всего неделю, по этому незнаю как)))

vvadim
Offline
Зарегистрирован: 23.05.2012

ну раз всего неделю, то сначала почитайте что то по программированию, хотя бы с этого начните

http://arduino.ru/Reference

разбейте свою задачу на несколько простых этапов, сначала их доведите, а потом собирайте до кучи.

LamaKING
Offline
Зарегистрирован: 16.02.2018

С этим всем ознакомился) И это предпоследний этап, который нужно реализовать

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

vvadim пишет:

ну так кждую минуту записывайте время в память.

При таком раскладе еепрома хватит на 2а месяца. (Гарантированных даташитом) если миллион циклов взять то на год.

vvadim
Offline
Зарегистрирован: 23.05.2012

мы же не знаем на сколько нужно готовое устройство))))

ну и никто не запрещает сделать меняющийся адрес при достижении 100000 циклов записи)))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Можно выводить переменные на экран или в монитор порта. Перед выключением питания записывать их на бумажку. А при включении вводить с этой бумажки. И проблема решена.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

ЕвгенийП пишет:

Можно выводить переменные на экран или в монитор порта. Перед выключением питания записывать их на бумажку. А при включении вводить с этой бумажки. И проблема решена.

Это называлось раньше "твёрдая копия"

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Оно самое!