Привет в сем ! вот надумал сделать подсветку столешницы в кухне взял китайский датчик (HC-SR04) и полевой транзистор ну и ко нечто ардуино уно замысел такой что когда подходишь к мойке светодиоды включаются как только мы отошли светодиоды светиться еще 20 секунд и гаснут проблема не могу разобраться с ШИМ хочу чтобы включение происходило плавно Код (C++): // Подсветка столешницы версия 1.0 // Начата 18.08.2016 // Автор Андрей //****************************************************************************************************** int ledPin =13; // подключаем -12в блока питания int trigPin = 8; // тригер int echoPin = 7; // эхо int dist1 = 20; // дистанция срабатывания int ledstate = LOW; long zaderhka = 20000; // время работы 20 сек unsigned long nahaloMillis = 0; // начало отсчета времени void setup() { Serial.begin (9600); // выводим на экран pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); pinMode(13, OUTPUT); } void loop() { long duration; int cm; digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); cm = duration / 82; unsigned long prohloMillis; // if (ledstate==HIGH) // если светодиод светится { prohloMillis=millis(); if(prohloMillis-nahaloMillis>=zaderhka) //если больше задоного выключаем { ledstate = LOW; nahaloMillis = 0; digitalWrite(ledPin,ledstate); } } if( cm<dist1 ){ nahaloMillis = prohloMillis; // запоминаем время ledstate = HIGH; digitalWrite(13,ledstate); } delay(150); Serial.print(cm); Serial.print("."); Serial.println(" cm"); delay(150); }
я видел этот пример! я не могу понять как внедрить его в мой проект как его использовать можите показать как переделать этот Fade чтобы светодиод достиг максимальной яркости и светился так например 30 сек а потом плавно погас 2. у меня Код (C++): if( cm<dist1 ){ nahaloMillis = prohloMillis; // запоминаем время ledstate = HIGH; digitalWrite(13,ledstate); эта функция включается если дист меньше 20 см работает и выключается спустя 20 сек КАК переделать в ШИМ Я прошу наглядный пример.
ок. вы его включаете, потом циклом длящимся n-шагов, от n будет зависеть плавность, включаете подсветку. потом уже работаете не на ШИМ а просто так Код (C++): if( cm<dist1 ){ nahaloMillis = prohloMillis; // запоминаем время for (int i = 0; i<102; i++){ analogWrite(pinLed,i*10); } ledstate=HIGH; digitalWrite(pinLed,ledstate);
собственно там в цикл задержку пихнуть надо. по идее работать должно, но на скорости отрабатывается очень быстро. на полевом по идее он должен работать. и да. моя ошибка, там диапазон работы не [0..1024] а [0..255].