DHT без тормозов - вопросы по скетчу

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

Коллеги, добры день! 

нужна ваша помощь (програмирование изучал только 30 лет назад по Паскалю и Фортрану :))

Как каждый второй пользователь DHT столкнулся с delay в его штатной библиотеке.

Наткнулся на вот эту "беззадержечную" библиотеку:

https://github.com/olewolf/DHT_nonblocking

в ней пример, он работает.

#include <dht_nonblocking.h>

/* Uncomment according to your sensortype. */
#define DHT_SENSOR_TYPE DHT_TYPE_11
//#define DHT_SENSOR_TYPE DHT_TYPE_21
//#define DHT_SENSOR_TYPE DHT_TYPE_22

static const int DHT_SENSOR_PIN = 10;
DHT_nonblocking dht_sensor( DHT_SENSOR_PIN, DHT_SENSOR_TYPE );

/*
 * Initialize the serial port.
 */
void setup( )
{
  Serial.begin( 115200 );
}


/*
 * Poll for a measurement, keeping the state machine alive.  Returns
 * true if a measurement is available.
 */
static bool measure_environment( float *temperature, float *humidity )
{
  static unsigned long measurement_timestamp = millis( );

  /* Measure once every four seconds. */
  if( millis( ) - measurement_timestamp > 4000ul )
  {
    if( dht_sensor.measure( temperature, humidity ) == true )
    {
      measurement_timestamp = millis( );
      return( true );
    }
  }

  return( false );
}

/*
 * Main program loop.
 */
void loop( )
{
  float temperature;
  float humidity;

  /* Measure temperature and humidity.  If the functions returns
     true, then a measurement is available. */
  if( measure_environment( &temperature, &humidity ) == true )
  {
    Serial.print( "T = " );
    Serial.print( temperature, 1 );
    Serial.print( " deg. C, H = " );
    Serial.print( humidity, 1 );
    Serial.println( "%" );
  }
}

Но в моем коде уже есть 30-секундные циклы, поэтому хотел из всего примера оставить только сам запрос, типа:



if( dht_sensor.measure( temperature, humidity ) == true )

{ Serial.print( "T = " ); Serial.print( temperature, 1 ); Serial.print( " deg. C, H = " ); Serial.print( humidity, 1 ); Serial.println( "%" ); }

И дальше я встал... Не работает.. Попытался загуглить. что такое & - и толком не понял.

Поскажете неразумному? :)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

ProstoAlex пишет:

Попытался загуглить. что такое & - и толком не понял.

Это Вы про строку 51?

Если так, и если верно, что

ProstoAlex пишет:
(програмирование изучал только 30 лет назад по Паскалю и Фортрану :))

то в Паскале эта операция обозначается символом @

 

Penni
Penni аватар
Offline
Зарегистрирован: 18.01.2015

Функция требует в качестве параметров указатель на область памяти. Чтобы узнать этот адрес в памяти используется &. т.е. &temperature передаст в функцию не значение хранящееся в переменной, а адрес этого "значения" в памяти.

sadman41
Offline
Зарегистрирован: 19.10.2016

Вопрос на засыпку - что такое "штатная библиотека DHT"? Очень хочется посмотреть, что там delay делает. 

Эту я глянул одним глазом - ничего такого, что ее особо отличало от остальных - я не нашёл.

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

даже если я вдруг и знал это, то за пости 30 лет забыл )

Pyotr
Offline
Зарегистрирован: 12.03.2014

Когда я был ещё более начинающим чем сейчас, опрашивал DHT так
 http://arduino.ru/forum/apparatnye-voprosy/chitaem-pokazaniya-dht-bez-biblioteki
Теперь я такие датчики не применяю, но код продолжает работать. Может Вам чем-то поможет.

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

Pyotr пишет:

Когда я был ещё более начинающим чем сейчас, опрашивал DHT так
 http://arduino.ru/forum/apparatnye-voprosy/chitaem-pokazaniya-dht-bez-biblioteki
Теперь я такие датчики не применяю, но код продолжает работать. Может Вам чем-то поможет.

 

у меня этот код не пошел... ошибку уже не помню.

вечером повторю

ProstoAlex
Offline
Зарегистрирован: 21.01.2015

Pyotr пишет:

Когда я был ещё более начинающим чем сейчас, опрашивал DHT так
 http://arduino.ru/forum/apparatnye-voprosy/chitaem-pokazaniya-dht-bez-biblioteki
Теперь я такие датчики не применяю, но код продолжает работать. Может Вам чем-то поможет.

все пошло. причем с прошлого раза.

почему позавчера не компились - ХЗ.

 

Спасибо всем откликнувшимся!