const int LedGreen = 2;// Выбор пина зеленого сведодиода
bool ledGreenState = 0;// Объявление переменной статуса зеленого светодиода
const int LedRed = 4;// Выбор пина зеленогокрасного сведодиода
bool ledRedState = 0;// Объявление переменной статуса красного светодиода
unsigned long prev_msGreen = 0; // Переменная сравнения с внутренним счетчиком Arduino
unsigned long prev_msWhite = 0; // Переменная сравнения с внутренним счетчиком Arduino
const int OnRed = 2500; // Время свечения Красного светодиода
const int OnGreen = 1000; // Время свечения Зеленого светодиода
const int OnWhite = 1000; // Время задержки вывода через терминал
const float GAMMA = 0.7; //Атрибут из описания датчика освещенности
const float RL10 = 50; //Атрибут из описания датчика освещенности
const int LedWhite = 3; // Выбор пина белого сведодиода (Освещение)
void setup() {
pinMode(LedGreen, OUTPUT); // Назначение заданного пина цифровым выходом
pinMode(LedRed, OUTPUT); // Назначение заданного пина цифровым выходом
pinMode(LedWhite, OUTPUT);// Назначение заданного пина цифровым выходом
Serial.begin(9600);// инициализирует последовательную связь со скоростью 9600 бит в секунду
}
void loop() {
// Функция millis() возвращает количество миллисекунд,
//прошедших с момента запуска программы на Arduino.
//Возвращаемое значение имеет тип unsigned long,
//что позволяет отслеживать время на протяжении более 49 суток.
//Далее буфер переменной переполняется.
//Функция позволяет не останавливать программу на задержку, в отличии от delay()
unsigned long currentTime = millis();
// Блок проверки выключен ли зеленый светодиод, и не прошло ли заданное время
// Если да, то включает его, выключая красный
if ((ledGreenState == 0) && (currentTime - prev_msGreen >= OnRed))
{
ledGreenState = 1;
digitalWrite(LedGreen, ledGreenState);
ledRedState = 0;
digitalWrite(LedRed, ledRedState);
prev_msGreen = currentTime;
// delay(1000);
}
// Блок проверки включен ли зеленый светодиод, и не прошло ли заданное время
// Если да, то выключает его, включая красный
else if ((ledGreenState == 1) && (currentTime - prev_msGreen >=OnGreen ))
{
ledGreenState = 0;
digitalWrite(LedGreen, ledGreenState);
ledRedState = 1;
digitalWrite(LedRed, ledRedState);
prev_msGreen = currentTime;
//delay(1000);
}
int analogValue = analogRead(A1);
float voltage = analogValue / 1024. * 5;
float resistance = 2000 * voltage / (1 - voltage / 5);
float lux = pow(RL10 * 1e3 * pow(10, GAMMA) / resistance, (1 / GAMMA));
if (currentTime - prev_msWhite >= OnWhite)
{
if ((lux < 10) ) {
digitalWrite(LedWhite, 1);
Serial.println("Освещение: " + String(lux) + " люкс. Свет включен");
}
else {
digitalWrite(LedWhite, 0);
Serial.println("Освещение: " + String(lux) + " люкс. Свет выключен");
}
prev_msWhite = currentTime;
}
}