При включении контроллера игнорировать концевой выключатель

Понимаю. И что кривому скетчу не помочь простым добавлением строки - тоже.

Вот, например, что будет, если в лупе исполнять этот фрагмент с MIN_POSITION = 50, например?

case STATE_MOVE_DOWN:
      //digitalWrite(enPin, LOW); // драйвер шагового двигателя включен
      direction *= -1;
      targetPos = direction * MIN_POSITION;
      stepper.moveTo(targetPos);
      stepper.run();
      if (stepper.distanceToGo() == 0) {
        stepperState = STATE_DOWN;
        //digitalWrite(enPin, HIGH);  // драйвер шагового двигателя отключен
      }
      digitalWrite(relayPin, HIGH);
      break;

Значит нужно задать все начальные значения.

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

Просто нужно добавить пару флагов и присваивать им значение при инициализации.
А в зависимости от состояния флага обрабатывать первый старт.

#include <GyverStepper2.h>
#include <ezButton.h>

GStepper2<STEPPER2WIRE> stepper(800, 14, 12);

uint32_t tar = 234000;

ezButton buttonup (5); //pin D1
ezButton buttondown (4); //pin D2
ezButton stopup(16); //pin D0
ezButton stopdown(0); //pin D3

boolean isStartStopDown;

void setup() {

stepper.setMaxSpeed(9600);
stepper.setAcceleration(3200);  

buttonup.setDebounceTime(50);
buttondown.setDebounceTime(50);
stopup.setDebounceTime(50);
stopdown.setDebounceTime(50);

if(digitalRead(0)==pressed/*pin D3*/)isStopDown=true;
}

void loop() {

buttonup.loop();
buttondown.loop();
stopup.loop();
stopdown.loop();

if (buttonup.isPressed())
stepper.setTarget(tar);
stepper.tick();

if (stopup.isPressed()) 
stepper.brake();
stepper.tick();

if (buttondown.isPressed()) 
stepper.setTarget(0);
stepper.tick();

if (stopdown.isPressed()) {
if(isStartStopDown==false){
stepper.brake();
}
stepper.tick();

if(digitalRead(0)==unpressed/*pin D3*/)isStartStopDown=false;

}

@applecad
вариант из поста 19 чем не устраивает?

А я чего то тут в упор не вижу номера постов.
Что нужно сделать для того, что бы увидеть ?

GPIO0,2 - могут быть входами/выходами с ограничениями. В момент старта оба должны быть подтянуты к питанию.
Свободных от типов загрузки GPIO у ESP8266 всего 2: GPIO4 и GPIO5.

2 лайка

А в целом написано очень черезжопно.
Без учёта инерции и состояния концевиков.
Такое лучше писать на конечном автомате.
Там состояний не много все элементарные.

Смотреть на синюю полоску справа от сообщений.

Да, это наверное более правильно, записывать в переменную состояние концевиков,
и кейсы строить на этом, был у меня где-то такой вариант (один из), но
программа пишется под конкретную задачу, где 1). каретка может (по кнопке) подняться в верхнее положение и два часа простоять так, затем (по кнопке) опуститься еще часа на три,
а выключить-включить контроллер могут произвольно ; 2) в одном из вариантов работы (не в тех скетчах которые здесь) каретка вообще может не доходить до концевиков, (и до верхнего и до нижнего); 3) исключительно важна точность, (количество шагов), поэтому все строится на дистанции и возврату, по шагам, концевики здесь как предохранители, более. Поэтому - просто кейсов, (без проверки на состояние концевиков) вполне достаточно, как мне это представлялось.
Хорошо, допустим добавить переменную и записывать в нее статус для этого нижнего концевика. Только что это дает, тем более что считывать эту переменную будем в loop.
Состояние нижнего концевика заранее известно, что при включении контроллера оно будет
таким-то. Каким образом это можно игнорировать или инвертировать (но до loop и setup)
или отключить?
Здесь как бы обсуждается два вопроса -
один вопрос это каким должен быть скетч (“не кривым”) чтобы нажатый при включении
контроллера кнопка (концевик) не мешал программе,
(спасибо всем за советы, часть я уже проверил)
и второй вопрос на который никто не хочет или не может ответить - тот вопрос
который задавался - как отключить (игнорировать) нажатую в момент включении контроллера кнопку (концевик).

Она у меня есть только когда есть непрочитанные сообщения

Это вопрос из категории :“как насрать на потолок”.
Извращенцы на других форумах сидят

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

Чтобы приоритет был у кнопок - располагайте работу с ними ниже концевиков. Это уже было написано выше.

Логика работы простая - каретка движется вверх и вниз, на определенное количество
шагов шагового двигателя, две кнопки, два концевика. В первую очередь соблюдается это самое количество шагов, концевики же стоят насколько возможно близко к конечным точкам но по сути для подстраховки, стоят на миллиметр “за конечной точкой”. Одновременно,
возможности сразу же “спрыгивать” с концевиков
или как-то парковаться - просто нет. Чисто по механике -
перемещение возможно из одной точки в другую и обратно, только.
Два варианта которые у меня здесь показаны - рабочие, но не работают, если контроллер включается, когда каретка стоит на концевике.

Как выключить эту кнопку/концевик?
“Кривой” у меня скетч (оба два) или нет - но как выключить кнопку/пин/концевик?
Программно выключить? Не в setup, и тем более не в loop (с проверками, условиями, переменными,
это все я уже перепробовал, даже дефайном прописывал отключение)
а вот - выключить? На момент включения контроллера?
Дальше, когда нужно, я сам ее включу (наверное, если буду знать - как отключено)).
Выключить-то - как?

При включении контроллера кнопка будет нажата
(концевик будет прижат) - что с этим можно сделать программно?

Кнопки зачем? Концевики что должны делать?

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

При первом включении в loop в течении какого -то начального времени (мс , сек,час) не обращайте внимание на концевики(введите условие “POXUY=true”) . А потом-все как положено .В чем проблема?

void loop()
{
 if (millis() - poxuyMillis > 100)
  {
//кладем болт на коцевик и делаем всечто надо...
}
else
{
//смотрим на концевик и делаем все что не надо
}
}

Вы уже 60 сообщений твердите одно и тоже, но так и не объяснили, почему это происходит. Чего вы ждете от форума? все решения, что вам предложили - вас не устраивают.

Пока вы не объясните (в первую очередь себе!) почему у вас программа зависает на старте, но не зависает на этом же концевике после старта - все усилия исправить проблему ничего не принесут.

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

В чем выражается вот это “ничего не запускается”? - может у вас контроллер просто не стартует, когда концевик нажат?

Вы вот это читали?

У ЕСП8266 некоторые пины должны быть обязательно в определенном состоянии при запуске, иначе контроллер просто зависнет. Проверьте - когда у вас GPIO0 замкнут на землю, у вас контроллер вообще запускается? Сделайте вывод в Сериал в сетапе или какую-нить лампочку включайте, чтоб видеть что программа не зависла.

Контроллер могут включить например в понедельник в 8:00 утра, а первый раз нажать на кнопку “вверх” в 11:00.