如何存储和检查变量的前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());
    }
}