Таймер при заданной температуре
- Войдите на сайт для отправки комментариев
Ср, 09/12/2015 - 09:55
Помогите со скетчем.
Нужно только при достижении 10 градусов (и ниже) на DHT22 включать счетчик времени
Затем по достижению 15 градусов выводить в Сериал сколько прошло секунд
нашел скетч - счетчик но принцип фиксирования времени не осилю
unsigned long watch_millis;//значение millis() для текущего времени
long watch(long watch_t)//расчет текущего времени
{
unsigned long time_;
long watch_delta;
time_ = millis();
watch_delta = ((time_ - watch_millis)/1000); // изменение в сек
if (watch_delta>0)
{
watch_millis = time_;
}
return watch_t + watch_delta;
}
И не осилите - это невозможно осилить, т.к. это какой-то огрызок, в котором не хватает очень важных вещей (например watch_millis используется раньше, чем получает значение).
вот весь код, но он делает не то что нужно
#include "DHT.h"
#define DHTPIN2 2
long watch_time=0;
DHT dht2(DHTPIN2, DHT22);
void setup() {
Serial.begin(9600);
dht2.begin();
}
void loop() {
int t2 = dht2.readTemperature();
Serial.print(t2);
if(t2<=10)
{
watch_time=watch(watch_time);
}
else
{
watch_time=0;
}
delay(1000);
}
unsigned long watch_millis;//значение millis() для текущего времени
long watch(long watch_t)//расчет текущего времени
{
unsigned long time_;
long watch_delta;
time_ = millis();
watch_delta = ((time_ - watch_millis)/1000); // изменение в сек
if (watch_delta>0)
{
watch_millis = time_;
}
Serial.println(watch_time);
return watch_t + watch_delta;
}
1. watch_millis по-прежнему используется раньше, чем получает значение - выбросьте этот код.
2. Пожалуйста, вставляйте код в соответсвии с правилами форума.
Есть идеи какой код нужно использовать ? - поэтому и прошу помощи
Вы не просите помощи, т.к сами Вы ничего не написали - нельзя помочь тому, кто ничего не делает. Нужный Вам код тривиален. Просто сядьте и напишите эти несчастные три строки буквально дословно по Вашему словесному описанию. А вот если уж в этих трёх строках Вы умудритесь чего-то напарить, тогда уж и помощи просите.
вот что у меня получилось прошу проверить
Ну, во-первых, неплохо прикладывать лог - что печатается в строках 18 и 29? Что-то же печатается, так не скрывайте этого.
Во-вторых, Вы смотрели описания библиотеки DHT? Не знаю, какой версией Вы пользуетесь, но вот в этой функция readTemperature описана как:
float readTemperature(bool S=false, bool force=false);
т.е. возвращает она значение типа float. А Вы в 16-ой строке это значение в какой тип засовываете?
В третьих, переменная watch_time описана в строке 4 как
unsigned
long
. Так зачем Вы в строке 27 её значение к long преобразовываете? Чтобы оно тут же начало преобразовываться обратно?Ну, а так, запустите, посмотрите что печатает. Если останутся вопросы, поговорим.
про лог - буду в дальнейшем сохранять через COM програмулину в текст и в Excel, поэтому только цифры и точки запятые.
функцию readTemperature работает нормально в том виде как я написал - преобразую в int - так как не нужны десятые.
про (bool S=false, bool force=false) первый раз вижу - понятия не имею для чего это нужно
watch_time не буду в long преобразовывать - исправлю
спасибо
Так там не просто цифры! Там то, что Вы считали с датчика и вычисленное время! По-вашему их не нужно анализировать при отладке программы?
Не нормально. Если не нужны десятые, то припишите ещё +0.5. Так как у Вас сейчас, она Вам 15.999 до 15 окрулит, т.к. округляет она отбрасыванием дробной части.
Плохо, что Вы впервые видите библиотеку, которой пользуетесь :)
Так там не просто цифры! Там то, что Вы считали с датчика и вычисленное время! По-вашему их не нужно анализировать при отладке программы?
На предмет чего их анализировать - датчик выдает через цифровой выход значение температуры?!
Весь анализ будет в видет дат и цифр на графиках в Excel
остальное - ок спасибо
Вы, всё-таки не поняли. Поймите на будущее. Куда Вы помещаете свои числа - в эксель или печатаете на бумагу и на стенку вешаете - это Ваше дело. Но, когда Вы просите кого-то посмотреть Вашу программу, то этому человеку надо давать логи потому что так смотреть намного информативнее и человеку легче понимать что происходит. Понимаете? Это на будущее, с данной программой, как я понял, проблем уже нет.
да, спасибо
осталось понять как и для чего использовать (bool S=false, bool force=false)
Это опциональные параметры функции. Если их опустить (как Вы делаете), то они оба будут false.
Первый параметер:
если true - Фаренгейт, если false - Цельсий
Второй параметр:
если true - обязательно читать с датчика;
если false - читать с датчика только если последнее чтение было "давнее", чем 2 секунды назад, а если последнее чтоение было менее 2 секунд назад - просто вернуть его результат.
Это всё описано в библиотеке.
спасибо