Re: Автоматическая регулировка яркости светодиодной подсветки.
Спасибо огромное, то что надо!
Подскажи еще, а где с скетче можно изменить время увеличения/уменьшения яркости.
Re: Автоматическая регулировка яркости светодиодной подсветки.
Цитата:
if(flag)
{
if(currval!=target)
{
if(currval<=target)
{
currval=currval++;
analogWrite(ledPin,currval);
}
else
{
currval=currval--;
analogWrite(ledPin,currval);
}
delay(10);
}
else flag=false;
}
delay(10); это задержка после изменения яркости на единицу. чем меньше, тем быстрее меняется.
Re: Автоматическая регулировка яркости светодиодной подсветки.
Re: Автоматическая регулировка яркости светодиодной подсветки.
Delay зло :)
сделал так.
константой P можно регулировать скорость реакции на затемнение.
Код:
struct LIGHT_STRUCT
{
uint16_t in_med;
uint16_t current;
uint16_t target;
const uint8_t P = 5;
uint16_t in = 0;
};
LIGHT_STRUCT TFT_BL;
void backlightadjust() {
if (millis() % 2 == 0)
{
if (readIndex < 10)
{
TFT_BL.in += 4095 - analogRead(LIGHT_PIN); //набор данных с сенсора света для усреднения
fuel.in += analogRead(FUEL_PIN);
readIndex++;
}
else
{
readIndex = 0;
TFT_BL.in_med = TFT_BL.in / 10; //усредняем
fuel.in_med = fuel.in / 10;
TFT_BL.target = map(TFT_BL.in_med, 0, 4095, 0, 65535); //масштабируем
fuel.in = 0;
TFT_BL.in = 0;
}
if (TFT_BL.current - TFT_BL.P > TFT_BL.target) //+- 20 чтобы яркость не прыгала
TFT_BL.current -= TFT_BL.P; //увеличиваем яркость с шагом 20
if (TFT_BL.current + TFT_BL.P < TFT_BL.target) // +- 20 чтобы яркость не прыгала
TFT_BL.current += TFT_BL.P; //уменьшаем яркость с шагом 20
if (TFT_BL.current > 62000) TFT_BL.current = 62000; //минимальная яркость 62000
if (TFT_BL.in_med < 400) TFT_BL.current = 200; //минимальная яркость 62000
pwmWrite(TFT_LED, TFT_BL.current);
}
}
Re: Автоматическая регулировка яркости светодиодной подсветки.
Цитата:
Сообщение от
Hyperion
Delay зло :)
сделал так.
константой P можно регулировать скорость реакции на затемнение.
Код:
struct LIGHT_STRUCT
{
uint16_t in_med;
uint16_t current;
uint16_t target;
const uint8_t P = 5;
uint16_t in = 0;
};
LIGHT_STRUCT TFT_BL;
void backlightadjust() {
if (millis() % 2 == 0)
{
if (readIndex < 10)
{
TFT_BL.in += 4095 - analogRead(LIGHT_PIN); //набор данных с сенсора света для усреднения
fuel.in += analogRead(FUEL_PIN);
readIndex++;
}
else
{
readIndex = 0;
TFT_BL.in_med = TFT_BL.in / 10; //усредняем
fuel.in_med = fuel.in / 10;
TFT_BL.target = map(TFT_BL.in_med, 0, 4095, 0, 65535); //масштабируем
fuel.in = 0;
TFT_BL.in = 0;
}
if (TFT_BL.current - TFT_BL.P > TFT_BL.target) //+- 20 чтобы яркость не прыгала
TFT_BL.current -= TFT_BL.P; //увеличиваем яркость с шагом 20
if (TFT_BL.current + TFT_BL.P < TFT_BL.target) // +- 20 чтобы яркость не прыгала
TFT_BL.current += TFT_BL.P; //уменьшаем яркость с шагом 20
if (TFT_BL.current > 62000) TFT_BL.current = 62000; //минимальная яркость 62000
if (TFT_BL.in_med < 400) TFT_BL.current = 200; //минимальная яркость 62000
pwmWrite(TFT_LED, TFT_BL.current);
}
}
А можно ли полный код если не жалко?
Заранее благодарю
Re: Автоматическая регулировка яркости светодиодной подсветки.
Цитата:
Сообщение от
manu_245
PHP код:
int ledPin = 9;
int sens = 0;
unsigned char i=0;
unsigned long time;
unsigned long oldtime;
unsigned int sensvals[]={0,10,20,30,40,50,60,80,1023};
unsigned char lightvals[]={10,50,100,150,180,210,230,255};
unsigned char target=0;
unsigned char oldtarget=0;
unsigned char currval=0;
boolean flag=false;
void setup()
{
pinMode(ledPin, OUTPUT);
//Serial.begin(57600);
}
void loop()
{
time = millis();
sens = analogRead(0);
for(i=0;i<sizeof(sensvals)-2;i++)
{
if(sens>sensvals[i] && sens<=sensvals[i+1])
{
target=lightvals[i];
break;
}
}
if(flag)
{
if(currval!=target)
{
if(currval<=target)
{
currval=currval++;
analogWrite(ledPin,currval);
}
else
{
currval=currval--;
analogWrite(ledPin,currval);
}
delay(10);
}
else flag=false;
}
if(target!=oldtarget)
{
if(time-oldtime>3000)
{
oldtime=time;
oldtarget=target;
flag=true;
}
}
else
{
oldtime=time;
}
/*
Serial.print(target, DEC);
Serial.print(" ");
delay(100);
*/
}
А у меня все молчит с этим кодом. Никакой активности не наблюдается :(