Arduino UNO разбушевалась

Я эту тему прочитал от корки до корки. Только я сразу там не увидел, что у Вас в первом примере static написан в loop. Сейчас пересмотрел - понял.

Где можно прочесть - как это сделать?

Мне, честно скажу - лень разбираться что там и к чему в этой библиотеке (я её и не ставил даже).
Но (примерно), должно быть что-то такое:

include <DHT_NEW.h>

#define ledPin    13
#define dhtPin    7
#define ststNum   10

bool trigger;
DHT dht;

void setup() {
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, 0);
  dht.setup(dhtPin);
  Serial.begin(9600);
}

void loop() {
  static uint8_t stst;
  static uint32_t period = 500;
  static uint32_t moment;
  float humidity, cur_t;

  if (millis() - moment >= period) {
    moment = millis();
    trigger = !trigger;
    digitalWrite(ledPin, trigger);
    stst++;
  }
  if ( stst == ststNum ) { //запуск DHT11
    stst = 0;
    humidity = dht.getHumidity();
  }
  if (!isnan(humidity)) { //если DHT11 выдал не NAN, а нормальное число
    cur_t = humidity;
  }
}

Если не заработает - значит MinimumSamplingPeriod более 5 секунд (что странно), но попробуй тогда изменить ststNum на 20 (или 30)…

1 лайк

Вот пример из библиотеки #20.

Вот пример из той библиотеки. Файл DHT_Test.pde
#include "DHT_NEW.h"

DHT dht;

void setup()
{
  Serial.begin(9600);
  Serial.println();
  Serial.println("Status\tHumidity (%)\tTemperature (C)\t(F)");

  dht.setup(2); // data pin 2
}

void loop()
{
  delay(dht.getMinimumSamplingPeriod());
  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();

  Serial.print(dht.getStatusString());
  Serial.print("\t");
  Serial.print(humidity, 1);
  Serial.print("\t\t");
  Serial.print(temperature, 1);
  Serial.print("\t\t");
  Serial.println(dht.toFahrenheit(temperature), 1);
}

Там delay в строке 16.

Из #22 код пробовал?

В той самой теме. Похоже, прочитать вы ее прочитали, но понять так и не смогли ))

1 лайк

Только что добрался до него . Пробую.

По идеи код не сложный, должно и как я написал в #22 работать. Наврятли период опроса более 5 секунд у dht11…

ЗЫ: Вроде бы минимальный опрос равен 1 секунде. Так что 5 секунд нормально.

Да. Так и есть. Просто меня устраивает и 5 секунд. И вот в моем скетче на 5-ой секунде задержка. А Ваш вроде бы работает.

Вроде? Или работает?

1 лайк

В данный момент работает.

delay() в библиотечных примерах сидят не потому, что так и только так нужно работать с библиотекой, а потому, что так проще делать задержки. Потому что это - ПРИМЕР ))

1 лайк

Задача выполнена? )
Понял что я сделал или нет? Я «съел слона по частям»…

ЗЫ: Не забудь #22 «отметить» ))

Да. Особетнно когда delay() с таким параметром вызывается dht.getMinimumSamplingPeriod()

delay(dht.getMinimumSamplingPeriod())

А читать ты умеешь? В библиотеке просто «вшито» минимальное число миллисекунд на опрос, которое возвращается этой функцией. И всего то.

Это вот, кстати, о пользе правильного именования функций и переменных. Называлась бы она как-нибудь sspts() - фик бы я понял сразу что она делает… )))

#22 я отметил, толко почему была проблема, описанная в #1, и возникнет она снова - поживем-увидим.

Если коротко - Потому.))
С кодом из #22 ничего «такого» не будет.

1 лайк

И что там страшного? delay() принимает аргументом число, метод getMinimumSamplingPeriod() возвращает число. В чем проблема?

Я уже писал ему в #34

Выходит, что ни delay(), ни этот аргумент там и на фиг не нужны.

Они нужны, по большому счету, для того чтобы продемонстрировать работу. Никто в здравом уме delay() не использует (с такими интервалами) в готовом устройстве…