如何存储和检查变量的前5个值是否相同?
How to store and check if the previous 5 values of the variable are same?
#include <FirebaseESP8266.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#define FIREBASE_HOST "####"
#define FIREBASE_AUTH "####"
// defines pins numbers
const int trigPin = 2; //D4
const int echoPin = 0; //D3
const int led = 4; //D2
// defines variables
long duration;
int distance = 0;
int wifi = 0;
int water = 0;
int water1 = 0;
//Firebase object..
FirebaseData firebaseData;
WiFiManager wifiManager;
void setup(){
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
pinMode(led, OUTPUT);
Serial.begin(115200);
wifiManager.autoConnect("Aqua","123456789");
Serial.println();
Serial.print("Connected, IP address:" );
Serial.print(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop(){
//digitalWrite(led, LOW);
if(WiFi.status() != WL_CONNECTED){
wifi = 0;
if (Firebase.setInt(firebaseData, "/Connectivity", wifi)){}
wifiManager.autoConnect("Aqua","123456789");
}
else{
wifi = 1;
if (Firebase.setInt(firebaseData, "/Connectivity", wifi)){}
}
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
if (Firebase.setInt(firebaseData, "/Distance", distance)) {
Serial.print("Distance = ");
Serial.println(distance);
Serial.println("\n");
delay(1000);
}
else
Serial.println(firebaseData.errorReason());
distance= duration*0.034/2;
water1 = water;
switch(distance){
case 2:
case 3:water = 500;
break;
case 4:
case 5:
case 6: water = 400;
break;
case 7:
case 8:water = 300;
break;
case 9:
case 10:
case 11:water = 200;
break;
case 12:
case 13:
case 14: water = 100;
break;
case 15: water = 0;
break;
default : water = water1;
break;
}
//I WANT TO STORE DISTANCE'S VALUE AND CHECK IF ITS THE SAME LAST 5 TIMES THEN EXECUTE BELOW CODE
if (Firebase.setInt(firebaseData, "/WaterLevel", water)) {
}
else
Serial.println(firebaseData.errorReason());
}
我想存储 DISTANCE 的值并检查它最近 5 次是否相同
距离的值一次又一次的生成我只想存储前5个距离值并比较它们,如果它们相同则执行最后一个if()条件
有没有办法只存储变量“distance”生成的前 5 个值并检查它们是否相同
首先,在顶部声明一个局部整型变量:
int distanceSame = 1;
然后另一个存储最后一个值:
int lastDistance = -1;
这一行之后
distance= duration*0.034/2;
检查当前距离值是否与 lastDistance 变量匹配,如果是,则增加 distanceSame,否则像这样重置它:
if(distance == lastDistance) {
// Increment counter
distanceSame++;
} else {
distanceSame = 1;
}
// prepare lastDistance for next cycle
lastDistance = distance;
如果前 5 个距离值相同,则执行您的代码。
if(distanceSame >= 5) {
if (Firebase.setInt(firebaseData, "/WaterLevel", water)) {
}
else
Serial.println(firebaseData.errorReason());
}
}
#include <FirebaseESP8266.h>
#include <DNSServer.h>
#include <ESP8266WebServer.h>
#include <WiFiManager.h>
#define FIREBASE_HOST "####"
#define FIREBASE_AUTH "####"
// defines pins numbers
const int trigPin = 2; //D4
const int echoPin = 0; //D3
const int led = 4; //D2
// defines variables
long duration;
int distance = 0;
int wifi = 0;
int water = 0;
int water1 = 0;
//Firebase object..
FirebaseData firebaseData;
WiFiManager wifiManager;
void setup(){
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin, INPUT); // Sets the echoPin as an Input
pinMode(led, OUTPUT);
Serial.begin(115200);
wifiManager.autoConnect("Aqua","123456789");
Serial.println();
Serial.print("Connected, IP address:" );
Serial.print(WiFi.localIP());
Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
}
void loop(){
//digitalWrite(led, LOW);
if(WiFi.status() != WL_CONNECTED){
wifi = 0;
if (Firebase.setInt(firebaseData, "/Connectivity", wifi)){}
wifiManager.autoConnect("Aqua","123456789");
}
else{
wifi = 1;
if (Firebase.setInt(firebaseData, "/Connectivity", wifi)){}
}
// Clears the trigPin
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
// Sets the trigPin on HIGH state for 10 micro seconds
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
// Reads the echoPin, returns the sound wave travel time in microseconds
duration = pulseIn(echoPin, HIGH);
// Calculating the distance
if (Firebase.setInt(firebaseData, "/Distance", distance)) {
Serial.print("Distance = ");
Serial.println(distance);
Serial.println("\n");
delay(1000);
}
else
Serial.println(firebaseData.errorReason());
distance= duration*0.034/2;
water1 = water;
switch(distance){
case 2:
case 3:water = 500;
break;
case 4:
case 5:
case 6: water = 400;
break;
case 7:
case 8:water = 300;
break;
case 9:
case 10:
case 11:water = 200;
break;
case 12:
case 13:
case 14: water = 100;
break;
case 15: water = 0;
break;
default : water = water1;
break;
}
//I WANT TO STORE DISTANCE'S VALUE AND CHECK IF ITS THE SAME LAST 5 TIMES THEN EXECUTE BELOW CODE
if (Firebase.setInt(firebaseData, "/WaterLevel", water)) {
}
else
Serial.println(firebaseData.errorReason());
}
我想存储 DISTANCE 的值并检查它最近 5 次是否相同
距离的值一次又一次的生成我只想存储前5个距离值并比较它们,如果它们相同则执行最后一个if()条件 有没有办法只存储变量“distance”生成的前 5 个值并检查它们是否相同
首先,在顶部声明一个局部整型变量:
int distanceSame = 1;
然后另一个存储最后一个值:
int lastDistance = -1;
这一行之后
distance= duration*0.034/2;
检查当前距离值是否与 lastDistance 变量匹配,如果是,则增加 distanceSame,否则像这样重置它:
if(distance == lastDistance) {
// Increment counter
distanceSame++;
} else {
distanceSame = 1;
}
// prepare lastDistance for next cycle
lastDistance = distance;
如果前 5 个距离值相同,则执行您的代码。
if(distanceSame >= 5) {
if (Firebase.setInt(firebaseData, "/WaterLevel", water)) {
}
else
Serial.println(firebaseData.errorReason());
}
}