Показано с 1 по 10 из 14

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    08.02.2009
    Возраст
    47
    Сообщений
    30
    Вес репутации
    212

    По умолчанию Re: All-IN-One (дружественная многозадачность)

    А как бы загрубить показания фоторезистора?
    Скажем постоянно опрашивать датчик и усреднять за последние 30 секунд, не портя многозадачность?
    Сейчас он на каждый фонарь на трассе реагирует...

    вот кусок моего кода, пример усреднения взят отсюда.
    но что-то мне подсказывает что это неоптимально.

    PHP код:
    void poll_AUTO_LIGHT(){ // управление яркостью
     
    byte light;   
     
    byte last_light;
     
    int AUTO_LIGHT_DELAY 1000;
    //int sens = analogRead(LIGHT_SENS);

    //Начало цикла усреднения значения
    int i;
    int Count 1000//Количество значений для усреднения
    int In 0//Начальная точка суммирования
    int sens//Усредненное значение со входа 
    for (0Counti++) {
    In In analogRead(LIGHT_SENS);
    }
    sens In Count//Вычисляем среднее значение 
    //Конец цикла усреднения значения


    //регулировка по датчику освещенности------------
    if ((sens 950) && (sens<960)) {light 10;}
    if ((
    sens 960) && (sens<970)) {light 60;}
    if ((
    sens 970) && (sens<980)) {light 100;}
    if ((
    sens 980) && (sens<990)) {light 130;}
    if ((
    sens 990) && (sens<1000)) {light 160;}
    if ((
    sens 1000) && (sens<1010)) {light 200;}
    if ((
    sens 1010) && (sens<1020)) {light 230;}
    if (
    sens 1020) {light 255;}
    //-------------------

     
    if (light!=last_light) {
        
    analogWrite(LIGHT_PINlight);
        
    last_light=light;
     }
      
    p_delay(AUTO_LIGHT,AUTO_LIGHT_DELAY); // задержка для следующего опроса.


  2. #2
    Пользователь
    Регистрация
    22.07.2010
    Возраст
    50
    Сообщений
    20
    Вес репутации
    193

    По умолчанию Re: All-IN-One (дружественная многозадачность)

    Цитата Сообщение от indy Посмотреть сообщение
    А как бы загрубить показания фоторезистора?
    Скажем постоянно опрашивать датчик и усреднять за последние 30 секунд, не портя многозадачность?
    Сейчас он на каждый фонарь на трассе реагирует...
    смысл такой: опрашиваем датчик 1 раз в AUTO_LIGHT_DELAY мс, проводим AUTO_LIGHT_COUNT замеров, для которых вычисляем среднее арифметическое, которое мы используем при изменении освещенности:

    убрать
    // AUTO_LIGHT
    #define AUTO_LIGHT_DELAY 1000 // 10 секунд цикл поверки датчика освещения
    добавить вместо
    PHP код:
    // AUTO_LIGHT 
    #define AUTO_LIGHT_DELAY 500 // цикл опроса датчика освещения
    #define AUTO_LIGHT_COUNT 10  // количество опросов датчика перед усреднением
    int al_count=0;              // счетчик опросов
    int al_acc=0;                // аккумулятор 

    после
    byte light = analogRead(LIGHT_SENS)>>2; // /4 // интенсивность
    добавить

    PHP код:
     //усреднение
     
    if (al_count++<AUTO_LIGHT_COUNT){
       
    al_acc+=light;                
       
    light=aino.light;              // используем как флаг "необновления"
     
    } else {
       
    light=al_acc/AUTO_LIGHT_COUNT;
       
    al_count=0// можно поставить >0 для "взять первые n замеров по усредненным данным"
       
    al_acc=0//для al_count>0 "0" заменить  на "al_count*light";
     


  3. #3
    Пользователь
    Регистрация
    22.07.2010
    Возраст
    50
    Сообщений
    20
    Вес репутации
    193

    По умолчанию Re: All-IN-One (дружественная многозадачность)

    небольшая ошибка. пропускало текущее значение датчика
    PHP код:
     //усреднение 
       
    al_acc+=light;                 
     if (
    al_count++<AUTO_LIGHT_COUNT){ 
       
    light=aino.light;              // используем как флаг "необновления" 
     
    } else { 
       
    light=al_acc/AUTO_LIGHT_COUNT
       
    al_count=0// можно поставить >0 для "взять первые n замеров по усредненным данным" 
       
    al_acc=0//для al_count>0 "0" заменить  на "al_count*light"; 
     


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

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

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

Ваши права

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