Плавная подсветка на кухне
- Войдите на сайт для отправки комментариев
Чт, 14/12/2017 - 20:50
/*****************************************************************************************************************************/ // Управление подсветкой мойки на кухне звуком хлопка на ATtiny85 // Версия 1.03 от 23-11-2017 // Используется микрофонный модуль на основе микрофона и компаратора LM393, // блок питания на 12В-5А, стабилизатор на 5 вольт, 4 элемента 2-И-НЕ (561ЛА7), // ToDo: // 1. добавить фоторезистор для контроля внешнего освещения // 2. яркость свечения ленты зависит от тока не пропорционально, возможно нужно менять ток нелинейно // // Состояние: включен (0) или выключен (1) int _statusLight; // Функция сброса RS-триггера в исходное состояние void fnSetRsTrigger() { digitalWrite(3, LOW); delay(20); digitalWrite(3, HIGH); } // Функция плавного зажигания (плавного гашения) светодиодной ленты // Если параметр равен 0, то плавно зажигаем, если равен 1, то плавно гасим void fnLightOnOff(int OnOff) { switch(OnOff) { // Плавно зажигаем case 0: { for(int i = 255; i >= 0; i--) { analogWrite(4, i); delay(10); } break; } // Плавно гасим case 1: { for(int i = 0; i <= 255; i++) { analogWrite(4, i); delay(5); } break; } } } void setup() { // Начальное состояние - подсветка выключена _statusLight = 1; // Выход RS-триггера подключен ко входу D2 // Данный пин будет анализировать состояние RS-триггера // При поступлении сигнала с датчика звука триггер (выход ЛА7 4) устанавливается в 0 pinMode(2,INPUT); // Пин D3 управляет сбросом RS-триггера - сбрасывает его в исходное состояние (1) pinMode(3, OUTPUT); // Устанавливваем триггер в исходное состояние - выход 4 в лог. 1 fnSetRsTrigger(); // Данный пин D4 управляет транзистором подсветки pinMode(4, OUTPUT); // Выключаем подсветку digitalWrite(4, LOW); } void loop() { delay(10); // В цикле начинаем читать вход D2 и если он будет равен 1, то это значит, пришел "хлопок" if(digitalRead(2) == 1) { // Проверяем статус выключателя switch(_statusLight) { // Если выключен, то включаем case 1: { _statusLight = 0; fnLightOnOff(_statusLight); break; } // Если включен, то выключаем case 0: { _statusLight = 1; fnLightOnOff(_statusLight); break; } } // Сбрсываем триггер в исходное состояние fnSetRsTrigger(); } }