Складываем 4 значения делим на 4. т.е. усредняем по 4м значениям.. (181 + 153 + 184 + 180 )/4 = 174.5 опрашиваем еще раз (например) (140 + 143 + 131 + 157 )/4 = 142.75
#define LDR_PIN A1 //пин фоторезистора
#define RELAY_PIN A0 //пин реле
#define S_TRIG 3 //триггер звука
#define S_ECHO 4 //ловим эхо
const int numReadings = 3; //количество измерений
int distance=0;
int impulseTime=0;
int RANGE = 150; //предел дистанции обнаружения
int tres = 400; //порог освещенности
unsigned long previousMillis1 = 0; //храним время последнего Включения света
unsigned long interval = 10000; //интервал работы (10 секунд)
void setup() {
// put your setup code here, to run once:
pinMode (RELAY_PIN, OUTPUT);
pinMode (S_TRIG, OUTPUT);
}
void loop() {
Serial.begin(9600);
int light = analogRead(LDR_PIN); //читаем освещенность
bool dark = (light < tres); //сравниваем освещенность с порогом
Serial.println("light \t tres \t dark \t distance \t needLight");
Serial.print(light); Serial.print("\t");
Serial.print(tres); Serial.print("\t");
Serial.print(dark); Serial.print("\t");
int impulseTime = 0; //сбрасываем счетчик
for(int i = 0; i < numReadings; i++)
{
digitalWrite(S_TRIG, HIGH); /* Подаем импульс на вход trig дальномера */
delayMicroseconds(10); // равный 10 микросекундам
digitalWrite(S_TRIG, LOW); // Отключаем
///////////////////////////////////////////////////////////////////////////////////////
impulseTime = impulsetime + pulseIn(S_ECHO, HIGH); // складываем серию импульсов[/b]
///////////////////////////////////////////////////////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////
impulseTime = impulseTime / numReadings; // вычисляем среднее
//////////////////////////////////////////////////////////////////////
distance=impulseTime/58; // Пересчитываем в сантиметры
Serial.print(distance); // Выводим на порт
Serial.print("\t \t ");
bool needLight = (distance<RANGE && dark);
if (needLight == 1) // Если расстояние менее предела
{
analogWrite (RELAY_PIN, 255); // горит
previousMillis1 = millis(); // отсчёт отсрочки начинается сначала...
}
// Прошло время выключаем свет
if (previousMillis1 && (millis()-previousMillis1 >= interval))
{
analogWrite (RELAY_PIN, 0); // не горит
previousMillis1 = 0;
}
Serial.println (needLight);
delay (1000);}