Помогите новичку написать программу для управления светодиодами
- Войдите на сайт для отправки комментариев
Вс, 16/12/2012 - 21:22
Здравствуйте, у меня задача:
есть два входных сигнала - контакты от фотореле (вход 4) и ИК-датчика (вход 5), надо на выходе(9) создать управление ШИМ светодиодом, чтобы по включению входа 4 на выходе включился светодиод на 20-30%, а при включении входа 5 - плавно перешёл на 100%, и примерно через 3-5 мин вернулся плавно обратно на 20-30%. При отключении входа 4, на выходе - 0.
(т.е. хочется реализовать эстетичную светодиодную подсветку перед входом в дом в вечернее время)
Уже всю голову сломал, вроде задача простая, а получается какая-то ерунда.
Вот один из вариантов:
const int buttonPin = 4;
const int buttonPin2 = 5;// the number of the pushbutton pin
const int ledPin = 9;
int pwmLevel = 255;// the number of the LED pin
// variables will change:
int lightState = 0;
int movement = 0;
int prevState = LOW; // variable for reading the pushbutton status
void setup() {
// initialize the LED pin as an output:
pinMode(ledPin, OUTPUT);
// initialize the pushbutton pin as an input:
pinMode(buttonPin, INPUT);
digitalWrite(buttonPin, HIGH);
pinMode(buttonPin2, INPUT);
digitalWrite(buttonPin2, HIGH);
}
void loop(){
// read the state of the pushbutton value:
lightState = digitalRead(buttonPin);
movement = digitalRead(buttonPin2);
// check if the pushbutton is pressed.
// if it is, the buttonState is HIGH:
if (lightState == LOW && prevState == HIGH && movement == HIGH ) {
for (pwmLevel=255; pwmLevel >= 240; pwmLevel--){
delay(30);
analogWrite(ledPin, pwmLevel);
}
prevState = LOW;
}
if (lightState == LOW && prevState == LOW) {
delay(30);
}
if (lightState == LOW && movement == LOW) {
for (pwmLevel=240; pwmLevel >= 0; pwmLevel--){
delay(30);
analogWrite(ledPin, pwmLevel);
}
delay(10000);
for (pwmLevel=0; pwmLevel <= 240; pwmLevel++){
delay(30);
analogWrite(ledPin, pwmLevel);
}
}
if (lightState == HIGH && prevState == LOW){
for (pwmLevel >= 0; pwmLevel <= 255; pwmLevel ++){
delay(30);
analogWrite(ledPin, pwmLevel);
}
prevState = HIGH;
}
}
Примерно так:
Спасибо, Максим за оперативный ответ, пойду проверять как работает!
К сожалению, система не заработала... светодиодные лампочки горят и не реагируют на управление.....
На какое управление? Опишите что, куда и как подключаете и какие уровни на входах.
Извиняюсь за мелкие буквы, вот покрупнее:
Я писал код по аналогии с вашим и по вашему описанию, так вот у вас у датчика движения активный уровень (есть движение) - высокий, а у освещения (стало темно) - низкий. Если все так, то все замечательно работает. А как вы определили что светодиоды просто горят? они плавно разгораются и очень плавно тухнут, для того чтобы менять скорость разгорания/затухания нужно менять значения TIME_ON и TIME_OFF, еще добавил вам значения минимального и максимального предела яркости MIN_LIGHT и MAX_LIGHT. Ну вот вам побыстрее, странно что вы сами не догадались попробовать изменить TIME_ON и TIME_OFF.
Извиняюсь за мелкие буквы, вот покрупнее:
Все красиво, можете приступать к изучению и напмсанию программы.
Спасибо, за комментарии, утром попробую ещё повключать, наверное, где-то ошибся...
Здравствия Вам гуру ардуино! Помогите новичку воплотить идею пока не перегорел.
Суть: Необходима регулировка искусственного освещения в зависимости от уровня освещенности при наличии естественного. я себе представил это так.
Критерий -> измерение освещенности -> команда на транзистор через ШИМ -> задержка -> измерение освещенности если удовлетворяет критерий -> измерение освещенности
Критерий -> измерение освещенности -> команда на транзистор через ШИМ -> задержка -> измерение освещенности не удовлетворяет критерий -> измерение освещенности -> команда на транзистор через ШИМ следующая уставка