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);}
}
}
Имеется 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);}
}
}
Последнее редактирование: