Тогда можешь сохранять состояние своего концевика при выключении в энергонезависимую память контроллера. Ну а когда включаешь устройство считывай состояние и продолжай работу программу с того же места от момента выключения.
GPIO0,2 - могут быть входами/выходами с ограничениями. В момент старта оба должны быть подтянуты к питанию.
Свободных от типов загрузки GPIO у ESP8266 всего 2: GPIO4 и GPIO5.
А в целом написано очень черезжопно.
Без учёта инерции и состояния концевиков.
Такое лучше писать на конечном автомате.
Там состояний не много все элементарные.
Да, это наверное более правильно, записывать в переменную состояние концевиков,
и кейсы строить на этом, был у меня где-то такой вариант (один из), но
программа пишется под конкретную задачу, где 1). каретка может (по кнопке) подняться в верхнее положение и два часа простоять так, затем (по кнопке) опуститься еще часа на три,
а выключить-включить контроллер могут произвольно ; 2) в одном из вариантов работы (не в тех скетчах которые здесь) каретка вообще может не доходить до концевиков, (и до верхнего и до нижнего); 3) исключительно важна точность, (количество шагов), поэтому все строится на дистанции и возврату, по шагам, концевики здесь как предохранители, более. Поэтому - просто кейсов, (без проверки на состояние концевиков) вполне достаточно, как мне это представлялось.
Хорошо, допустим добавить переменную и записывать в нее статус для этого нижнего концевика. Только что это дает, тем более что считывать эту переменную будем в loop.
Состояние нижнего концевика заранее известно, что при включении контроллера оно будет
таким-то. Каким образом это можно игнорировать или инвертировать (но до loop и setup)
или отключить?
Здесь как бы обсуждается два вопроса -
один вопрос это каким должен быть скетч (“не кривым”) чтобы нажатый при включении
контроллера кнопка (концевик) не мешал программе,
(спасибо всем за советы, часть я уже проверил)
и второй вопрос на который никто не хочет или не может ответить - тот вопрос
который задавался - как отключить (игнорировать) нажатую в момент включении контроллера кнопку (концевик).
Логика работы простая - каретка движется вверх и вниз, на определенное количество
шагов шагового двигателя, две кнопки, два концевика. В первую очередь соблюдается это самое количество шагов, концевики же стоят насколько возможно близко к конечным точкам но по сути для подстраховки, стоят на миллиметр “за конечной точкой”. Одновременно,
возможности сразу же “спрыгивать” с концевиков
или как-то парковаться - просто нет. Чисто по механике -
перемещение возможно из одной точки в другую и обратно, только.
Два варианта которые у меня здесь показаны - рабочие, но не работают, если контроллер включается, когда каретка стоит на концевике.
Как выключить эту кнопку/концевик?
“Кривой” у меня скетч (оба два) или нет - но как выключить кнопку/пин/концевик?
Программно выключить? Не в setup, и тем более не в loop (с проверками, условиями, переменными,
это все я уже перепробовал, даже дефайном прописывал отключение)
а вот - выключить? На момент включения контроллера?
Дальше, когда нужно, я сам ее включу (наверное, если буду знать - как отключено)).
Выключить-то - как?
При включении контроллера кнопка будет нажата
(концевик будет прижат) - что с этим можно сделать программно?
Отлично!
Составьте матрицу состояний системы на основе данных датчиков. Далее составьте матрицу действий (событий) в каждом состоянии системы.
И, пожалуйста, не говорите, что Вас чморят - это стандартное техническое задание.
При первом включении в loop в течении какого -то начального времени (мс , сек,час) не обращайте внимание на концевики(введите условие “POXUY=true”) . А потом-все как положено .В чем проблема?
void loop()
{
if (millis() - poxuyMillis > 100)
{
//кладем болт на коцевик и делаем всечто надо...
}
else
{
//смотрим на концевик и делаем все что не надо
}
}
Вы уже 60 сообщений твердите одно и тоже, но так и не объяснили, почему это происходит. Чего вы ждете от форума? все решения, что вам предложили - вас не устраивают.
Пока вы не объясните (в первую очередь себе!) почему у вас программа зависает на старте, но не зависает на этом же концевике после старта - все усилия исправить проблему ничего не принесут.
А сама проблема выеденного яйца не стоит. Никакой концевик вообще отключать не нужно!!! Его надо просто не учитывать в начале движения, очем вам тут написали уже, как минимум. с десяток участников.
В чем выражается вот это “ничего не запускается”? - может у вас контроллер просто не стартует, когда концевик нажат?
Вы вот это читали?
У ЕСП8266 некоторые пины должны быть обязательно в определенном состоянии при запуске, иначе контроллер просто зависнет. Проверьте - когда у вас GPIO0 замкнут на землю, у вас контроллер вообще запускается? Сделайте вывод в Сериал в сетапе или какую-нить лампочку включайте, чтоб видеть что программа не зависла.