• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь ESP+BLYNK+два ультразвука. Последние сильно тормозят.

quatterback

New member
Доброго времени, уважаемые.
Имеется D1 mini , Blynk, и cемь сенсоров: фоторезистор с цифровым выходом, 3 ИК, 1 геркон, 2 ультразвука HC-SR04.
C последними проблема по скорости срабатывания.

Если скетч содержит в себе управление только одним ультразвуком- никаких претензий по скорости-
одни раз махнул рукой возле него -движение зафиксировалось.

Другое дело когда прописаны шесть сенсоров да еще и Blynk.
Помогите ,пожалуйста, оптимизировать скетч (если это возможно) для более шустрой реакции эхолотов.

Скетч ниже:

#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>



long unsigned int lowIn;
long unsigned int lowIn2;
unsigned long counttimeprihoj;
unsigned long counttimekuh;

long unsigned int pause = 6000;
long unsigned int pause2 = 10000;

boolean lockLow = true;
boolean lockLow2 = true;

boolean takeLowTime;
boolean takeLowTime2;

int doorprihoj = 14;
int pirprihoj = 12;
int echoprihoj = 16;
int trigprihoj = 4;
int releprihoj = 3;
int pir1kuh = 2;
int pir2kuh = 0;
int echokuh = 13;
int trigkuh = 15;
int lightkuh = 5;
int relekuh = 1;



int timer1;
int timer2;

int autoprihoj =0;
int autokuh=0;
int stateprihoj=0;
int statekuh=0;


char auth[] = "одлододло";

char ssid[] = "лрлорлорлорлор";
char pass[] = "олдлодлодол";


bool isFirstConnect = true;

BLYNK_CONNECTED() {
if (isFirstConnect) {

Blynk.syncAll();



isFirstConnect = false;
}}





void setup()
{

Serial.begin(9600);
pinMode (pirprihoj,INPUT);
pinMode (echoprihoj,INPUT);
pinMode (trigprihoj,OUTPUT);
pinMode (releprihoj,OUTPUT);
pinMode (doorprihoj,INPUT);
pinMode (pir2kuh,INPUT);
pinMode (echokuh,INPUT);
pinMode (trigkuh, OUTPUT);
pinMode (lightkuh,INPUT);
pinMode (relekuh,OUTPUT);

digitalWrite (releprihoj, HIGH);
digitalWrite (relekuh, HIGH);
Blynk.begin(auth, ssid, pass);
}


BLYNK_WRITE(V0)
{if(param.asInt()==0)
{ digitalWrite(releprihoj, LOW);}

else { digitalWrite(releprihoj, HIGH);}}

BLYNK_WRITE(V1)
{if(param.asInt()==0)
{ autoprihoj=0;
}
else {autoprihoj=1;}}


BLYNK_WRITE(V2)
{if(param.asInt()==0)
{ autokuh=0;
}
else {autokuh=1;}}

BLYNK_WRITE(V3)
{if(param.asInt()==0)
{ digitalWrite(relekuh, LOW);}

else {digitalWrite(relekuh, HIGH);}}

void loop()
{

Blynk.run();



int duration1, cm1; //ультразвук 1.

digitalWrite(trigprihoj, LOW);
delayMicroseconds(2);
digitalWrite(trigprihoj, HIGH);
delayMicroseconds(10);
digitalWrite(trigprihoj, LOW);
duration1 = pulseIn(echoprihoj, HIGH);
cm1 = duration1 / 58;

int duration2, cm2; //ультразвук 2.

digitalWrite(trigkuh, LOW);
delayMicroseconds(2);
digitalWrite(trigkuh, HIGH);
delayMicroseconds(10);
digitalWrite(trigkuh, LOW);
duration2 = pulseIn(echokuh, HIGH);
cm2 = duration2 / 58;

int door=digitalRead(doorprihoj);

if (autoprihoj==0)
{





if(digitalRead(pirprihoj) == HIGH||door==0||cm1<80)
{

if(lockLow)
{
lockLow = false;
delay(50);
digitalWrite(3, LOW);

}
takeLowTime = true;
}


if(digitalRead(pirprihoj) == LOW&&door==1&&cm1>=80)
{

if(takeLowTime)
{
lowIn = millis();
takeLowTime = false;
}

if(!lockLow && millis() - lowIn > pause)
{

lockLow = true;
delay(50);
digitalWrite (3, HIGH);

}

}
if (door==0)
{Blynk.virtualWrite (V4, 255);}
if (door==1)
{Blynk.virtualWrite (V4, 0);}
if (digitalRead(pirprihoj) == HIGH||cm1<80)
{Blynk.virtualWrite (V7, 255);}
if (digitalRead(pirprihoj) == LOW||cm1>=80)
{Blynk.virtualWrite (V7,0);}
if (digitalRead (3)==LOW)
{ Blynk.virtualWrite (V0, LOW);}
if(digitalRead(3)== HIGH)
{Blynk.virtualWrite (V0, HIGH);}
}

if (autokuh==0)
{

{ //
if((digitalRead(pir1kuh)==HIGH&&digitalRead(lightkuh)==1)||(digitalRead(pir2kuh)==HIGH&&digitalRead(lightkuh)==1)||(cm2<40&&digitalRead(lightkuh)==1))
{
/
if(lockLow2)
{
lockLow2 = false;
delay(50);
digitalWrite(1, LOW);

}
takeLowTime2 = true;
}

/
if(digitalRead(pir1kuh) == LOW&&digitalRead(pir2kuh)==LOW&&cm2>=40)
{

if(takeLowTime2)
{
lowIn2 = millis();
takeLowTime2 = false;
}

if(!lockLow2 && millis() - lowIn2 > pause2)
{

lockLow2 = true;
delay(50);
digitalWrite (1, HIGH);

}}

if (digitalRead(pir1kuh)==HIGH||digitalRead(pir2kuh)==HIGH||cm2<40)
{Blynk.virtualWrite (V10, 255);}
if (digitalRead(pir1kuh)==LOW&&digitalRead(pir2kuh)==LOW&&cm2>=40)
{Blynk.virtualWrite (V10, 0);}
}



if (digitalRead (1)==LOW)
{ Blynk.virtualWrite (V3, LOW);}
if(digitalRead(1)== HIGH)
{Blynk.virtualWrite (V3, HIGH);}
}
}
 
Последнее редактирование:

quatterback

New member
уже добавил библиотеку Симпл Таймера, может если через нее ультразвуки в Void занести, тогда будет пободрее считывать... ...но пока еще не понял как это сделать правильно, ведь у меня к значениям см1 и см2 привязана логическая цепочка БЛИНКА и реле из void loop.
 

quatterback

New member
Вы уж держите нас в курсе, пожалуйста...
В общем, решил отойти от ультразвука в сторону PIR. Работает быстрее. Правда пришлось ставить несколько PIR-ов в разные точки в ниши, чтобы не было ненужных срабатываний. Проблема решена. Тема закрыта. Спасибо.
 

pvvx

Активный участник сообщества
Срабатывания сенсоров вешаются на прерывания по изменению на входах I/O.
 
Сверху Снизу