Автоматизация силы Wi-Fi . Справка. Нуби здесь
#include <ESP8266WiFi.h>
const char *SSID = "mr_lazy_boei";
const char *pass = "usalusal";
WiFiClient client;
// Relay pin number
int ignition=2;
int self=0;
// Return RSSI(Received Signal Strength Indicator) or 0 if target SSID not found
int32_t getRSSI(const char* target_ssid) {
byte available_networks = WiFi.scanNetworks();
for (int network = 0; network < available_networks; network++) {
if (WiFi.SSID(network).compareTo(target_ssid) == 0) { //stringOne.compareTo(stringTwo) < 0
return WiFi.RSSI(network);
}
}
return 0;
}
void setup() {
Serial.begin(115200);
delay(10);
Serial.println("Connecting to ");
Serial.println(SSID);
WiFi.begin(SSID,pass);
while(WiFi.status() !=WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
pinMode(ignition,OUTPUT);
pinMode(self,OUTPUT);
}
void loop(){
int32_t rssi = getRSSI(SSID);
// For debugging purpose only
Serial.print("Signal strength: ");
Serial.print(rssi);
Serial.println("dBm");
if (rssi > (-55) && rssi != 0) // if rssi is greater then -55 dbm or it's 0 dbm, then the light will turn
{
digitalWrite(ignition, LOW);
Serial.println("ON");
}
else
{
digitalWrite(ignition,HIGH);
Serial.println("OFF");
}
if (rssi > (-55) &&rssi !=0)
{
digitalWrite(self,LOW);
delay(750);
digitalWrite(self,HIGH);
Serial.println("SELF OFF");
}
}
Выше написан мой код. Как вы можете видеть, у меня есть две переменные: зажигание
и самость
. зажигание
работает так, как я хочу, но само
переменная включается и выключается. Это верно. Но он снова включается из-за пустого цикла()
.
Позвольте мне объяснить дальше:
Если сигнал Wi-Fi сильный, зажигание
должно включиться, а сам
он должен включиться менее чем на секунду, а затем выключиться. Он не должен включаться снова. Когда сигнал ослабевает, зажигание
выключается. Опять же, когда сигнал становится сильным, зажигание
включается, и мне нужно,
чтобы я не включался ни на секунду и выключался.
Я старался изо всех сил. Я попытался переместить его в void setup()
, но это просто работает, когда я включаю устройство. После этого он не включается и не выключается. Пожалуйста, помогите мне. Я знаю, что здесь у меня есть очень талантливые братья, которые помогут мне в этом вопросе.
@Mohd Usal, 👍2
Обсуждение1 ответ
Вам нужно разработать свою программу с использованием конечного автомата.
Сначала начните с определения каждого состояния, в котором может находиться ваша программа, и того, что может произойти в каждом из этих состояний.
Например:
- БЕЗДЕЙСТВИЕ
Единственное, что здесь может произойти, - это определить RSSI и решить, запускать двигатель или нет.
- ЗАЖИГАНИЕ
RSSI стал достаточно сильным, и вы хотите завести машину. Единственное, что вы хотите сделать, это включить зажигание и немного подождать. И больше ничего.
- РУКОЯТКА
Как только вы немного подождете, вы сможете завести двигатель. Это означает включить стартер и немного подождать.
- БЕГ
Теперь, когда двигатель заработал, вы можете отпустить стартер и оставить двигатель на холостом ходу. Именно сейчас вы хотите начать следить за усилением RSSI.
- СТОП
RSSI опустился ниже вашего порога, так что теперь вы можете остановить двигатель.
- БЕЗДЕЙСТВИЕ
Теперь, когда двигатель остановлен, вы можете вернуться к старту и работать на холостом ходу, ожидая, когда RSSI снова поднимется достаточно высоко.
Все это состояния Конечного автомата. Вы переходите из состояния в состояние в зависимости от различных входов или триггеров. Одним из входных данных является ваше значение RSSI - или, более строго, ваше значение RSSI выше или ниже порогового значения. Другой вход-это (менее очевидно) время. Жду, пока пройдет какое-то время.
Итак, вы начинаете в состоянии 1. В этом состоянии все, что делает ваша программа, - это смотрит RSSI. Когда это произойдет, вы перейдете в состояние 2. В этот момент он выполняет все необходимые действия (включает зажигание) и записывает время. Когда пройдет достаточно времени, вы перейдете в состояние 3 и сделаете то же самое.
На самом деле это можно было бы упростить, сжав состояния 2 и 3 вместе:
- Включите зажигание
- Задержка
- Включите стартерный двигатель
- Задержка
- Выключите стартерный двигатель
- Задержка
- Переход в следующее состояние
Затем вы можете снова немного увеличить сложность (при одновременном повышении безопасности), добавив дополнительные шаги при просмотре RSSI. Затем вы можете проверить, был ли RSSI выше (или ниже) порогового значения в течение определенного периода времени, прежде чем перейти к следующему шагу:
- RSSI, наблюдающий в режиме ожидания
- Если RSSI превысит пороговое значение, перейдите в состояние 2.
- В противном случае оставайтесь в состоянии 1
- Запишите время и продолжайте следить за RSSI
- Если RSSI опускается ниже порогового значения: Вернитесь к 1.
- Если прошло достаточно времени: Перейдите в состояние 3.
- В противном случае оставайтесь в штате 2
- Заводи двигатель.
- Перейти в состояние 4
- RSSI для наблюдения за бегом
- Если RSSI опускается ниже порогового значения, перейдите в состояние 5.
- Запишите время и продолжайте следить за RSSI
- Если RSSI превысит пороговое значение: Вернитесь к 4
- Если прошло достаточно времени: перейдите в состояние 6.
- В противном случае оставайтесь в штате 5.
- Останови двигатель.
- Перейдите в состояние 1.
... и т.д...
Спасибо тебе, уууууу!!! Я попробую сделать конечную машину сразу ..., @Mohd Usal
- Мигните светодиодом 5 раз с помощью цикла for
- Чтение нескольких аналоговых входных контактов
- Как остановить цикл в последовательном мониторе?
- Одновременное чтение кнопки?
- Объектно-ориентированное программирование Arduino
- Как запустить функцию каждый 10-й раз через цикл?
- Реализация циклического буфера и Serial.print()
- Почему циклы Do While не останавливаются?
- Если сигнал Wi-Fi сильный, то зажигание должно включиться, а само устройство должно включиться менее чем на секунду и выключиться . Он не должен включаться снова".... очень запутанно ... что такое " это` во втором предложении?, @jsotola
@jstola мне очень жаль . Только представьте себе машину... Сначала его зажигание должно включиться и оставаться включенным . В то время как самомотор должен включиться менее чем на секунду и снова выключиться ., @Mohd Usal
В моей программе . "Я" включается и выключается снова и снова.... Он должен включаться и выключаться только один раз . Вот и все. Это не должно повторяться снова и снова ., @Mohd Usal
@jstola Извини, что все испортил ., @Mohd Usal
Я думаю, что для "себя" вы имеете в виду "стартерный двигатель"...?, @Majenko
да, вы правы . @Majenko, @Mohd Usal
Поэтому в основном вы хотите, чтобы, когда вы подходите к своей машине, включалось зажигание и заводился двигатель. Когда вы уходите, все это отключается. Когда вы возвращаетесь к машине, она начинается снова? Вам нужно реализовать Конечный автомат для управления различными состояниями, в которых может находиться система., @Majenko
перевод с другого языка, конечно, может все испортить ... лол, @jsotola
Да, вы правы . Мне удалось запрограммировать его на зажигание, и он отлично работает . Но у меня возникают проблемы с самим собой . Это повторяется снова и снова . У меня нет никаких хороших знаний о конечной машине . Я проверю это @Majenko, @Mohd Usal
постарайтесь использовать описание без лишних фактов ... например, в "включить менее чем на секунду и выключить", "и выключить" является избыточным.... "включить, запустить на секунду, а затем выключить" на самом деле лучше, потому что это близко к тому, как программа будет это делать ...
включение, пауза, выключение
, @jsotolaОй. Мне жаль... Может быть, я не настолько хороша в объяснении вещей . Но спасибо вам за то, что вы уделили мне время и поняли мою проблему . Теперь единственный вариант-конечная машина или что-то еще можно сделать ?, @Mohd Usal
Может ли кто-нибудь использовать конечный автомат в моей программе для меня ? , @Mohd Usal
итак, если вы едете по шоссе со скоростью 120 км/ч и ваш телефон разряжается, то двигатель должен просто выключиться?, @jsotola
Нет. Это просто для учебных целей . Я никому не разрешаю водить машину без ключа . И, может быть, со временем я обеспечу ему большую безопасность ., @Mohd Usal
А теперь не могли бы вы помочь мне в моей программе ? Жаль, что я раньше не придавал больше значения программированию ... я бы никогда не кончил так , @Mohd Usal
вы можете начать с представления правильно отформатированного кода ... вы действительно смотрели на то, как выглядит ваш пост?, @jsotola