Страница 12 из 12 ПерваяПервая ... 26789101112
Показано с 111 по 116 из 116
  1. #111
    Ломастер Аватар для basurman971
    Регистрация
    13.02.2011
    Возраст
    53
    Сообщений
    396
    Вес репутации
    324

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

    Спасибо огромное, то что надо!
    Подскажи еще, а где с скетче можно изменить время увеличения/уменьшения яркости.

  2. #112
    Продвинутый
    Регистрация
    15.12.2008
    Возраст
    38
    Сообщений
    229
    Вес репутации
    399

    По умолчанию 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); это задержка после изменения яркости на единицу. чем меньше, тем быстрее меняется.

  3. #113
    Ломастер Аватар для basurman971
    Регистрация
    13.02.2011
    Возраст
    53
    Сообщений
    396
    Вес репутации
    324

    По умолчанию Re: Автоматическая регулировка яркости светодиодной подсветки.

    Еще раз спасибо!

  4. #114
    Новичок
    Регистрация
    31.10.2014
    Сообщений
    1
    Вес репутации
    0

    По умолчанию 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);
      }
    }

  5. #115
    Новичок
    Регистрация
    10.10.2014
    Сообщений
    10
    Вес репутации
    127

    По умолчанию 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);
      }
    }
    А можно ли полный код если не жалко?
    Заранее благодарю

  6. #116
    Новичок
    Регистрация
    10.10.2014
    Сообщений
    10
    Вес репутации
    127

    По умолчанию 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(ledPinOUTPUT); 
     
    //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);
    */

    А у меня все молчит с этим кодом. Никакой активности не наблюдается

Страница 12 из 12 ПерваяПервая ... 26789101112

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 4 (пользователей: 0 , гостей: 4)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •