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

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

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    22.07.2010
    Возраст
    51
    Сообщений
    20
    Вес репутации
    196

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


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

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

Ваши права

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