Сохранени в EEPROM при помощи джампера

kost82
Offline
Зарегистрирован: 30.11.2015

Возникла у меня идея сохранения в EEPROM параметров при помощи установки джампера. Суть такова: в разделе setup() подаем на один из свободных пинов логическую единицу (HIGH) и проверяем на соседнем пине уровень сигнала. Если там HIGH (установлена перемычка-джампер), то попадаем в меню настройки. Где энкодером выставляем нужное значение параметра. После того как значение установлено - вытаскиваем "джампер" и значение сохраняется в EEPROM. Кнопка энкодера никуда не подключена, и подключать ее я не хочу, т.к. это два дополнительных провода. То есть управляем только джампером. При этом не хотелось бы при каждом старте делать запись в EEPROM, т.к. ресурс у него ограничен. 

Никак не могу придумать как это проще реализовать. Первое что приходит в голову: сначала считываем значение из EEPROM. Затем, если джампер установлен - попадаем в цикл while в условии у которого - высокий уровень напряжения на пине, замкнутом джампером. Как только while перестал выполняться (разомкнули джампер) - сравниваем исходное значение из EEPROM с текущим значением этой величины (установленной

kost82
Offline
Зарегистрирован: 30.11.2015

Блин, случайно нажал Enter и не могу отредактировать заглавный пост. Админы помогите пожалуйста, дописываю продолжение:

Как только while перестал выполняться (разомкнули джампер) - сравниваем исходное значение из EEPROM с текущим значением этой величины (установленной энкодером) и если величины разные - сохраняем новое значение в EEPROM.

Может есть способ лучше, чтобы отловить размыкание джампера и сохранить значение в EEPROM  только при выходе из цикла while? Или может еще как-то по другому это сделать? Подскажите пожалуйста.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

Проще кнопкой. Если в момен включения нажата, то входим в настройку параметров с последующим сохранением в EEPROM. Не нажата - считываем из EEPROM. Проверку кнопки сделать в setup

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

asam пишет:

Проще кнопкой. Если в момен включения нажата, то входим в настройку параметров с последующим сохранением в EEPROM. Не нажата - считываем из EEPROM. Проверку кнопки сделать в setup

когда не хватает пинов можно и джампером, у меня так и написана программа, если джампер замкнут, был только аналоговый пин A7, далее он используется в датчике тока, то в процедуру настройки, как только сняли, сохраняемся в епром и выходим

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Опять кому то мало циклов перезаписи EEPROM
При правильной организации подсчёта циклов и смены ячеек, если менять значение раз в секунду , если нужно скажем сохранять два байта, то понадобится 578дней, для того, что бы убить весь ресурс EEPROM.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Kakmyc пишет:
Опять кому то мало циклов перезаписи EEPROM При правильной организации подсчёта циклов и смены ячеек, если менять значение раз в секунду , если нужно скажем сохранять два байта, то понадобится 578дней, для того, что бы убить весь ресурс EEPROM.

Это для какой версии IDE?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

ua6em пишет:

Это для какой версии IDE?

А при чем тут версия IDE ?
Два байта оставляем для идентификации номера рабочей ячейки, ещё 4 для подсчёта количества перезеписей.
Остаётся 1018 байт. Если писать 16-битную переменную, то можно менять ячейку 509 раз.
Производитель гарантирует минимум 100 000 циклов.
509*100000=50 900 000 перезеписей.
Если писать раз в секунду, то
50 900 000 /60/60/24= 589 дней.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Если что на эту тему у атмел(микрочип), есть и апноут и исходные коды функций.

https://www.microchip.com//wwwAppNotes/AppNotes.aspx?appnote=en592140

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Kakmyc пишет:
Если что на эту тему у атмел(микрочип), есть и апноут и исходные коды функций. https://www.microchip.com//wwwAppNotes/AppNotes.aspx?appnote=en592140

не далее как вчера у кубинца читал, что с версии 1.8 этот алгоритм уже реализован в библиотеке EEPROM.h
 

kost82
Offline
Зарегистрирован: 30.11.2015

asam пишет:

Проще кнопкой. Если в момен включения нажата, то входим в настройку параметров с последующим сохранением в EEPROM. Не нажата - считываем из EEPROM. Проверку кнопки сделать в setup

Нет, давайте представим, что кнопки нельзя подключать. Для этого есть две причины:

1. у конечного устройства не предусмотрены другие кнопки управления, кроме кнопки reset. Внутри корпуса крепить кнопку некуда, места маловато.

2. Настройка этих параметров нужна один раз за всю жизнь устройства. Ну максимум будет корректировка при смене механики. Поэтому я оставляю три штырька прямо на плате ардуино-нано и при необходимости настройки просто ставлю на два из них джампер. Всего мне надо настроить два параметра (поэтому три штырька). Один раз настроить - и забыть. Это даст возможность не заливать в каждое конкретное устройство свою прошивку, а использовать общую, просто подогнав эти два параметра.

Kakmyc пишет:

Опять кому то мало циклов перезаписи EEPROM

Нет, мне их предостаточно. Просто зачем каждый раз при старте делать эту запись, когда параметры меняются раз в столетие. Большую часть жизни устройства они постоянны.

Основной вопрос: как сделать однократное сохранение в EEPROM при размыкании джампера. Наверно надо было это в раздел "Программирование" запостить.

kost82
Offline
Зарегистрирован: 30.11.2015

Меня вдруг осенило: можно же использовать флаг для обеспечения "бесконечного" цикла while. А затем читать каждый раз состояние пина для выхода из цикла и однократного сохранения в EEPROM:

flag = digitalRead(A1);
while (flag) {
    //действия с энкодером
    if (!digitalRead(A1)) {
      //сохранение в EEPROM
      break;
    }
}

 

Kakmyc
Offline
Зарегистрирован: 15.01.2018

kost82 пишет:

Меня вдруг осенило: можно же использовать флаг для обеспечения "бесконечного" цикла while. А затем читать каждый раз состояние пина для выхода из цикла и однократного сохранения в EEPROM:

flag = digitalRead(A1);
while (flag) {
    //действия с энкодером
    if (!digitalRead(A1)) {
      //сохранение в EEPROM
      break;
    }
}

 

 

Хернёй вас осенило.

Не нужны там никакие флаги и тем более while

Примерно так:

void setup(){
if(digitalRead(pin)==1){ERPROM.put(x,y);

}

 

kost82
Offline
Зарегистрирован: 30.11.2015

На момент выполнения setup() у меня нечего еще сохранять. Где мне брать величины, которые в EEPROM писать?

Именно для этого мне и нужен бесконечный цикл, в котором идет опрос энкодера.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

kost82 пишет:

 

Нет, давайте представим, что кнопки нельзя подключать. Для этого есть две причины:

1. у конечного устройства не предусмотрены другие кнопки управления, кроме кнопки reset. Внутри корпуса крепить кнопку некуда, места маловато.

2. Настройка этих параметров нужна один раз за всю жизнь устройства. 

Ну кнопка, джампер - какая разница. Просто проверяем в момено включения (те в сетап).

Цитата:

На момент выполнения setup() у меня нечего еще сохранять. Где мне брать величины, которые в EEPROM писать?

Именно для этого мне и нужен бесконечный цикл, в котором идет опрос энкодера.

А что изменится на момено Loop()? А энкодер не обязательно в loop вызывать. Можно и на таймер посадить, а можно и по внешним прерываниям обрабатывать. 

kost82
Offline
Зарегистрирован: 30.11.2015

Kakmyc пишет:

Хернёй вас осенило.

Не нужны там никакие флаги и тем более while

Примерно так:

void setup(){
if(digitalRead(pin)==1){ERPROM.put(x,y);

}

Кстати, зачем вы сравниваете булеву величину digitalRead(pin) с единицей во второй строке?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

kost82 пишет:

Kakmyc пишет:

Хернёй вас осенило.

Не нужны там никакие флаги и тем более while

Примерно так:

void setup(){
if(digitalRead(pin)==1){ERPROM.put(x,y);

}

Кстати, зачем вы сравниваете булеву величину digitalRead(pin) с единицей во второй строке?

А с чем ее сравнивать ?
С задницей кенгуру ?

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

ua6em пишет:

asam пишет:

Проще кнопкой. Если в момен включения нажата, то входим в настройку параметров с последующим сохранением в EEPROM. Не нажата - считываем из EEPROM. Проверку кнопки сделать в setup

когда не хватает пинов можно и джампером, 

Причем здесь нехватка пинов? Потом эту кнопку можно для чего угодно другого использовать. Тут главное проверить была ли она нажата в момент включения

kost82
Offline
Зарегистрирован: 30.11.2015

asam пишет:

Ну кнопка, джампер - какая разница. Просто проверяем в момено включения (те в сетап).

В том то и дело, что важна логика: 1. Если джампер замкнут - слушаем энкодер. 2. Когда джампер разомкнули - сохраняем значения в EEPROM. 3. Если джампер изначально не замкнут - пропускаем все это и берем ранее сохраненные значения из EEPROM

asam пишет:

А что изменится на момено Loop()? А энкодер не обязательно в loop вызывать. Можно и на таймер посадить, а можно и по внешним прерываниям обрабатывать. 

В loop() энкодер используется по другому, основному назначению. Я просто хочу использовать его еще и для установки этих параметров, чтобы не городить дополнительных кнопок.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Чтоб таких вопросов у вас больше не возникало предлагаю залить и испытать следующий код:

void setup(){
Serial.begin(9600);
Serial.println(true);
Serial.println(false);
Serial.println(HIGH);
Serial.println(LOW);
}
void loop(){}

 

kost82
Offline
Зарегистрирован: 30.11.2015

Kakmyc пишет:

А с чем ее сравнивать ? С задницей кенгуру ?

Ни с чем ее не надо сравнивать, она уже булева. Можно так писать:

if(digitalRead(pin)){
ERPROM.put(x,y);
}

 

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

kost82 пишет:

 

В том то и дело, что важна логика: 1. Если джампер замкнут - слушаем энкодер. 2. Когда джампер разомкнули - сохраняем значения в EEPROM. 3. Если джампер изначально не замкнут - пропускаем все это и берем ранее сохраненные значения из EEPROM

Ну хоти так, делайте так. Просто поскольку это одноразовое действие, то логичнее это делать в setup

Цитата:

В loop() энкодер используется по другому, основному назначению. Я просто хочу использовать его еще и для установки этих параметров, чтобы не городить дополнительных кнопок.

Ну и используйте на здоровье. И не городите кнопок. В чем проблема-то использовать энкодер в сетапе?

kost82
Offline
Зарегистрирован: 30.11.2015

Так я и хочу это делать в сетапе, но для опроса энкодера нужен цикл, чтоб не выходить из сетапа

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

kost82 пишет:

Так я и хочу это делать в сетапе, но для опроса энкодера нужен цикл, чтоб не выходить из сетапа

Еще раз - 

1 Для обработки энкодера не обязателен цикл. Это можно делать и по внешним прерываниям.

2 Если вы очень хотите обрабатывать энкодер в цикле, то  этот цикл не обязан совпадать с loop

Kakmyc
Offline
Зарегистрирован: 15.01.2018

kost82 пишет:

Kakmyc пишет:

А с чем ее сравнивать ? С задницей кенгуру ?

Ни с чем ее не надо сравнивать, она уже булева. Можно так писать:

if(digitalRead(pin)){
ERPROM.put(x,y);
}

 

Обычно те, кто об этом знает , таких идиотских решений как у вас не ищут.
А дуракам и начинающим надо на пальцах объяснять

kost82
Offline
Зарегистрирован: 30.11.2015

asam пишет:

Еще раз - 

1 Для обработки энкодера не обязателен цикл. Это можно делать и по внешним прерываниям.

2 Если вы очень хотите обрабатывать энкодер в цикле, то  этот цикл не обязан совпадать с loop

Еще раз: есть устройство у которого основная функция - обрабатывать повороты энкодера в цикле loop. К энкодеру присоединен ролик, через который протягивается кабель. Зная длину окружности ролика и количество щелчков энкодера на оборот - вычисляем длину кабеля. Это все делается в loop().

Но ролики бывают разные (желтые, белые, красные :-) ) и энкодеры тоже разные (18, 20, 24 клика/на оборот). Мне нужно при помощи уже существующего энкодера записать в EEPROM два параметра: длину окружности ролика и количество кликов энкодера на один оборот. Я хочу это делать один раз в setup() и потом забыть про эту настройку до тех пор пока что-нибудь не изменится. Например пока не изменится диаметр кабеля, т.к. от этого, как выяснилось, зависит длина на один оборот (чем толще кабель - тем длиннее кусок обернутый вокруг ролика).

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

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

kost82 пишет:

 

 

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

Да сетап выполняется однократно, поэтому однократные действия туда лучше и помещать. А вот насчет быстроты - это уж как захотите. Можно хоть сколько угодно долго. Кто мешает вам получить данные от энкодера в сетапе?

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

kost82 пишет:

Ни с чем ее не надо сравнивать, она уже булева. Можно так писать:

if(digitalRead(pin)){
ERPROM.put(x,y);
}

 

Можно, но авнакод detected.  Функция digitalRead() отдает не bool а самый что ни на есть int пархатый.  Пора менять сишные привычки, писать правильно 

if ( digitalRead(...) == HIGH) ...

 

Срач waiting...  :) 

kost82
Offline
Зарегистрирован: 30.11.2015

Kakmyc пишет:

Обычно те, кто об этом знает , таких идиотских решений как у вас не ищут. А дуракам и начинающим надо на пальцах объяснять

Расскажите мне в чем идиотизм моего решения и как нужно делать правильно? Я собственно за этим сюда и написал.

А дуракам и начинающим надо сразу правильно писать. Они же всю жизнь так и будут это делать.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Пипец на пустом месте так забуксовать.

Лови:

int tickPerRound;
int length PerRound;
void setup(){

EEPROM.get(addr1,tickPerRound);
EEPROM.get(addr2,lengthPerRound);
while(digitalRead(pin1)){
//Следим за энкодером меняем значение
}
EEPROM.put(addr1,tickPerRound);
while(digitalRead(pin2)){
//Следим за энкодером меняем значение
}
EEPROM.put(addr2,lengthPerRound);
}

 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

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

 

kost82
Offline
Зарегистрирован: 30.11.2015

Kakmyc пишет:

Пипец на пустом месте так забуксовать.

Лови:

int tickPerRound;
int length PerRound;
void setup(){

EEPROM.get(addr1,tickPerRound);
EEPROM.get(addr2,lengthPerRound);
while(digitalRead(pin1)){
//Следим за энкодером меняем значение
}
EEPROM.put(addr1,tickPerRound);
while(digitalRead(pin2)){
//Следим за энкодером меняем значение
}
EEPROM.put(addr2,lengthPerRound);
}

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

kost82
Offline
Зарегистрирован: 30.11.2015

v258 пишет:

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

У энкодера кнопка не подключена. Считаем, что ее прото нет.

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

kost82 пишет:

Ни с чем ее не надо сравнивать, она уже булева. Можно так писать:

if(digitalRead(pin)){
ERPROM.put(x,y);
}

 

Можно, но авнакод detected.  Функция digitalRead() отдает не bool а самый что ни на есть int пархатый.  Пора менять сишные привычки, писать правильно 

if ( digitalRead(...) == HIGH) ...

 

Срач waiting...  :) 


Поддержу, ведь пятница жеж )))

в этой конструкции ==HIGH явно лишнее if ( digitalRead(...) ) более чем достаточно

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

ua6em пишет:

в этой конструкции ==HIGH явно лишнее if ( digitalRead(...) ) более чем достаточно

Для махрового Сишника - да.  Или, если бы digitalRead() настоящий bool отдавал, то и для плюсника тоже было бы всё норм. А так, как я уже сказал - авнакод detected. :) 

В качестве затраффки. 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

ua6em пишет:

в этой конструкции ==HIGH явно лишнее if ( digitalRead(...) ) более чем достаточно

Для махрового Сишника - да. 

ты же знаешь, я вообще не сталевар...отдаёт то она отдаёт, да кто бы это взял, я так понимаю конструкция IF читает регистр флагов... ждёмс в мышиных кодах, может кто выложит

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

kost82 пишет:

 

У энкодера кнопка не подключена. Считаем, что ее прото нет.

Ну не подключена и бог с ней. В чем проблема то?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

asam пишет:

kost82 пишет:

 

У энкодера кнопка не подключена. Считаем, что ее прото нет.

Ну не подключена и бог с ней. В чем проблема то?

видимо надо подсказать, как подключить

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

ua6em пишет:

я так понимаю конструкция IF читает регистр флагов

Нахрена? PINx она читает, в порту PORTx

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

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

uint8_t ActiveLevel = LOW; // кнопка подтянута к плюсу, замыкается на землю

if (digitalRead(pin) == ActiveLevel) BOOM();

и пусь ActiveLevel описана в самом начале, но в 100500 строчке кода 

if (digitalRead(pin) == ActiveLevel)

я буду знать, что здесь кнопка именно нажимается. 

kost82
Offline
Зарегистрирован: 30.11.2015

asam пишет:

Ну не подключена и бог с ней. В чем проблема то?

В том, что мне ее настойчиво предлагают подключить, а я сопротивляюсь :-) 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

kost82 пишет:

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

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

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

kost82 пишет:

asam пишет:

Ну не подключена и бог с ней. В чем проблема то?

В том, что мне ее настойчиво предлагают подключить, а я сопротивляюсь :-) 

И зачем? С точки зрения программы, что джампер, что кнопка выглядят абсолютно одинаково.

kost82
Offline
Зарегистрирован: 30.11.2015

v258 пишет:

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

Свободных пинов у меня предостаточно. Дело не в их нехватке. Энкодер вынесен из устройства, и соединяется с ним кабелем, длиной 0.5 метра. Об этом я писал уже. При этом кабель трехжильный, разъем трехконтактный. Как думаете, стоит тянуть четвертую жилу (0.5 м) и менять разъем на четырехконтактый, ради одноразовой настройки устройства? Я считаю, что оно того не стоит.

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

kost82 пишет:

 Энкодер вынесен из устройства, и соединяется с ним кабелем, длиной 0.5 метра. Об этом я писал в заглавном посте. При этом кабель трехжильный, разъем трехконтактный. Как думаете, стоит тянуть четвертую жилу (0.5 м) и менять разъем на четырехконтактый, ради одноразовой настройки устройства? Я считаю, что оно того не стоит.

А кто мешает установить кнопку внутри устройства? Ну да не важно. Что кнопка, что  джаммпер дают один и тот же сигнал. Какой смысл на этом зацикливаться? 

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

kost82 пишет:

Свободных пинов у меня предостаточно. Дело не в их нехватке. Энкодер вынесен из устройства, и соединяется с ним кабелем, длиной 0.5 метра. Об этом я писал в заглавном посте. При этом кабель трехжильный, разъем трехконтактный. Как думаете, стоит тянуть четвертую жилу (0.5 м) и менять разъем на четырехконтактый, ради одноразовой настройки устройства? Я считаю, что оно того не стоит.

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

При чем здесь свободные пины - кнопку энкодера можно подключить к тем же пинам, на которые вы сейчас сажаете джампер. Протянуть два провода и подключить их напрямую. Про разъемы Дюпон никогда не слышали? ))

Впрочем, действительно, это надо было делать сразу ))

kost82
Offline
Зарегистрирован: 30.11.2015

v258 пишет:

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

Да, извиняюсь, это было не в заглавном посте.

Никуда не надо идти. 0.5 метра - это даже меньше расстояния вытянутой руки. Решение вполне нормальное ИМХО, если понимать что делать это нужно только один раз при настройке устройства. Возможно второго раза и не будет никогда. Джампер никуда не завалится, в общем случае это может быть тот-же Дюпонт-проводок мама-мама. После настройки выдергиваем перемычку, закрываем коробку и отдаем устройство конечному пользователю. Он туда никогда не полезет.

Джампер удобен тем, что сохраняет свое положение. Установил перемычку - и крути себе энкодер. Не нужно обрабатывать дребезг. Не нужны никакие флаги/условия. В коде джампер обрабатывать немного проще ИМХО. Логика очень простая: поставил джампер в одно положение, нажал ресет - и вот ты уже в "меню" сохранения первого параметра. Крутишь энкодер, смотришь на его значения на экране. Выдернул джампер - значения сохранились. Поставил во второе положение, нажал ресет - вот ты уже во втором "меню". Выдернул джампер, и все готово. Закрывай коробку и пользуйся.

v258
v258 аватар
Offline
Зарегистрирован: 25.05.2020

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

asam
asam аватар
Offline
Зарегистрирован: 12.12.2018

kost82 пишет:

 

 Поставил во второе положение, нажал ресет - вот ты уже во втором "меню". Выдернул джампер, и все готово. Закрывай коробку и пользуйся.

Ну джампер так джампер. Вопрос же вроде по программированию был. Все с этим стало понятно?

kost82
Offline
Зарегистрирован: 30.11.2015

Да, вопрос решен. Спасибо всем участникам!

b707
Offline
Зарегистрирован: 26.05.2017

пипец... развели 50 сообщений на пустом месте :))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

пипец... развели 50 сообщений на пустом месте :))

так пятница жеж...
У меня приятель попросил джампер, так как нельзя утяжелять конструкцию ни на грамм