Не рабатает delay

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Brand2
Лейтенант
Сообщения: 415
Зарегистрирован: 26.02.2018{, 21:27}
Репутация: 42
Откуда: Haifa
Имя: Alex

Не рабатает delay

#1

Сообщение Brand2 » 16.05.2018{, 23:28}

Имею скетч,который заливаю в ESP-12E,который является точкой доступа
При подключении включаю LED на 13 ноге.Все работает отлично.
Но теперь хочу включить LED не постоянно ,пока есть подключение ,а лишь на короткое время,1 сек например,для чего после включения делаю задержку delay(1000); и после этого записываю
digitalWrite(13, HIGH);
После заливки при подключении к точке доступа реле вообще не включается,а светодиод на нем мигает лишь на пару миллисекунд,а не 1 секунду ,это видно по однократному миганию.,хотя есть соединение и в монитрое порта пишет Connected
Подозреваю что это связанно с
void loop(){
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval && ConnectFlag == true) {

previousMillis = currentMillis;
Serial.println("Sleep "+String(SleepTime)+" Sec.");
пытаюсь все закоментировать ,но тогда при компиляции выдает ошибку что

WiFiEventHandler stationConnectedHandler; // событие - соединение

не задекларированно .
ESP8266_WIFI_Unlocker:23: error: 'onStationConnected' was not declared in this scope

Строки
unsigned long previousMillis = 0;
const long interval = 2000;
const int SleepTime = 7;
в декларации тоже закоментировал перед этим
Даже не знаю в чем ошибка

Пытался ОТКЛЮЧАТЬ РЕЛЕ в void loop
после
if (currentMillis - previousMillis >= interval && ConnectFlag == true) {....
разумеется раскоментировав :
unsigned long previousMillis = 0;
const long interval = 1000;
const int SleepTime = 1;
тот же самый эффект
Кто знает где собака зарыта?
Никак не разберусь как залить скетч в спойлер ,что бы была нумерация строк .

СпойлерПоказать

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

#include <ESP8266WiFi.h>

const char *ssid = "DELTA_unlocker";
const char *password = "12345678";

unsigned long previousMillis = 0;
const long interval = 2000;
const int SleepTime = 7;

bool ConnectFlag = false;

WiFiEventHandler stationConnectedHandler; // событие - соединение
WiFiEventHandler stationDisconnectedHandler; // событие - разъединение

void setup() {
  Serial.begin(115200);
  pinMode(13, OUTPUT); // реле на GPIO13 (D7)
  digitalWrite(13, HIGH); // начальное значение
  WiFi.persistent(false); // бережем флеш-память, не перезаписываем данные подключения, если они не изменились с прошлой загрузки
  WiFi.mode(WIFI_AP); // Режим точки доступа
  WiFi.softAP(ssid, password);

  stationConnectedHandler = WiFi.onSoftAPModeStationConnected(&onStationConnected); // при соединении переходим к функции
  stationDisconnectedHandler = WiFi.onSoftAPModeStationDisconnected(&onStationDisconnected); // при разъединении переходим к функции

}

void loop() {
   
   //ESP.deepSleep(SleepTime * 1000000, WAKE_RFCAL);
   //digitalWrite(13, HIGH);
  } 
  
}

void onStationConnected(const WiFiEventSoftAPModeStationConnected& evt) { // при коннекте - включаем реле
  Serial.print("CONNECTED: ");
  digitalWrite(13, LOW);
  delay(1000);
  digitalWrite(13, HIGH);//************************* Выключаю реле после 1 сек*************
  ConnectFlag = true;
  Serial.println(macToString(evt.mac)); // МАС-адрес в порт
}

void onStationDisconnected(const WiFiEventSoftAPModeStationDisconnected& evt) { // при дисконнекте - выключаем реле
  Serial.print("DISCONNECTED: ");
  digitalWrite(13, HIGH);
  ConnectFlag = false;
  Serial.println(macToString(evt.mac)); // МАС-адрес в порт
}

String macToString(const unsigned char* mac) { // Получаем МАС-адрес клиента в виде строки (может пригодиться при идентификации)
  char buf[20];
  snprintf(buf, sizeof(buf), "%02x:%02x:%02x:%02x:%02x:%02x",
           mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
  return String(buf);
}

Ответить

Вернуться в «Спросить у знатоков»