Зависает код ESP8266

Ардуинщики всех стран - объединяйтесь! В этом форуме, конечно.
Ответить
Аватара пользователя
AlltaiR
Родился
Сообщения: 2
Зарегистрирован: Пн ноя 28, 2022 22:23:48

Зависает код ESP8266

Сообщение AlltaiR »

Всем привет.
Такая проблема: создал пару кнопок в HTML, чтобы управлять шаговым двигателем. Суть при нажатии кнопки вверх двигатель делает заданное в коде количество оборотов, вниз аналогично. С браузера посылаю запрос по выданному IP/get1 (вверх). Если прокрутился до конца, посылаю запрос IP/get2 крутится в низ, т.е. все нормально. НО если нажал вверх и во время движения нажал вниз, то скрипт зависает и больше ни на что не реагирует.
Подскажите что нужно поправить, что бы не нужно было ждать пока он докрутится до конца, а можно было прервать и направить в противоположную сторону.
Спасибо.
Спойлер

Код: Выделить всё

#include <CustomStepper.h>
#include <ESP8266WiFi.h> 
#include <ESP8266WebServer.h>
#define verh 0
#define niz 8        
long schet = 0; //Счетчик шагов
long shagi = 0;
CustomStepper stepper(32, 33, 25, 26);
const char* ssid = "xxxxx";    
const char* password = "xxxxx";   
ESP8266WebServer server(80);

void setup() { 
  Serial.begin(115200);
  delay(100);
  Serial.println("Connecting to ");
  Serial.println(ssid); 
  WiFi.begin(ssid, password);   
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  
  Serial.println(WiFi.localIP());

  server.on("/get1", get1);
  server.on("/get2", get2);

  server.begin(); 
  Serial.println("HTTP server started");  
 
  stepper.setRPM(12);   // Устанавливаем кол-во оборотов в минуту
  stepper.setSPR(2048);  
}

void get1()
{  
  shagi = niz;
  server.send ( 200, "text/plain", "works well" );
}

void get2() 
{   
  shagi = verh;
  server.send ( 200, "text/plain", "works well" );
}

void loop() {
  server.handleClient();  // обработка входящих WEB запросов
  
 if (stepper.isDone() && schet < shagi){
    Serial.println("Up");
    stepper.setDirection(CCW);   // Устанавливает направление вращения. Может принимать 3 значения: CW - по часовой, CCW - против часовой
    stepper.rotateDegrees(45);   // В градусах 
    schet++;   
    }
  if (stepper.isDone() && schet > shagi){
    Serial.println("Down");
    stepper.setDirection(CW);
    stepper.rotateDegrees(45);
    schet--;   
    }
stepper.run();
}
Реклама
Аватара пользователя
ART_ME
Друг Кота
Сообщения: 3011
Зарегистрирован: Вс окт 02, 2016 07:34:45

Re: Зависает код ESP8266

Сообщение ART_ME »

ИМХО попробовать заведомо рабочий проект на ту же тему.
Например: https://randomnerdtutorials.com/stepper ... websocket/
Реклама
Morroc
Друг Кота
Сообщения: 19495
Зарегистрирован: Чт фев 20, 2014 18:57:55

Re: Зависает код ESP8266

Сообщение Morroc »

Зависает в каком состоянии то ? Останавливается сразу или доворачивает 45 градусов и больше ничего не делает ? выведите в сериал shagi и schet посмотреть последнее их состояние.
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Аватара пользователя
AlltaiR
Родился
Сообщения: 2
Зарегистрирован: Пн ноя 28, 2022 22:23:48

Re: Зависает код ESP8266

Сообщение AlltaiR »

[uquote="Morroc",url="/forum/viewtopic.php?p=4328372#p4328372"]Зависает в каком состоянии то ? Останавливается сразу или доворачивает 45 градусов и больше ничего не делает ? выведите в сериал shagi и schet посмотреть последнее их состояние.[/uquote]
Доворачивает и останавливается, больше ни на что не реагирует.
Во время движения нажал вниз и остановилось. Но если дать пройти до конца то все работает нормально.
Serial:
Спойлер

Код: Выделить всё

16:29:34.052 -> shagi Up
16:29:34.052 -> 8
16:29:34.052 -> schet Up
16:29:34.052 -> 0
16:29:34.683 -> shagi Up
16:29:34.683 -> 8
16:29:34.683 -> schet Up
16:29:34.683 -> 1
16:29:35.302 -> shagi Up
16:29:35.302 -> 8
16:29:35.302 -> schet Up
16:29:35.302 -> 2
16:29:35.962 -> shagi Up
16:29:35.962 -> 8
16:29:35.962 -> schet Up
16:29:35.962 -> 3
Тоже самое пробовал, но через кнопку, все нормально работает, нажимаешь в момент вращения и начинает крутить в другую сторону.
В чем подвох не пойму.
Я новичок в этом, старайтесь пожалуйста объяснить простыми словами, что поправить.
Спойлер

Код: Выделить всё

#include <CustomStepper.h>
#include "GyverButton.h"
#define verh 0
#define niz 4          //Число шагов для положения
#define seredina 2
boolean stop = 0;
long schet = 0; //Счетчик шагов
long shagi = 0;
CustomStepper stepper(32, 33, 25, 26);
GButton butt1(17); // Кнопка

void setup() {
  Serial.begin(9600);
  stepper.setRPM(12);
  stepper.setSPR(2048);
  butt1.setTimeout(700);
  butt1.setType(LOW_PULL);
  butt1.setDirection(NORM_CLOSE); // NORM_OPEN - кнопка нормально-разомкнутая NORM_CLOSE - нормально-замкнутая
  butt1.setTickMode(AUTO);  //Выставляем опрос кнопок в режим АВТО
}

void loop() {

if (butt1.isSingle()){shagi = niz;}  //одно нажатие
if (butt1.isDouble()){shagi = verh;} //два нажатия
if (butt1.isHolded()){shagi = schet; stop = 1;}

if (stepper.isDone() && schet < shagi){
    Serial.println("Time1");
    stepper.setDirection(CCW);
    stepper.rotate(1);
    schet++;
    }
  if (stepper.isDone() && schet > shagi){
    Serial.println("Time2");
    stepper.setDirection(CW);
    stepper.rotate(1);
    schet--;
    }
  if (stepper.isDone() && stop == 1){
    Serial.println("Time3");
    stepper.setDirection(STOP);
    stepper.rotate();
    stop = 0;    
    }
stepper.run();
}
Реклама
Эиком - электронные компоненты и радиодетали
Ответить

Вернуться в «Arduino»