Как обновлять показания датчика DHT11 без DELAY?

NeXan
Offline
Зарегистрирован: 03.06.2019

Здравствуйте! Имеется код, который я нашел на этой странице , в нем показания датчика DHT11 обновляются раз в секунду за счет задержки delay. Подскажите, пожалуйста, как сделать задержку без этой функции? Желательно с millis, так как я планирую задействовать дополнительное управление (лишние задерки не нужны). Пару десятков сайтов перелопатил, не нашел никакой информации. На всякий случай, продублирую здесь код. Спасибо!

// Interfacing Arduino with DHT11 humidity and temperature sensor
 
// include LCD library code
#include <LiquidCrystal.h>
// include DHT library code
#include "DHT.h"
 
#define DHTPIN 8            // DHT11 data pin is connected to Arduino pin 8
 
// LCD module connections (RS, E, D4, D5, D6, D7)
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
 
#define DHTTYPE DHT11       // DHT11 sensor is used
DHT dht(DHTPIN, DHTTYPE);   // Initialize DHT library
 
char temperature[] = "Temp = 00.0 C  ";
char humidity[]    = "RH   = 00.0 %  ";
void setup() {
  // set up the LCD's number of columns and rows
  lcd.begin(16, 2);
  dht.begin();
}
 
void loop() {
  delay(1000);           // wait 1s between readings
  // Read humidity
  byte RH = dht.readHumidity();
  //Read temperature in degree Celsius
  byte Temp = dht.readTemperature();
  
  // Check if any reads failed and exit early (to try again)
  if (isnan(RH) || isnan(Temp)) {
    lcd.clear();
    lcd.setCursor(5, 0);
    lcd.print("Error");
    return;
  }
 
  temperature[7]     = Temp / 10 + 48;
  temperature[8]     = Temp % 10 + 48;
  temperature[11]    = 223;
  humidity[7]        = RH / 10 + 48;
  humidity[8]        = RH % 10 + 48;
  lcd.setCursor(0, 0);
  lcd.print(temperature);
  lcd.setCursor(0, 1);
  lcd.print(humidity);
}

 

nik182
Offline
Зарегистрирован: 04.05.2015

Тема на форуме блинк без делей. Вместо блинька поставить проверку датчика.

b707
Offline
Зарегистрирован: 26.05.2017

NeXan пишет:

 Пару десятков сайтов перелопатил, не нашел никакой информации.

 

ну ведь вранье же!

NeXan
Offline
Зарегистрирован: 03.06.2019

nik182 пишет:

Тема на форуме блинк без делей. Вместо блинька поставить проверку датчика.

Пробовал использовать код Blink Without Delay, вместо строк

if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis; 
    if (ledState == LOW)
      ledState = HIGH;
    else
      ledState = LOW;
    digitalWrite(ledPin, ledState);
  }

вставил функцию считываения

if(currentMillis - previousMillis > interval) {
    previousMillis = currentMillis; 
    byte RH = dht.readHumidity();
    byte Temp = dht.readTemperature();
}

скетч выводит ошибку

sketch_aug12a:38:13: error: 'RH' was not declared in this scope
sketch_aug12a:38:26: error: 'Temp' was not declared in this scope
sketch_aug12a:45:24: error: 'Temp' was not declared in this scope
sketch_aug12a:48:24: error: 'RH' was not declared in this scope
exit status 1
'RH' was not declared in this scope
 
Что подскажите, что я не так делаю?))
b707
Offline
Зарегистрирован: 26.05.2017

NeXan пишет:

Что подскажите, что я не так делаю?))

пытаетесь использовать локальные переменные за пределами их области видимости. Почитайте что-нибудь про "область видимости переменных"

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

nik182
Offline
Зарегистрирован: 04.05.2015

Почитайте область видимости переменных. переменные должны быть видимыми для всех областей программы, в которых они используются. Строка 3 - зачем Вы здесь определяете переменную ? Вынесите её определение в самый верх скеча и будет Вам счастье.

NeXan
Offline
Зарегистрирован: 03.06.2019

b707 пишет:

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

Я уже закончил этот проект. Посмотрите, какой у меня код получился в конце темы, при этом мне в том топике помогли меньше половины кода написать.

NeXan
Offline
Зарегистрирован: 03.06.2019

nik182 пишет:

Почитайте область видимости переменных. переменные должны быть видимыми для всех областей программы, в которых они используются. Строка 3 - зачем Вы здесь определяете переменную ? Вынесите её определение в самый верх скеча и будет Вам счастье.

Почитаю. Ну так, я как понимаю, если вынести переменные за пределы функции, то есть вернуть их на то же место, где стояли, код зарежки не будет работать.

b707
Offline
Зарегистрирован: 26.05.2017

NeXan пишет:

Я уже закончил этот проект. Посмотрите, какой у меня код получился

зачем? - я и так вижу, какие вопросы вы задаете....

b707
Offline
Зарегистрирован: 26.05.2017

NeXan пишет:

я как понимаю, если вынести переменные за пределы функции, то есть вернуть их на то же место, где стояли, код зарежки не будет работать.

если вынести с умом - то будет. А вот как вы делаете - нет.

nik182
Offline
Зарегистрирован: 04.05.2015

Не надо выность переменные. Надо выносить их определение. В данном случае слово byte c содержимым. И всё ж сначала почитайте, а потом спрашивайте. С такими  вопросами очень странно, что хоть один проект удалость завершить. И 4 страницы обсуждения того проекта говорят сами за себя. Обычно хвататает нескольких ответов для полного закрытия вопроса.   

NeXan
Offline
Зарегистрирован: 03.06.2019

b707 пишет:

зачем? - я и так вижу, какие вопросы вы задаете....

Это единсвенная проблема, на которой я застрял, дальше я знаю что делать. Включать и выключать вентилятор по определенным показаниям, переключать авто и ручной режим я смогу легко, больше мне и не надо.

b707
Offline
Зарегистрирован: 26.05.2017

NeXan пишет:

Это единсвенная проблема, на которой я застрял, дальше я знаю что делать. Включать и выключать вентилятор по определенным показаниям, переключать авто и ручной режим я смогу легко, больше мне и не надо.

почитал тут ветку, которой вы хвастаетесь - там вы застревали буквально на каждой строчке... назвать тот код "вашим" язык не поворачивается...

И так будет и впредь, пока вы не возьмете себе за труд разбраться с учебником от начала до конца. а не спрашивать каждый чих на форуме.

NeXan
Offline
Зарегистрирован: 03.06.2019

b707 пишет:

NeXan пишет:

Это единсвенная проблема, на которой я застрял, дальше я знаю что делать. Включать и выключать вентилятор по определенным показаниям, переключать авто и ручной режим я смогу легко, больше мне и не надо.

почитал тут ветку, которой вы хвастаетесь - там вы застревали буквально на каждой строчке... назвать тот код "вашим" язык не поворачивается...

И так будет и впредь, пока вы не возьмете себе за труд разбраться с учебником от начала до конца. а не спрашивать каждый чих на форуме.


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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

А кто тебе сказал, что ты по форумам программирование освоишь?  Люди 5 лет учатся для этого в спицальных зданиях. 

NeXan
Offline
Зарегистрирован: 03.06.2019

DetSimen пишет:

А кто тебе сказал, что ты по форумам программирование освоишь?  Люди 5 лет учатся для этого в спицальных зданиях. 


А я и не собираюсь становиться программистом, я хочу всего лишь за замутить еще этот проект и на этом пока все.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Тебя жестоко обманули, сказав, что Ардуино может освоить всякая кухарка. Не всякая. Только та, кто умеет читать и учиться. 

b707
Offline
Зарегистрирован: 26.05.2017

NeXan пишет:

 Не думаю, что так сложно сделать подсказку участком кода.

ты хотя бы "область видимости" почитай.

Пойми - нет смысла исправлять этот код за тебя - так ты ничему не научишься и через строчку сделаешь еще ошибку.

А отговариваться "я хочу только сделать проект" - не надо. Если ты "хочешь сделать". то делай сам, а если тебе нужна сама пшикалка или что ты там собираешь - без освоения процесса - то купи ее в магазине, сэкономишь деньги(свои) и время ( не только свое)

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

NeXan пишет:
DetSimen пишет:

А кто тебе сказал, что ты по форумам программирование освоишь?  Люди 5 лет учатся для этого в спицальных зданиях. 

А я и не собираюсь становиться программистом, я хочу всего лишь за замуть еще этот проект и на этом пока все.

Если ты не собираешся становиться программистом (читай - учиться) довольствуйся тем кодом, который ты нарыл на просторах. Как только тебе захочется что-то в нем изменить - придется учиться.  И вовсе не орать "ПАМАГИТИ!!!!" на всех форумах, это ты и так умеешь. 

Здесь тебе могут только указать напрвление, чтоб ты не тыкался как слепой кутенок. 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

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

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

b707 пишет:
NeXan пишет:
Пару десятков сайтов перелопатил, не нашел никакой информации.
ну ведь вранье же!

Ну, почему сразу враньё? ТС же не сказал какие именно сайты он лопатил. Вот давайте вместе лопатить ...

1. https://rt.pornhub.com - ни хрена нету;
2. http://blondie.ru/ - тоже облом;
3. http://anekdotov.net/ - опять 25!

Ну, и так далее. Как видите, никакой информации :(

NeXan пишет:
я конечноо изучу эту информацию

Если Вам не дадут готовый код, то может, и изучите (если не забьёте), а если дадут, то - никогда.

NeXan пишет:
сам факт существования этого форума для новичков бессмысленный и беспощадный

Так и есть :(

NeXan пишет:
Не думаю, что так сложно сделать подсказку участком кода.

Да, Вы вообще, похоже, предпочитаете не думать. Вот попробуйте подумать и объяснить мне, зачем мне давать Вам "подсказку участком кода" делать Вашу работу за Вас? Что я с этого поимею? Удовлетворение от того, что Я вас чему-то научил - так, нет же - Вы ж ничему не научитесь. А ничего другого никто не предлагает.

NeXan пишет:
А я и не собираюсь становиться программистом
Тогда Вы никогда не сделаете то, что хотите. Для того, чтобы это сделать нужно быть программистом.

NeXan пишет:
я хочу всего лишь за замутить еще этот проект и на этом пока все.
Так закажите его кому-нибудь и не мучайтесь.

NeXan
Offline
Зарегистрирован: 03.06.2019

В общем, не знаете, так и скажите, нефиг умничать))

b707
Offline
Зарегистрирован: 26.05.2017

NeXan пишет:

В общем, не знаете, так и скажите, нефиг умничать))

что так и не осилили прочитать про область видимости переменных?

Вам дали ответ в первом же сообщении, а что у вас не хватает знаний его понять - уже не забота форума.

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

NeXan пишет:

В общем, не знаете, так и скажите, нефиг умничать))

Так и говорим: "не знаем".

Надеюсь, это Вам помогло.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Да не то что не знаем и не слышали вообще ))) А вообще такие люди любят что то подобное (даже читать не нужно, первое из гугла поднял):

https://m.youtube.com/watch?v=a8L1nu4EByI

Как говорил Задорнов - лишний кнопкотык боятся сделать.  )))

 

leks
Offline
Зарегистрирован: 22.10.2017
void delay_(int K){
while(millis()-Y1<K){
if(millis()-Y>60000){
Y=millis();chasi();
}
}
Y1=millis();
}

Проще всего, что бы не ломать структуру имеющейся программы, ввести функцию вместо delay(); например delay_();

А внутри неё делать неотложные дела. Проверять не прошёл ли минутный интервал - для фоновой работы часов к примеру.

Просто тема всем здешним в горле стоит - настолько она изъезжена.