Помогите с millis

Тема в разделе "Arduino & Shields", создана пользователем ToxaRU, 3 сен 2015.

  1. ToxaRU

    ToxaRU Гик

    попытался в свой скетчь вставить считывание датчика dht22 каждые 5 сек чтобы скетчь не тормозил


    Код (Text):
     float h; ////переменная с влажностью
    float t; //// переменная с температурой
    int chk;

    long previousMillis = 0;        // храним время последнего считывания
    long interval = 5000;          // интервал между считываниями
    -----------------------------------------------------
    void setup()
      Serial.begin(9600);
     dht.begin();
    --------------------------------------------------------
    void loop()
    {
      //----------------------------------------------------------------
      unsigned long currentMillis = millis();
      if(currentMillis - previousMillis > interval) {////проверяем не прошел ли нужный интервал, если прошел то

        previousMillis = currentMillis; //// сохраняем время последнего переключения
     
        float h = dht.readHumidity();
        float t = dht.readTemperature();
        int chk;
     
      }


     


    ну что то одни нули....((((((сижу туплю....
     
    Последнее редактирование: 3 сен 2015
  2. vvr

    vvr Инженерище

    дык а где инициация датчика?
     
  3. DrProg

    DrProg Вечный нерд

    Зачем постоянно считывать значение millis() в переменную? Сравнивайте сразу с millis().
     
    ИгорьК и ToxaRU нравится это.
  4. ToxaRU

    ToxaRU Гик

    Ну мне хотябы это заставить работать)))) А Вы сразу о сложном))))) в мониторе одни нули -хотя собирал по примеру работы датчика и примеру работы millis() Не подскажите где напортачил?
     
  5. ToxaRU

    ToxaRU Гик

    Она в millis() должна быть? в сетапе вроде есть....
     
  6. DrProg

    DrProg Вечный нерд

    Вы его хоть пробовали компилировать? Там ошибка на ошибке в том числе такие, которые просто не дадут сформировать программу. Например где фигурные скобки у setup()? Где закрывающая скобка у if внутри loop()? Почему одни и те же переменные объявлены дважды - в начала скетча и в loop(). Где команда которая что либо делает с переменными h и t, с чего вы взяли что там нули если они даже не выводятся в терминал? Где подключение библиотеки DHT? Почему строки с прочерками не закаменчены в конце концов?

    Зачем вы нам постите абсолютно нерабочий и непроверенный кусок кода выдранный неизвестно откуда и просите найти что в нем напортачили? М?
     
    ИгорьК и ToxaRU нравится это.
  7. ToxaRU

    ToxaRU Гик

    Скетч компилируется, тут просто не весь скетчь а только фрагменты которые к millis и dht22 имеют отношение..... я с millis ниразу ничего не делал.... а скетч тормозит из за delay жутко а датчик надо не чаще раза в 5-10 сек считывать
     
  8. DrProg

    DrProg Вечный нерд

    Надо бы весь скетч, если он не составляет коммерческую тайну, конечно. По кускам искать ошибки сложнее.
     
    ИгорьК и ToxaRU нравится это.
  9. DrProg

    DrProg Вечный нерд

    Ну то есть при работе у вас постоянно c бешеной скоростью выводятся параметры в терминал? И первые пять секунд, как минимум, t и h равны нулю? Попробуйте вывод двнных запихнуть внутрь if, чтобы не мелькало и выводило одновременно все.
     
    ИгорьК и ToxaRU нравится это.
  10. ToxaRU

    ToxaRU Гик

    t и h постоянно ноль..... я думал датчик шалит загружал пример-все работает.... получается либо с millis напортачил, либо что то к датчику относящееся забыл---но врубиться немогу никак... с датчиком по примеру все просто-думаю что неправильно что то с millis сделал

    а задержку сделал, так как датчик не поддерживает быстрые более раза в секунду(а вообще 2) обновления... а ожидать по 2 сек при каждом проходе нельзя
     
  11. DrProg

    DrProg Вечный нерд

    Попробуйте простой скетч сделать только для датчика. Может быть и правда не правильно подключен или не работает.
     
    ИгорьК и ToxaRU нравится это.
  12. ToxaRU

    ToxaRU Гик


    пробовал-запускал тест все работает
     
  13. ToxaRU

    ToxaRU Гик

    вот скетчь для датчика
    Код (Text):
    // Example testing sketch for various DHT humidity/temperature sensors
    // Written by ladyada, public domain

    #include "DHT.h"

    #define DHTPIN 2    // what pin we're connected to

    // Uncomment whatever type you're using!
    //#define DHTTYPE DHT11  // DHT 11
    #define DHTTYPE DHT22  // DHT 22  (AM2302)
    //#define DHTTYPE DHT21  // DHT 21 (AM2301)

    // Connect pin 1 (on the left) of the sensor to +5V
    // NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1
    // to 3.3V instead of 5V!
    // Connect pin 2 of the sensor to whatever your DHTPIN is
    // Connect pin 4 (on the right) of the sensor to GROUND
    // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor

    // Initialize DHT sensor.
    // Note that older versions of this library took an optional third parameter to
    // tweak the timings for faster processors.  This parameter is no longer needed
    // as the current DHT reading algorithm adjusts itself to work on faster procs.
    DHT dht(DHTPIN, DHTTYPE);

    void setup() {
      Serial.begin(9600);
      Serial.println("DHTxx test!");

      dht.begin();
    }

    void loop() {
      // Wait a few seconds between measurements.
      delay(2000);

      // Reading temperature or humidity takes about 250 milliseconds!
      // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
      float h = dht.readHumidity();
      // Read temperature as Celsius (the default)
      float t = dht.readTemperature();
      // Read temperature as Fahrenheit (isFahrenheit = true)
      float f = dht.readTemperature(true);

      // Check if any reads failed and exit early (to try again).
      if (isnan(h) || isnan(t) || isnan(f)) {
        Serial.println("Failed to read from DHT sensor!");
        return;
      }

      // Compute heat index in Fahrenheit (the default)
      float hif = dht.computeHeatIndex(f, h);
      // Compute heat index in Celsius (isFahreheit = false)
      float hic = dht.computeHeatIndex(t, h, false);

      Serial.print("Humidity: ");
      Serial.print(h);
      Serial.print(" %\t");
      Serial.print("Temperature: ");
      Serial.print(t);
      Serial.print(" *C ");
      Serial.print(f);
      Serial.print(" *F\t");
      Serial.print("Heat index: ");
      Serial.print(hic);
      Serial.print(" *C ");
      Serial.print(hif);
      Serial.println(" *F");
    }
     
  14. DrProg

    DrProg Вечный нерд

    Сдается мне что переменные определяются внутри if собственные. Попробуйте так:
    Код (Text):
      unsigned long currentMillis = millis();
      if(currentMillis - previousMillis > interval) {////проверяем не прошел ли нужный интервал, если прошел то

        previousMillis = currentMillis; //// сохраняем время последнего переключения
        h = dht.readHumidity();
        t = dht.readTemperature();

      }
     
     
    ИгорьК и ToxaRU нравится это.
  15. ToxaRU

    ToxaRU Гик

    Сына укладывал))))) сейчас попробую)))
     
  16. ToxaRU

    ToxaRU Гик


    Ура победили))))))))))))))))))))))))))Спасибо!!!!!))))
     
  17. ToxaRU

    ToxaRU Гик


    Это как?
     
  18. DrProg

    DrProg Вечный нерд

    У нас принято благодарить кнопкой "мне нравится" )
     
    Alexandro77, ИгорьК и ToxaRU нравится это.
  19. ToxaRU

    ToxaRU Гик

    Сори))))) мне очень нравится))))
     
  20. DrProg

    DrProg Вечный нерд

    Можно не каждое сообщение, а одно из темы. )))
     
    ИгорьК нравится это.