Проект умного дома, соединить всё что можно ( я новичок, пришел за помощью)
- Войдите на сайт для отправки комментариев
Сб, 10/03/2018 - 22:33
Всем добрый день, вот решил заняться небольшим проэктом, начинаю с автоматических занавесок, НАписал код но он вместо того что бы бесконечно вращаться, делает один шаг и всё. Использую модуль 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); } }
А цикл-то где? Вы делаете один шаг, а потом снова садитесь на бесконечное ожидание команды с клиента (в строках 51-53)
71
if
(Stepping ==
true
) {
72
digitalWrite(STEP_PIN, LOW);
73
digitalWrite(STEP_PIN, HIGH);
74
delayMicroseconds(400);
// чем ниже число теб быстрее вращаеться двигатель
Вот этот цыкл должен повторяться пока правда не смениться на лож ..... но нет .... не хочет
И цик ожидания уже удалил, не помогло!
Поменять на
всё ровно ничего не работает, делает шаг и ждёт, что я не так делаю?!
Вот этот цыкл должен повторяться пока правда не смениться на лож ..... но нет .... не хочет
Это не цикл и ничего он Вам не должен, тем более повторяться.
Поменять на
Вы что, методом тыка их меняете?
Ну, вот, написали Вы
Зачем?
Ответьте себе (мне не надо, я знаю ответ) на простой вопрос: кто, когда и при каких обстоятельствах изменит Вашу переменную с true на false, чтобы этот цикл смог закончиться?
Я понимаю что у меня ошибка именно с этим, но вот ничего не понимаю .... вроде всё правильно! когда открываеться ссылка запускаеться либо открыть либо закрыть, после чего они должны перевести Stepping в положение правда, а уже конечниками отключить! но он просто игнорирует и проходит дальше, програмированием я начал заниматься сравнительно недавно, и прошу о помощи, показать хотя бы прример того, как правильно должно быть
НАсчёт while, как я понял эта команда отвечает за постоянное выполнение в скобках пока в скобочках верно! И да он работает, вращаеться, но сделает пару оборотов и висит! Возможно я не вижу чего то очивидного что заставляет модуль висеть!
Вот вариант при котором всё работает но зависает!
Знаете, если Вы настолько не умеете программировать, то Вам просто рано делать "умный дом". Намучаетесь и окончательно потеряете веру в себя. Возьмите нормальный учебник программирования и попробуйте сделать проектик попроще. Потом вернётесь к умному дому уже на новом уровне.
Это из серии
ответьте сколько на пине STEP_PIN длится LOW , а солько HIGH?