Обработка удержания кнопки , но

Добрый день, коллеги подскажите. Необходимо сделать кнопку “Хард ресет” , для сброса по дефолту настроек EEPROM. С этим проблемы не возникло. Но хотелось бы установить обработку задержки нажатия кнопки - 5 секунд. Но дело в том что ее необходимо “отловить” в setup , то есть только при старте ESP, вот тут организовалась заводка , никак не пойму как это можно реализовать.

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

Ты думаешь кнопки как-то волшебно по-другому работают в setup, или что?

Ну и что сложного? В сетапе считываешь пин кнопки, если нажата, делаешь delay(5000) и снова считываешь. Если по прежнему нажата - делаешь сброс

2 лайка

видно я не так разъяснил
необходимо чтобы при старте контроллера (неважно каком) в случаи если была нажата и удерживаться кнопка в течении 5 секунд вызывать определенную функцию.
но именно при старте.
можно конечно в цикле задать проверку нажатия кнопки , но это будет замедлять каждую загрузку , а этого бы не хотелось.
void setup(){
if (( digitalRead(KEY_RESET)==1) {hard_reset();}
}
понятно что без задержки выглядеть так

во!
как я сам не допер , что просто два раза надо проверить

Можешь программой написать? Если кнопка нажата проверять нажатие пока не отпустили . Если отпустили и время с начала программы больше 5 секунд то сброс по дефолту настроек EEPROM.

if (digitalRead(KEY_RESET)==1) {delay(5000); if (digitalRead(KEY_RESET)==1) hard_reset();}

Если это ардуино, то при нажатие кнопки обычно возвращает 0.

А hard_reset() смогёшь?
Я уж не говорю, что 5 сек удерживать не обязательно при твоём варианте.

5 секунд делается чтобы не спутали с обычным ресетом

void hard_reset(){
delay (300);
EEPROM.put(1,1);
EEPROM.put(2,1);
EEPROM.put(3,0);
EEPROM.put(10,192);
EEPROM.put(11,168);
EEPROM.put(12,4);
EEPROM.put(13,1);
EEPROM.put(15,255);
EEPROM.put(16,255);
EEPROM.put(17,255);
EEPROM.put(18,255);
EEPROM.put(20,192);
EEPROM.put(21,168);
EEPROM.put(22,4);
EEPROM.put(23,1);
EEPROM.put(25,8);
EEPROM.put(26,8);
EEPROM.put(27,4);
EEPROM.put(28,4);
community2="public"; community2.toCharArray(community1, 16); EEPROM.put(30,community1);
hostname2="TERM-SNMP"; hostname2.toCharArray(hostname1, 16); EEPROM.put(90,hostname1);
ssid2="TERM-SNMP"; ssid2.toCharArray(ssid1, 16); EEPROM.put(150,ssid1);
pass2=""; pass2.toCharArray(pass1, 16); EEPROM.put(210,pass1);
oid2=".1.3.6.1.4.1.2020.1."; oid2.toCharArray(oid1, 30); EEPROM.put(270,oid1);
contact2="Admin"; contact2.toCharArray(contact1, 16); EEPROM.put(360,contact1);
system2="ESP-TEMP01"; system2.toCharArray(system1, 16); EEPROM.put(390,system1);
location2="LABORATOY"; location2.toCharArray(location1, 16); EEPROM.put(450,location1);
login2="admin"; login2.toCharArray(login1, 16); EEPROM.put(60,login1);
pass4="admin"; pass4.toCharArray(pass3, 16); EEPROM.put(120,pass3);
EEPROM.commit();
delay (300);
ESP.restart();
}

Пробелы, отступы, табуляция… Тебе эти слова знакомы?

неа,
люблю ровный код и меньше сколотить :slight_smile:
меня бесит когда между каждым операторном ставят табуляцию или пробел.
Видать сказывается восьмидесятые basic ZX и т.п. ненумерованный по построчно код
да и зачем ? учитывая что внутри нет ни функций ни циклов , а любой редактор подсвечивает зарывающие и отрывающие скобки

как убрать кровь из глаз?! И зачем издеваться над несчастным есп? Даже еепром - про утилиты преференсес и nvs мы не слышали.
Ну и за неформатированный код - выкидывать к чертям! Только сектантов нам не хватало! Может еще для плоскоземельщиков раздел завести?
Хотя есть демократичнее решение - автоформат в плагине, иначе пускай бешеный кабан эту галиматью читает!

ну и какое жЫвотное пожаловалось? ;))))

3 лайка

а вот интересно - где и при каких обстоятельствах ты познакомился с ними?

PS лично я, когда программа должна восстанавливать значение из EEPROM делаю там изменения и выставляю в определённой ячейке флаг, при любой перезагрузке считывается этот флаг, выставлен - отрабатываем и сбрасываем, нет - проходим дальше и, не надо никаких кнопок жать при загрузке, тем более если это делается удалённо

1 лайк

Можно по всякому. Обычно задаю значения от и до. И если переменная ЕЕПРОМ в этот диапазон не попадает, присваиваю дефолтное значение.

Господа, Вы сами попросили прислать код , когда вопрос уже был решен в 4 посте …
И после этого обливать “говном” ?
замете кроме Vladimir(v258) никто на вопрос не отвели… только “пальцы гнете” типа Вы крутые а се остальные чмо…
Green сам попросил код ard_reset(); и сам же брезгует смолотить.
ну и кто после этого “быдло” спрашивается?
Я Вас код смотреть не заставлял…

Ну конечно, ты Дартаньян. Какие вопросы.
PS. Самому не стыдно такую порнографию выкладывать? Отвечать не обязательно.

абсолютно не стыдно…

Питона на Вас нет!

А Вы попробуйте с трёх раз угадать.

(интересно, кому и каким боком не угодило это сообщение, что его скрыли за нарушение правил? Каких именно?)

1 лайк