Выполнения события в цикле один раз

Danila
Offline
Зарегистрирован: 16.05.2013

Доброго времени суток форумчане!

Прошу помощи, есть ардуинка и ИК датчик расстояния.
Задача сделать счетчик, который засчитывает приближение предмета на 10 см к датчику. 

Я пошел простым путем, и написал код с простым условием  if ( a == 10 ) то прибавляем к счетчику единицу.

Но проблема в том, что когда предмет удаляется от датчика, он опять засчитывает +1, а это не верно.

Подскажите, как написать условие, чтобы счетчик засчитывал +1 только при приближении, и не засчитывал при удалении предмета от датчика ? Спасибо. 

b707
Offline
Зарегистрирован: 26.05.2017

Danila пишет:

Подскажите, как написать условие, чтобы счетчик засчитывал +1 только при приближении, и не засчитывал при удалении предмета от датчика ? Спасибо. 

Прибавлять единицу только когда предмет ПРИБЛИЖАЕТСЯ - то есть расстояние уменьшается. А когда увеличивается - игнор.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Эмм. Надо, чтобы при попадании предмета в область видимости происходило однократно событие?

bool alarm = false;

void loop()
{
	bool isThingDetected = readFromSensor(); // читаете, есть ли предмет в пределах 10 см
	if(!isThingDetected)
		alarm = false;
	else
	{
		if(!alarm)
		{
			alarm = true;
			Serial.println("ALARM!");
		}
	}
}

 

Logik
Offline
Зарегистрирован: 05.08.2014

Нужен флаг - "цель в зоне" ;) взводится при условии a<=10 и сбрасывается при a>10+гистерезис. Счетчик делаем +1 при смене его состояния на взведен.