Vlado писал(а):А как у вас подключен датчик? ардуино? каким кабелем? Скрутки или винтовые соединения?
Просто у меня при больших расстояниях ds18b20 на megad2561 показывал что типа -168. Как вариант плохое соединение, либо кабель.
Но соглашусь костыль
обычная витая пара, по дому пустил от меги метра 4-5 в данном случае, в принципе уже какое то время использую в доме мега+витая пара до 10-15 м дальше не пробовал, главное стабильное питание.
Проблем нет, кое где в одном кабель канале с 220в - тоже норм, хотя читал страшилки про наводки и т.д
полет года 2 как нормальный.
Соединения со старых разьемов с ес1840 остались там штырьки очень туго входят - контакт хороший...ну или паяю, кое где где неуверен ставлю резьбовые разьемы под болты.
По ds18b20 у меня на ардуине не реализованы задержки в коде а датчиков около 6 уже, ну и на бойлере опрос быстрый раз в 4 секунды, вот и вылетает в час пару глюков.
Это в принципе не критично
По коду вариант интересный изучу спс.
Может в скетче меги использовать sleep? а лучше mills?
Быть может шина в процессе опроса занята и выдает абракадабру?
У себя сделал период опроса 1 минута практически всех датчиков, оптимально я думаю такой период будет и для систем отопления, бойлеров, ну за минуту грубо скажем если температура достигла 75 градусов, ну максимум на 1 градус поднимется, это же не критично? Зато система будет стабильней без промежуточного мусора. Опрос раз в 4 секунды в 60 секунд плодит 15 записей в БД
не рациональная нагрузка.
Так вот об sleep и mills, лучше последнее
Код будет примерно следующий (код для понятия принципа работы)
Код: Выделить всё
const int button1Pin = 2;
const int button2Pin = 3;
const int led1Pin = 4;
const int led2Pin = 5;
unsigned long led1OnTime;
unsigned long led2OnTime;
bool led1On;
bool led2On;
void setup() {
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(button1Pin, INPUT);
pinMode(button2Pin, INPUT);
led1On = false;
led2On = false;
}
void loop(){
if (digitalRead(button1Pin) == HIGH) {
digitalWrite(led1Pin, HIGH);
led1On = true;
led1OnTime = millis();
}
if (digitalRead(button2Pin) == HIGH) {
digitalWrite(led2Pin, HIGH);
led2On = true;
led2OnTime = millis();
}
if(led1On)
if(millis() - led1OnTime > 30000) {
digitalWrite(led1Pin, LOW);
led1On = false;
}
if(led2On)
if(millis() - led2OnTime > 30000) {
digitalWrite(led2Pin, LOW);
led2On = false;
}
}
Когда кнопка нажата, скетч заставляет светодиод включится, сохраняет текущее время и меняет значение в переменной статуса.
Если светодиод горит (переменная состояния равна true), скетч периодечески проверяет длительность состояния вкл. (30 секунд, то есть 30000 милисекунд): если период превышает допустимый (30 секунд 30000 миллисекунд), то это значит, что светодиод выключен.
(с) взято на просторах интернета.
глюки - это критично
п.с. - 220 может давать наводки, и как понимаю может быть очень критично для 1 wire сетей, есть страшилки что возможно и полный отказ сети в связи с тем что сгорит или что то в этом роде