// Подключаем библиотеку для работы с LCD
#include <LiquidCrystal.h>
// Инициализируем объект-экран, передаём использованные
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
const int ledPin = 13; // выход для светодиода
const int inputPin = 2; // вход от датчика
int pirState = LOW; // состояние датчика
int val = 0; // переменная для чтения состояния датчика
int ledPinState = LOW;
const int pinY = A1; // ось Y джойстика
void setup()
{
pinMode(ledPin, OUTPUT); // выход для светодиода
pinMode(inputPin, INPUT); // вход для датчика
Serial.begin(9600); // дублирование выхода на COM порт
lcd.begin(16, 2);
lcd.clear();
pinMode(pinY, INPUT);
}
long int delayTime = 2000;
long int startTime = 0;
void changeDelayTime(int y)
{
if (y > 127)
{
lcd.clear();
delayTime += 1000;
if (delayTime > 10000)
{
delayTime = 2000;
}
}
else if (y < 127)
{
lcd.clear();
delayTime -= 1000;
if (delayTime < 2000)
{
delayTime = 10000;
}
}
}
void loop()
{
int y = analogRead(pinY); // считываем значение оси Y
y = map(y, 0, 1023, 0, 255); // преобразуем значение Y в
changeDelayTime(y);
lcd.setCursor(6, 0);
lcd.print("Delay");
lcd.setCursor(6, 1);
lcd.print(delayTime, 1);
val = digitalRead(inputPin);
if (val == HIGH) // есть сигнал от датчика
{
digitalWrite(ledPin, HIGH); // включаем светодиод
ledPinState = HIGH;
startTime = millis();
if (pirState == LOW)
{
Serial.println("Motion detected!"); // отправляем сообщение только один раз
pirState = HIGH;
}
}
else
{
if (pirState == HIGH)
{
Serial.println("Motion ended!"); // отправляем сообщение только один раз
pirState = LOW;
}
}
if (ledPinState == HIGH && startTime + delayTime <= millis())
{
Serial.println(startTime);
Serial.println(startTime + delayTime);
Serial.println(millis());
digitalWrite(ledPin, LOW);
ledPinState = LOW;
}
delay(50);
}