Показано с 1 по 8 из 8
  1. #1
    Новичок
    Регистрация
    26.03.2010
    Возраст
    39
    Сообщений
    2
    Вес репутации
    0

    По умолчанию Управление подсветкой приборки.

    Я новичок в этом деле, пытаюсь сделать управление подсветкой приборной панели(светодиодной) сейчас управляется ШИМом +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(LEDOUTPUT);   
      
    pinMode(BUTTONINPUT); 
    }

    void loop() {

      
    val digitalRead(BUTTON); // читаем состояния переключателя 

       
    delay(10);



     
        if ((
    val == 1)&& (old_val == LOW) ) { //если подсветку включаем
    res analogRead(0);  // читаем состояние регулятора яркости
    for (0res/4i++) { // зажигаем плавно подсветку до уровня //выбранной яркости
        
    analogWrite(LEDi);       
        
    delay(10); 
          }
        }  
      

      
    old_val val// сохраняем состояние

    if ((val == )&& (old_val == HIGH)) {//если подсветку выключаем
    res analogRead(0); 

     for (
    res/40i--) { // тушим плавно от уровня регулятора яркости //до нуля

        
    analogWrite(LEDi); // set the LED brightness
        
    delay(10);           // Wait 10ms
      
    }
     }


    1)Вход с переключателя габаритов 12v
    2)Пока подсветку заменяет один светодиод, думаю делать на поливеке IRFL4105 и BC547 управление.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	pod.JPG 
Просмотров:	1208 
Размер:	90.7 Кб 
ID:	8157  
    Последний раз редактировалось crash-100; 29.03.2010 в 01:09.

  2. #2
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,382
    Вес репутации
    10

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

    Переключатель неправильный.
    Нужен диод и внутреннюю подтяжку на вход включить.
    А если судить по твоей схеме то ты спалишь контроллер

  3. #3
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,382
    Вес репутации
    10

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

    Ставим диод анодом к выводу ардуины , катодом к габаритным лампам.
    Включаем внутренний подтягивающий резистор на вывод кардуины

    Вот здесь посмотри как реализовано

  4. #4
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    54
    Сообщений
    13,382
    Вес репутации
    10

    По умолчанию 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(LEDOUTPUT);    
      
    pinMode(BUTTONINPUT);  
      
    digitalWrite(BUTTONHIGH); //Подключить внутренний подтягивающий резистор


    void loop() { 

      
    val digitalRead(BUTTON); // читаем состояния переключателя  
       
    delay(10); 

        if (
    val == HIGH && old_val==1)   //если подсветку включаем 
          
    {
            
    res analogRead(Ain)/4;  // читаем состояние регулятора яркости 
            
    for (0resi++) { // зажигаем плавно подсветку до уровня //выбранной яркости 
             
    analogWrite(LEDi);        
            
    delay(20);  
              } 
           
    old_val 0;   
          }   

      if ( 
    val == LOW  && old_val==0//если подсветку выключаем 
        
    {
          
    res analogRead(Ain)/4;  
           for (
    res0i--) { // тушим плавно от уровня регулятора яркости //до нуля 
            
    analogWrite(LEDi); // set the LED brightness 
          
    delay(20);           // Wait 10ms 
          

         
    old_val 1
        } 

    Последний раз редактировалось Chip; 29.03.2010 в 15:55.

  5. #5
    Пользователь
    Регистрация
    10.03.2009
    Сообщений
    68
    Вес репутации
    206

    По умолчанию 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);
      }
    }
    В общем, когда надо установить нужный уровень - просто вызываем:
    Код:
    set_bl(192);
    В общем получается красиво и жутко плавно.
    Последний раз редактировалось AMurchick; 30.03.2010 в 17:02.
    TOYOTA CAMRY - NEXUS 7

  6. #6
    Новичок
    Регистрация
    26.03.2010
    Возраст
    39
    Сообщений
    2
    Вес репутации
    0

    По умолчанию 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(LEDOUTPUT);    
      
    pinMode(BUTTONINPUT);  
      
    analogWrite(LED0);



    void loop() { 
      
      
    res analogRead(Ain)/4;

      
    val digitalRead(BUTTON); // читаем состояния переключателя  
       
    delay(10); 

        if (
    val == HIGH && old_val==0)   //если подсветку включаем 
          
    {
            
    res analogRead(Ain)/4;  // читаем состояние регулятора яркости 
            
    for (0resi++) { // зажигаем плавно подсветку до уровня //выбранной яркости 
             
    analogWrite(LEDi);        
            
    delay(30);  
              } 
           
    old_val 1
         
    on 1;  
          }   

      if ( 
    val == LOW  && old_val==1//если подсветку выключаем 
        
    {
          
    res analogRead(Ain)/4;  
           for (
    res0i--) { // тушим плавно от уровня регулятора яркости //до нуля 
            
    analogWrite(LEDi); // set the LED brightness 
          
    delay(10);           // Wait 10ms 
          

         
    old_val 0;
        
    analogWrite(LED0); 
        
    on 0
        } 
        
       
    if(
    old_res res and on ==1){
    for (
    old_resresi++) { // loop from 0 to 254 (fade in)
        
    analogWrite(LEDi);      // set the LED brightness
        
    delay(10); // Wait 10ms because analogWrite
                   // is instantaneous and we would
                   // not see any change  

    }

      }
       
    old_res res
     } 

  7. #7
    Новичок
    Регистрация
    09.07.2010
    Возраст
    50
    Сообщений
    6
    Вес репутации
    178

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

    }
    }

  8. #8
    Новичок
    Регистрация
    09.07.2010
    Возраст
    50
    Сообщений
    6
    Вес репутации
    178

    По умолчанию 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(LEDOUTPUT);    
      
    pinMode(BUTTONINPUT);  
      
    analogWrite(LED0);



    void loop() { 
      
      
    res analogRead(Ain)/4;

      
    val digitalRead(BUTTON); // читаем состояния переключателя  
       
    delay(10); 

        if (
    val == HIGH && old_val==0)   //если подсветку включаем 
          
    {
            
    res analogRead(Ain)/4;  // читаем состояние регулятора яркости 
            
    for (0resi++) { // зажигаем плавно подсветку до уровня //выбранной яркости 
             
    analogWrite(LEDi);        
            
    delay(30);  
              } 
           
    old_val 1
         
    on 1;  
          }   

      if ( 
    val == LOW  && old_val==1//если подсветку выключаем 
        
    {
          
    res analogRead(Ain)/4;  
           for (
    res0i--) { // тушим плавно от уровня регулятора яркости //до нуля 
            
    analogWrite(LEDi); // set the LED brightness 
          
    delay(10);           // Wait 10ms 
          

         
    old_val 0;
        
    analogWrite(LED0); 
        
    on 0
        } 
        
       
    if(
    old_res res and on ==1){
    for (
    old_resresi++) { // loop from 0 to 254 (fade in)
        
    analogWrite(LEDi);      // 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);
    }
    }
    Последний раз редактировалось Karas; 07.03.2011 в 04:28.

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

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

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

Ваши права

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