Проект умного дома, соединить всё что можно ( я новичок, пришел за помощью)

Пятница
Offline
Зарегистрирован: 10.03.2018
Всем добрый день, вот решил  заняться небольшим проэктом, начинаю с автоматических занавесок, НАписал код но он вместо того что бы бесконечно вращаться, делает один шаг и всё.
Использую модуль ESP 8266, Изидрайвер, и просто шаговый! Что я делаю не так? Почему цикл Stepping не зацикливаеться?




// скетч для вайфай окна 
#include <ESP8266WiFi.h>
#define DIR_PIN D6
#define STEP_PIN D5
#define OPEN_W D1
#define CLOSE_W D2
#define SLIP_PIN D3

const char* ssid = "ASUS";
const char* password = "12369852";
int o = 0;
int c = 0;
int Stepping = false;
int val = 0;

WiFiServer server(80); // порт для сервера

void setup() {
      
  Serial.begin(115200); // устанавливаем скорость соединение
  pinMode(SLIP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  pinMode(OPEN_W, INPUT_PULLUP);
  pinMode(CLOSE_W, INPUT_PULLUP);  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    }
  Serial.println("WiFi connected");
  server.begin();                   // ЗАпуск сервера
  Serial.println("Server started");
}

void loop() {
 
  boolean OPEN = !digitalRead(OPEN_W);   
  boolean CLOS = !digitalRead(CLOSE_W); 

WiFiClient client = server.available();
  if (!client) {
    return;
  }
  while(!client.available()){
    delay(1);
  }
  String req = client.readStringUntil('\r');

  if (req.indexOf("/OPEN")){
      digitalWrite(SLIP_PIN, HIGH);
      Serial.print("Окно открываеться... ");
      o = 1;
      digitalWrite(DIR_PIN, HIGH); //направление на закрытие окна
      Stepping = true; 
  }
   if (req.indexOf("/CLOOSE")){
      digitalWrite(SLIP_PIN, HIGH);
      Serial.print("Окно закрыветься... ");
      c = 1;
      digitalWrite(DIR_PIN, LOW); //направление на открытие окна 
      Stepping = true; 
   }
   
   if (Stepping == true) {
      digitalWrite(STEP_PIN, LOW);
      digitalWrite(STEP_PIN, HIGH);
      delayMicroseconds(400); // чем ниже число  теб быстрее вращаеться двигатель  

  }
     
  if (o == 1 && OPEN == 1){                       // окно открывается и замыкая конечничь останавливает двигатель и переводит драйвер в режим сна
        Serial.println("Окно открыто");
        o = 0;
        Stepping = false;
        client.flush();
        digitalWrite(SLIP_PIN, LOW);

    }
  if (c == 1 && CLOS == 1){                      // окно закрывается и замыкая конечничь останавливает двигатель и переводит драйвер в режим сна 
        Serial.println("Окно закрыто");
        c = 0;
        Stepping = false;
        client.flush();
        digitalWrite(SLIP_PIN, LOW);

      } 
    
    
    }
 

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А цикл-то где? Вы делаете один шаг, а потом снова садитесь на бесконечное ожидание команды с клиента (в строках 51-53)

Пятница
Offline
Зарегистрирован: 10.03.2018
71    if (Stepping == true) {
72       digitalWrite(STEP_PIN, LOW);
73       digitalWrite(STEP_PIN, HIGH);
74       delayMicroseconds(400); // чем ниже число  теб быстрее вращаеться двигатель

Вот этот цыкл должен повторяться пока правда не смениться на лож ..... но нет .... не хочет

И цик ожидания уже удалил, не помогло!

Пятница
Offline
Зарегистрирован: 10.03.2018
Вот исправленая версия, но я что не ничего не пойму! всё сходит с ум, не могу понять ничего!

Если вот тут
while (Stepping == true) { 
digitalWrite(STEP_PIN, LOW);
 delayMicroseconds(400);
 digitalWrite(STEP_PIN, HIGH); 

Поменять на

  if (Stepping == true) {
        digitalWrite(STEP_PIN, LOW);
        delayMicroseconds(400);
        digitalWrite(STEP_PIN, HIGH); 

всё ровно ничего не работает, делает шаг и ждёт, что я не так делаю?!

 

 

// скетч для вайфай окна 
#include <ESP8266WiFi.h>
#define DIR_PIN D6
#define STEP_PIN D5
#define OPEN_W D1
#define CLOSE_W D2
#define SLIP_PIN D3

const char* ssid = "ASUS";
const char* password = "12369852";
int o = 0;
int c = 0;
int Stepping = false;
int val = 0;
int O = 0;
int C = 0;

WiFiServer server(80); // порт для сервера

void setup() {

  void setPort(uint16_t port);
  void setHostname(const char* hostname);
  void setPassword(const char* password);
  void begin();
 
  Serial.begin(115200); // устанавливаем скорость соединение
  pinMode(SLIP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  pinMode(OPEN_W, INPUT_PULLUP);
  pinMode(CLOSE_W, INPUT_PULLUP);  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    }
  Serial.println("WiFi connected");
  server.begin();                   // ЗАпуск сервера
  Serial.println("Server started");
}

void loop() {
 
WiFiClient client = server.available();
  if (!client) {
    return;
  }
  String req = client.readStringUntil('\r');
  
  if (req.indexOf("/OPEN")){
      shag_speed(HIGH, LOW, 1);
  }
   else if (req.indexOf("/CLOOSE")){
      shag_speed(HIGH, HIGH, 2);
   }
}  
   
 void shag_speed(int SLIP_PIN, int DIR_PIN, int GO){  
   
      
    if (SLIP_PIN == HIGH && DIR_PIN == LOW && GO == 1){   
     
      digitalWrite(SLIP_PIN, HIGH);
      Serial.print("Окно открываеться... ");
      o = 1;
      digitalWrite(DIR_PIN, HIGH); //направление на закрытие окна
      Stepping = true;
   }
   if (SLIP_PIN == HIGH && DIR_PIN == HIGH && GO == 2){   
      digitalWrite(SLIP_PIN, HIGH);
      Serial.print("Окно закрыветься... ");
      c = 1;
      digitalWrite(DIR_PIN, LOW); //направление на открытие окна 
      Stepping = true; 
   }

  boolean OPEN = !digitalRead(OPEN_W);   
  boolean CLOS = !digitalRead(CLOSE_W); 

  
  while (Stepping == true) {
        digitalWrite(STEP_PIN, LOW);
        delayMicroseconds(400);
        digitalWrite(STEP_PIN, HIGH);              // чем ниже число  теб быстрее вращаеться двигатель  
  }
  if (o == 1 && OPEN == 1){                       // окно открывается и замыкая конечничь останавливает двигатель и переводит драйвер в режим сна
        Serial.println("Окно открыто");
        o = 0;
        O = 0;
        Stepping = false;
        digitalWrite(SLIP_PIN, LOW);

    }
  if (c == 1 && CLOS == 1){                      // окно закрывается и замыкая конечничь останавливает двигатель и переводит драйвер в режим сна 
        Serial.println("Окно закрыто");
        c = 0;
        C = 0;
        Stepping = false;
        digitalWrite(SLIP_PIN, LOW);

      } 
   }


 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Пятница пишет:

if (Stepping == true) {

Вот этот цыкл должен повторяться пока правда не смениться на лож ..... но нет .... не хочет

Это не цикл и ничего он Вам не должен, тем более повторяться.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Пятница пишет:

Поменять на

Вы что, методом тыка их меняете?

Ну, вот, написали Вы

  while (Stepping == true) {
        digitalWrite(STEP_PIN, LOW);
        delayMicroseconds(400);
        digitalWrite(STEP_PIN, HIGH);              // чем ниже число  теб быстрее вращаеться двигатель  
  }

Зачем?

Ответьте себе (мне не надо, я знаю ответ) на простой вопрос: кто, когда и при каких обстоятельствах изменит Вашу переменную с true на false, чтобы этот цикл смог закончиться?

Пятница
Offline
Зарегистрирован: 10.03.2018

Я понимаю что у меня ошибка именно с этим, но вот ничего не понимаю .... вроде всё правильно! когда открываеться ссылка запускаеться либо открыть либо закрыть, после чего они должны перевести Stepping  в положение правда, а уже конечниками отключить! но он просто игнорирует и проходит дальше, програмированием я начал заниматься сравнительно недавно, и прошу о помощи, показать хотя бы прример того, как правильно должно быть

 

Пятница
Offline
Зарегистрирован: 10.03.2018

НАсчёт while, как я понял эта команда отвечает за постоянное выполнение в скобках пока в скобочках верно! И да он работает, вращаеться, но сделает пару оборотов и висит! Возможно я не вижу чего то очивидного что заставляет модуль висеть!

Вот вариант при котором всё работает но зависает!

 

// скетч для вайфай окна 
#include <ESP8266WiFi.h>
#define DIR_PIN D6
#define STEP_PIN D5
#define OPEN_W D1
#define CLOSE_W D2
#define SLIP_PIN D3

const char* ssid = "ASUS";
const char* password = "12369852";
int o = 0;
int c = 0;
int Stepping = false;
int val = 0;
int O = 0;
int C = 0;

WiFiServer server(80); // порт для сервера

void setup() {

  void setPort(uint16_t port);
  void setHostname(const char* hostname);
  void setPassword(const char* password);
  void begin();
 
  Serial.begin(115200); // устанавливаем скорость соединение
  pinMode(SLIP_PIN, OUTPUT);
  pinMode(DIR_PIN, OUTPUT);
  pinMode(STEP_PIN, OUTPUT);
  pinMode(OPEN_W, INPUT_PULLUP);
  pinMode(CLOSE_W, INPUT_PULLUP);  
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    }
  Serial.println("WiFi connected");
  server.begin();                   // ЗАпуск сервера
  Serial.println("Server started");
}

void loop() {
 
WiFiClient client = server.available();
  if (!client) {
    return;
  }
  String req = client.readStringUntil('\r');
  
  if (req.indexOf("/OPEN")){
      shag_speed(HIGH, LOW, 1);
  }
   else if (req.indexOf("/CLOOSE")){
      shag_speed(HIGH, HIGH, 2);
   }
}  
   
 void shag_speed(int SLIP_PIN, int DIR_PIN, int GO){  
   
      
    if (SLIP_PIN == HIGH && DIR_PIN == LOW && GO == 1){   
     
      digitalWrite(SLIP_PIN, HIGH);
      Serial.print("Окно открываеться... ");
      o = 1;
      digitalWrite(DIR_PIN, HIGH); //направление на закрытие окна
      Stepping = true;
   }
   if (SLIP_PIN == HIGH && DIR_PIN == HIGH && GO == 2){   
      digitalWrite(SLIP_PIN, HIGH);
      Serial.print("Окно закрыветься... ");
      c = 1;
      digitalWrite(DIR_PIN, LOW); //направление на открытие окна 
      Stepping = true; 
   }

  boolean OPEN = !digitalRead(OPEN_W);   
  boolean CLOS = !digitalRead(CLOSE_W); 

  
  while (Stepping == true) {
        digitalWrite(STEP_PIN, LOW);
        delayMicroseconds(400);
        digitalWrite(STEP_PIN, HIGH);              // чем ниже число  теб быстрее вращаеться двигатель  
        
  if (o == 1 && OPEN == 1){                       // окно открывается и замыкая конечничь останавливает двигатель и переводит драйвер в режим сна
        Serial.println("Окно открыто");
        o = 0;
        O = 0;
        Stepping = false;
        digitalWrite(SLIP_PIN, LOW);

    }
  if (c == 1 && CLOS == 1){                      // окно закрывается и замыкая конечничь останавливает двигатель и переводит драйвер в режим сна 
        Serial.println("Окно закрыто");
        c = 0;
        C = 0;
        Stepping = false;
        digitalWrite(SLIP_PIN, LOW);

      } 
   }
 }

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Знаете, если Вы настолько не умеете программировать, то Вам просто рано делать "умный дом". Намучаетесь и окончательно потеряете веру в себя. Возьмите нормальный учебник программирования и попробуйте сделать проектик попроще. Потом вернётесь к умному дому уже на новом уровне.

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Это из серии 

Вовочка отвечает на уроке биологии:
- Длина крокодила от головы до хвоста - 5 метров, а от хвоста до головы - 7 метров...
- Подумай, что ты говоришь, - перебивает Вовочку учитель. - Разве так бывает?
- Бывает, - отвечает Вовочка. - Например, от понедельника до среды - два дня, а от среды до понедельника - пять!

ответьте сколько на пине STEP_PIN длится LOW , а солько HIGH?