Перейти к блогу GetChip.net - блог        JilTE[1] - в разработке     Модификации устройств - модификации

 
Текущее время: 20 окт 2017, 18:15

Часовой пояс: UTC + 3 часа [ Летнее время ]



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Два уровня яркости
СообщениеДобавлено: 19 янв 2017, 05:09 
Не в сети

Зарегистрирован: 19 ноя 2015, 03:23
Сообщения: 150
Здравствуйте! Хочу сделать подсветку в коридор. Выключатели расположены крайне неудобно и постоянно приходится идти на ощупь :( Из готовых вариантов ничего подходящего не нашёл и решил сам попытаться, но познания мои на уровне начинающего. Нашёл в интернете кучу примеров и на их основе нацарапал небольшой код. Суть алгоритма проста - при срабатывании датчика движения сравнивается состояние от фоторезистора и если параметры соответствут прописаным то включается свет на заданное время к примеру 5 сек. По истечению этого времени проверяется состояние входа от PIR датчика и если есть движение то - повтор заданного времени работы. В принципе всё отлично, но как то скучно да и без ардуинки решаемо. Решил добавить 4 канала с последовательным "розжигом" в пол накала и при наличии движения после паузы в 5 секунд розжиг на 100 %. Моих познаний хватило лишь на добавление нескольких каналов и начальный уровень освещения, последовательное их включение/выключение, а вот как реализовать выход яркости светодиодов на полную мощьность никак не пойму. Может кто подскажет как это можно реализовать.

код
 
int const Pot = A5; //Потенцинометр 10к:
int const Light = A7; //Датчик света:
int const Led1 = 4;
int const Led2 = 5;
int const Led3 = 9;
int const Led4 = 10;
int const Pirsens = 3; // Цифровой датчик движения:

int const pause = 5000; // время работы 5 сек.
long unsigned int lowIn;
boolean lockLow = true;
boolean takeLowTime;

void setup() {
// Определяем входы и выходы:
pinMode(Pirsens, INPUT);
pinMode(Led1, OUTPUT);
pinMode(Led2, OUTPUT);
pinMode(Led3, OUTPUT);
pinMode(Led4, OUTPUT);
// определяем состояние:
digitalWrite(Led1, HIGH);
digitalWrite(Led2, HIGH);
digitalWrite(Led3, HIGH);
digitalWrite(Led4, HIGH);

}

void loop() {

int pirsensVal = digitalRead(Pirsens);
int lightVal = analogRead(Light);
int potVal = analogRead(Pot);
int lightLimit = map(potVal, 0, 1023, 200, 500);

if (pirsensVal == HIGH && lightVal < lightLimit) {
if (lockLow) {
lockLow = false;
analogWrite(Led1, 100);
delay(100);
analogWrite(Led2, 100);
delay(100);
analogWrite(Led3, 100);
delay(100);
analogWrite(Led4, 100);
delay(100);
}
takeLowTime = true;

} else {
if (takeLowTime) {
lowIn = millis();
takeLowTime = false;
}

if (!lockLow && millis() - lowIn > pause) {
lockLow = true;
digitalWrite(Led1, HIGH);
delay (100);
digitalWrite(Led2, HIGH);
delay (100);
digitalWrite(Led3, HIGH);
delay (100);
digitalWrite(Led4, HIGH);

}
}
}


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB