Часы с градусником на ds18b20
У меня есть скетч часов , который нормально работает на моей меге .
После получения датчиков температуры решил добавить градусник , чтоб место на экране не пропадало.
Воспользовался библиотекой которую тут посоветовали и добавил несколько строк в скетч .
Все работает , но показания градусника не постоянно на экране а мигают с примерно раз в секунду .Видимо это происходит в момент опроса датчика .
Вопрос как это мигание убрать ?
И еще из за этого показания секунд на часах прыгают через секунду.
скетч тут http://pastebin.com/jfthH65s
библиотека для датчика тут http://www.milesburton.com/?title=Da...ontrol_Library
Спасибо .
Re: Часы с градусником на ds18b20
А если delay(1000); убрать?
Еще нужно опрашивать буфер вот так
if(Serial.available()>n) вместо n нужно указать реальное число принимаемых байт
Re: Часы с градусником на ds18b20
мигание происходит после или во время выполнения этой строки
sensors.requestTemperatures();
проверял , сначала строка была перед lcd.print("T: "); и мигало T: 20.0
переставил
lcd.print("T: ");
sensors.requestTemperatures();
lcd.print(sensors.getTempCByIndex(0));
и T: перестало мигать, теперь только цифры температуры мигают. Остальная информация статично висит на экране .
и delay в цикле установки времени не влияет .
Re: Часы с градусником на ds18b20
с миганием разобрался .
перенес sensors.requestTemperatures(); в начало void loop
и вместо lcd.print(sensors.getTempCByIndex(0)); сделал lcd.print(temp) значение которой получаестя сразу за sensors.requestTemperatures();
насколько я понял теперь надо в библиотеке все delay на millis менять .
Правда не уверен что у меня это получится .
Re: Часы с градусником на ds18b20
Помогите убрать delay из библиотеки DallasTemperature
Для работы с датчиком необходимо выдерживать временные паузы , в библиотеке это реализовано через delay() .
Но я использую эту библиотеку в часах и из за delay индикация секунд идет с пропусками .
Как я понимаю надо delay заменить на использование millis как в этом примере http://arduino.ru/tutorials/BlinkWithoutDelay.
Но написать не получается , может кто поможет переделать фрагмент кода , был бы очень благодарен.
switch (*bitResolution)
{
case 9:
delay(94);
break;
case 10:
delay(188);
break;
case 11:
delay(375);
break;
case 12:
default:
delay(750);
break;
}
Re: Часы с градусником на ds18b20
Это же ветвление и в зависимости от значения в bitResolution
н выходе будет импульс разной длины
Re: Часы с градусником на ds18b20
весь вопрос в том как переписать это и не использовать delay
Re: Часы с градусником на ds18b20
Цитата:
Сообщение от
Mitos
весь вопрос в том как переписать это и не использовать delay
Придется переписывать еще и OneWire библиотеку :) Правильнее было бы RTC модуль или чип использовать, например как тут: DS1307 или тут: DS1307 RTC
Re: Часы с градусником на ds18b20
так часы то идут нормально , проблема только с индикацией .
и происходят они из за delay в библиотеке от датчика .
Re: Часы с градусником на ds18b20
Цитата:
Сообщение от
Mitos
так часы то идут нормально , проблема только с индикацией .
и происходят они из за delay в библиотеке от датчика .
1. уменьши точность датчика температуры, поставь PRECISION=9, это есть в примере к библиотеке, опрос будет происходить быстрее.
2. Измерь, сколько миллисекунд опрашивается датчик температуры (время работы sensors.requestTemperatures()) и в основном цикле вместо delay(1000); напиши так:
Код:
void loop(){
sensors.requestTemperatures();
delay(1000-время работы requestTemperatures);
}
а по хорошему - можно вообще опрашивать датчик температуры раз в 2-3-5 минут, не чаще.
Но я бы все же использовал RTC, это же очевидно - и высокая точность, и часы не зависят от отключения питания...