Страница 1 из 1

Однократно считать с EEPROM

Добавлено: 19.04.2017{, 15:04}
kbplug
Добрый день, подскажите пожалуйста как правильно однократно при включении питания ардуино считать данные из EEPROM и присвоить их переменным, я делаю вот так но не уверен что это оптимально:

Изображение

Однократно считать с EEPROM

Добавлено: 19.04.2017{, 15:16}
slavas
да

Однократно считать с EEPROM

Добавлено: 19.04.2017{, 15:23}
kbplug
slavas, Спасибо.

Однократно считать с EEPROM

Добавлено: 19.04.2017{, 17:17}
jonik22sm
Лучше всего делать так
1) создаёш плату №1 туда кидаешь чтение из EEPROM все которые тебе нужны


2) когда открываешь в arduino IDE плату №1 переносишь в область void setup


Однократно считать с EEPROM

Добавлено: 20.04.2017{, 10:56}
slavas
jonik22sm, может асcемблер проще?

Однократно считать с EEPROM

Добавлено: 20.04.2017{, 11:45}
jonik22sm
я когда на работе собирал расходомеры клея то меня только это спасло
а через триггер подглючивало

Добавлено (20.04.2017, 11:45)
---------------------------------------------
зато 100% прочитается 1 раз

Однократно считать с EEPROM

Добавлено: 20.04.2017{, 14:09}
kbplug
jonik22sm, Спасибо буду иметь ввиду.

Однократно считать с EEPROM

Добавлено: 21.04.2017{, 02:09}
Oleg_UA
Можно ещё через условие выполнения платы, главное запись переменной START размещать последней (не раньше платы с чтением)

Однократно считать с EEPROM

Добавлено: 21.04.2017{, 12:21}
Sancho
jonik22sm писал(а):Лучше всего делать так
1) создаёш плату №1 туда кидаешь чтение из EEPROM все которые тебе нужны
2) когда открываешь в arduino IDE плату №1 переносишь в область void setup
Правильное, самое правильное, решение - в void setup

Однократно считать с EEPROM

Добавлено: 21.04.2017{, 12:29}
kbplug
Так может тогда есть смысл попросить автора интегрировать данное решение в FLProg.
Скажем, можна добавить галочку в свойства платы "запускать однократно".

Однократно считать с EEPROM

Добавлено: 21.04.2017{, 12:47}
OlegAn1962
Здесь три решения этого вопроса, нужен еще четвертый?

Однократно считать с EEPROM

Добавлено: 21.04.2017{, 12:56}
kbplug
Нужен один но он должен быть правильный и не должен ни при каких обстоятельствах вызывать ошибок. И если самое правильное, решение - в void setup то хотелось бы чтобы это можно было сделать из FLProg.

Однократно считать с EEPROM

Добавлено: 21.04.2017{, 18:32}
support
В первом посту вы почти правильно описали решение.
На первой плате делаете такую схему


Однократно считать с EEPROM

Добавлено: 21.04.2017{, 19:39}
kbplug
support, Спасибо за ответ.

Однократно считать с EEPROM

Добавлено: 21.04.2017{, 21:44}
jonik22sm
да но он в любом случае читается каждый раз просто выполняется один раз
а если в void setup то он и читается только при загрузке и ВСЁ больше не участвует в коде

Добавлено (21.04.2017, 21:44)
---------------------------------------------
Или я неправ!?

Добавлено (21.04.2017, 21:44)
---------------------------------------------
Мне очень помогло в расходомере

Однократно считать с EEPROM

Добавлено: 21.04.2017{, 22:30}
support
Нет не правы. Вот образец кода который получается

  if (_trgrt1) {
    _gtv1 = (readIntegerFromEEPROM(0, 0, 0x0));
  }

Читается только если  _trgrt1 = 1. А она равнв 1 один раз при пуске контроллера.  В остальных случаях код чтения пропускается

Однократно считать с EEPROM

Добавлено: 22.04.2017{, 12:49}
Oleg_UA
support писал(а):Читается только если  _trgrt1 = 1. А она равнв 1 один раз при пуске контроллера.  В остальных случаях код чтения пропускается
С использованием триггера и нескольких блоков чтения из памяти - программа создаёт столько условий  if (_trgrt2) сколько было создано блоков чтения и две переменные, но  когда создать условие выполнения платы тогда создаётся только одно условие if (var1 == 0) и нужна только одна переменная.
Но в любом случае сделать возможность переноса в void setup() было-бы очень полезно.

//Плата:с триггером

if (1) { if (_trgrt2I) { _trgrt2 = 0;} else {_trgrt2 = 1; _trgrt2I = 1;} } else {_trgrt2 = 0; _trgrt2I = 0;}; 
 if (_trgrt2) {
var2 = (readIntegerFromEEPROM(2, 0, 0x50));
}
if (_trgrt2) {
var3 = (readIntegerFromEEPROM(2, 0, 0x50));
}
if (_trgrt2) {
var4 = (readIntegerFromEEPROM(2, 0, 0x50));
}

//Плата:с условием

if (var1 == 0) {
var2 = (readIntegerFromEEPROM(2, 0, 0x50));
var3 = (readIntegerFromEEPROM(2, 0, 0x50));
var4 = (readIntegerFromEEPROM(2, 0, 0x50));
var1 = 1;
}