Вложений: 1
Управление подсветкой приборки.
Я новичок в этом деле, пытаюсь сделать управление подсветкой приборной панели(светодиодной) сейчас управляется ШИМом +12v регистрируется яркость переменным резистором 25кОМ, хочу использовать тот же переменный резистор, что бы при включении габаритов подсветка загоралась плавно на тот уровень яркости который задан резистором и так же плавно тухла при отключении.
Попытался написать скетч, но что-то не то, помогите!!!
PHP код:
#define LED 9 // выход на управлении подсветкой
#define BUTTON 7 // переключател гараритов
int i = 0;
int val = 0; // состояние переключателя габаритов on - off
int res = 0; // уровень яркости
int old_val = 0;
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);
}
void loop() {
val = digitalRead(BUTTON); // читаем состояния переключателя
delay(10);
if ((val == 1)&& (old_val == LOW) ) { //если подсветку включаем
res = analogRead(0); // читаем состояние регулятора яркости
for (i = 0; i < res/4; i++) { // зажигаем плавно подсветку до уровня //выбранной яркости
analogWrite(LED, i);
delay(10);
}
}
old_val = val; // сохраняем состояние
if ((val == 0 )&& (old_val == HIGH)) {//если подсветку выключаем
res = analogRead(0);
for (i = res/4; i > 0; i--) { // тушим плавно от уровня регулятора яркости //до нуля
analogWrite(LED, i); // set the LED brightness
delay(10); // Wait 10ms
}
}
}
1)Вход с переключателя габаритов 12v
2)Пока подсветку заменяет один светодиод, думаю делать на поливеке IRFL4105 и BC547 управление.
Re: Управление подсветкой приборки.
Переключатель неправильный.
Нужен диод и внутреннюю подтяжку на вход включить.
А если судить по твоей схеме то ты спалишь контроллер
Re: Управление подсветкой приборки.
Ставим диод анодом к выводу ардуины , катодом к габаритным лампам.
Включаем внутренний подтягивающий резистор на вывод кардуины
Вот здесь посмотри как реализовано
Re: Управление подсветкой приборки.
Вот так все работает
PHP код:
#define LED 9 // выход на управлении подсветкой
#define BUTTON 7 // переключател гараритов
#define Ain 5 // аналоговый вход для измерения сопротивления
int i = 0;
int val = LOW; // состояние переключателя габаритов on - off
int res = 0; // уровень яркости
int old_val = LOW;
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);
digitalWrite(BUTTON, HIGH); //Подключить внутренний подтягивающий резистор
}
void loop() {
val = digitalRead(BUTTON); // читаем состояния переключателя
delay(10);
if (val == HIGH && old_val==1) //если подсветку включаем
{
res = analogRead(Ain)/4; // читаем состояние регулятора яркости
for (i = 0; i < res; i++) { // зажигаем плавно подсветку до уровня //выбранной яркости
analogWrite(LED, i);
delay(20);
}
old_val = 0;
}
if ( val == LOW && old_val==0) //если подсветку выключаем
{
res = analogRead(Ain)/4;
for (i = res; i > 0; i--) { // тушим плавно от уровня регулятора яркости //до нуля
analogWrite(LED, i); // set the LED brightness
delay(20); // Wait 10ms
}
old_val = 1;
}
}
Re: Управление подсветкой приборки.
Как просто :)
Я, как всегда, на прерываниях сделал :)))
В общем у меня проект бАльшой, посему вырезки, мож кому пригодится:
Код:
// вход датчика света (аналог)
#define LIGHT_SENS 7
// текущее и новое значение яркости подсветки
volatile byte bl_cur = 0, bl_new = 0;
// меняем яркость подсветки LCD
void set_bl(byte val) { bl_new = val; }
// Вызывается 100 раз в секунду (см attach() в IRremote.cpp)
void isr()
{
// проверка, нужно ли порулить полвсеткой LCD
if (bl_cur != bl_new)
{
if (bl_new > bl_cur)
bl_cur++;
else
bl_cur--;
analogWrite(LCD_BKLT, bl_cur);
}
}
В общем, когда надо установить нужный уровень - просто вызываем:
В общем получается красиво и жутко плавно.
Re: Управление подсветкой приборки.
Вот законченный вариант, интересно было бы посмотреть как это реализовать с прерываниями, на выходе как и писал ранее управление штатной подсветкой +12v.
PHP код:
#define LED 9 // выход на управлении подсветкой
#define BUTTON 7 // переключател гараритов
#define Ain 5 // аналоговый вход для измерения сопротивления
int i = 0;
int val = LOW; // состояние переключателя габаритов on - off
int res = 0; // уровень яркости
int old_val = LOW;
int old_res = LOW;
int on = 0;
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);
analogWrite(LED, 0);
}
void loop() {
res = analogRead(Ain)/4;
val = digitalRead(BUTTON); // читаем состояния переключателя
delay(10);
if (val == HIGH && old_val==0) //если подсветку включаем
{
res = analogRead(Ain)/4; // читаем состояние регулятора яркости
for (i = 0; i < res; i++) { // зажигаем плавно подсветку до уровня //выбранной яркости
analogWrite(LED, i);
delay(30);
}
old_val = 1;
on = 1;
}
if ( val == LOW && old_val==1) //если подсветку выключаем
{
res = analogRead(Ain)/4;
for (i = res; i > 0; i--) { // тушим плавно от уровня регулятора яркости //до нуля
analogWrite(LED, i); // set the LED brightness
delay(10); // Wait 10ms
}
old_val = 0;
analogWrite(LED, 0);
on = 0;
}
if(old_res < res and on ==1){
for (i = old_res; i < res; i++) { // loop from 0 to 254 (fade in)
analogWrite(LED, i); // set the LED brightness
delay(10); // Wait 10ms because analogWrite
// is instantaneous and we would
// not see any change
}
}
old_res = res;
}
Re: Управление подсветкой приборки.
Зесь есть не доработка!
При регулировке яркости в "+" все работает корректно, но при регулировке в "-" идут траблы.
Причина, в отсудствии регултровок в низ. Для устранения необходимо перед строкой
" old_res = res; "
дописать
if(old_res > res and on ==1){
for (i = old_res; i > res; i--) { // loop from 0 to 254 (fade in)
analogWrite(LED, i); // set the LED brightness
delay(10); // Wait 10ms because analogWrite
// is instantaneous and we would
// not see any change
}
}
Re: Управление подсветкой приборки.
Цитата:
Сообщение от
crash-100
Вот законченный вариант, интересно было бы посмотреть как это реализовать с прерываниями, на выходе как и писал ранее управление штатной подсветкой +12v.
PHP код:
#define LED 9 // выход на управлении подсветкой
#define BUTTON 7 // переключател гараритов
#define Ain 5 // аналоговый вход для измерения сопротивления
int i = 0;
int val = LOW; // состояние переключателя габаритов on - off
int res = 0; // уровень яркости
int old_val = LOW;
int old_res = LOW;
int on = 0;
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTTON, INPUT);
analogWrite(LED, 0);
}
void loop() {
res = analogRead(Ain)/4;
val = digitalRead(BUTTON); // читаем состояния переключателя
delay(10);
if (val == HIGH && old_val==0) //если подсветку включаем
{
res = analogRead(Ain)/4; // читаем состояние регулятора яркости
for (i = 0; i < res; i++) { // зажигаем плавно подсветку до уровня //выбранной яркости
analogWrite(LED, i);
delay(30);
}
old_val = 1;
on = 1;
}
if ( val == LOW && old_val==1) //если подсветку выключаем
{
res = analogRead(Ain)/4;
for (i = res; i > 0; i--) { // тушим плавно от уровня регулятора яркости //до нуля
analogWrite(LED, i); // set the LED brightness
delay(10); // Wait 10ms
}
old_val = 0;
analogWrite(LED, 0);
on = 0;
}
if(old_res < res and on ==1){
for (i = old_res; i < res; i++) { // loop from 0 to 254 (fade in)
analogWrite(LED, i); // set the LED brightness
delay(10); // Wait 10ms because analogWrite
// is instantaneous and we would
// not see any change
}
}
old_res = res;
}
Зесь есть не доработка!
При регулировке яркости в "+" все работает корректно, но при регулировке в "-" идут траблы.
Причина, в отсудствии регулировок в низ. Для устранения необходимо перед строкой
" old_res = res; "
дописать
if(old_res > res and on ==1){
for (i = old_res; i > res; i--) { // loop from 0 to 254 (fade in)
analogWrite(LED, i); // set the LED brightness
delay(10);
}
}