// изменён файл .json. добавлены атрибуты delayTime и retrigger
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
int vertPin = A1;
bool isMovedY = false;
int oldY;
int lim = 500;
const int ledPin = 13;
const int pirPin = 2;
int val = 0;
int delayTime = 2;
bool single = true;
bool actionDetected = false;
unsigned long timer;
int ledState = LOW;
void setup()
{
lcd.begin(16, 2);
pinMode(vertPin, INPUT);
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
pinMode(pirPin, INPUT);
digitalWrite(pirPin, LOW);
lcd.setCursor(0, 0);
lcd.print("Delay Time:");
lcd.setCursor(0, 1);
lcd.print(delayTime);
lcd.setCursor(3, 1);
lcd.print("sec");
}
void SetDelay(int& y)
{
if(y > 512 + lim)
{
lcd.setCursor(0, 1);
lcd.print(" ");
delayTime = delayTime == 10 ? 2 : ++delayTime;
lcd.setCursor(0, 1);
lcd.print(delayTime);
}
if(y < 512 - lim)
{
lcd.setCursor(0, 1);
lcd.print(" ");
delayTime = delayTime == 2 ? 10 : --delayTime;
lcd.setCursor(0, 1);
lcd.print(delayTime);
}
}
void StartTime()
{
if(single == true)
{
timer = millis();
}
}
void loop()
{
int y = analogRead(vertPin);
isMovedY = (((y < 512 - lim) || (y > 512 + lim)) && (y != oldY)) ? true : false;
if(isMovedY)
{
SetDelay(y);
}
val = digitalRead(pirPin);
if(val == HIGH)
{
StartTime();
actionDetected = true;
}
else
{
if(actionDetected)
{
single = true;
ledState = (timer + (delayTime * 1000)) > millis() ? HIGH : LOW;
digitalWrite(ledPin, ledState);
if(ledState == LOW)
{
timer = 0;
actionDetected = false;
}
}
}
oldY = y;
}