gerkimuyda
New member
По поводу вашего решения: Задаем двигателю крутиться stepper.rotate(); - это постоянный поворот без окончания. Что получаем? На нас нападает сторожевой пес и кусает за попку!while(!stepper.isDone()) {stepper.run();}
Это кроме того, что мы блокируем работу всех остальных фоновых задач SDK (из видимых - вайфай отваливается).
Зачем городить костыли на захламленном неправильном коде, если проще написать сразу правильно?
Что нам надо? Зайти в цикл, пробежаться по нему и выйти вконце (без прерывания в середине).
Что делаем? Вставляем в него stepper.run(); чтобы работал наш моторчик.
Код:
void loop() {
if( !stepper.isDone() ) { stepper.run(); } // Для правильности и программной красоты вставим перед ним проверку.
/* Далее мы пишем код, в котором проверяем подключенность клиента и приход от него команд. Т.е. мы не блокируем работу цикла ожиданием команд,
а выполняем блок действий ТОЛЬКО если есть команды, иначе - продолжаем работу цикла.
*/
WiFiClient client = server.available();
if( client ) {
if( client.available() ) {
String req = client.readStringUntil('\r');
if( req.indexOf("/stepper/up") != -1 ) { /* тут выполняем stepper.disable(); чтобы прервать любые задачи двигателя и нужные нам новые настройки */ }
/* другие блоки запросов */
// Отдаем ответ на наш запрос
client.print( String("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n") + respMsg );
} //client.available
} //client
} //loop()
Поэтому я и говорю, что правильнее и проще с нуля написать код так, как он должен работать. Чем пытаться@gerkimuyda очень тщательно проверил код - но разные замечания имеют разную степень влияния на конечный результат работы программы.
Не переживайте. Мне очень нравится лаконичный и выдержанный стиль вашего общения на форуме. Также приятны совместные диалоги и попытки развязывания тех или иных вопросов.рискую получить кучу критики
delay - приостанавливает выполнение текущего кода на заданное времяЧитал где-то что именно delay ибивает весь процесс, нужно использовать millis. Убрать delay , а правильно ли это будет? Или while заменить if.
millis - возвращает текущее время (со старта процессора)
Если перестроить саму структуру программы, избавившись от delay и white (тех участков, которые блокируют наш основной цикл) - это и будет правильным подходом.
Вот представим ситуацию, что вы в добавок к веб-клиенту решите подключить кнопки к вашему модулю, чтобы не только со смарта управлять поворотом жалюзи (или к чему будет прикреплен шаговый двигатель), но и с выключателя, расположенного возле окна. При старом подходе к алгоритму вы получите "затык" с ожиданием команд через http и полное игнорирование нажатий на кнопки! При новой структуре - вы можете продолжать спокойно работать и даже разобрать ситуацию, если пользователь зажмет кнопку "вверх" и при этом пошлет команду "вниз" (вдруг это хитрый способ блокировки управлением от баловства детей?)