Датчики температуры выдают неправильный результат
- Войдите на сайт для отправки комментариев
Есть 4 датчика температуры: 2 шт. DS18B20 и по одному DHT22 и NTC термистор. Также добавил датчик росы/дождя. На ардуино уно все датчики подключал через W5100 ethernet шилд. Залил скетч чтобы каждые 5 минут отправлял на сервер GET запрос с данными, а php файл на сервере добавляет эти данные в базу. Все работает.
Но теперь захотел изменить логику. Теперь сервер будет каждые 5 минут запрашивать у ардуно данные. На ардуино подключил ENC28J60 и "поднял сервер" по адресу 192.168.1.203. Написал тестовую страничку в скетче. Браузер нормально показывает страницу по адресу 192.168.1.203. Работает. Теперь подключил все те датчики и нужный часть кода тоже со старого скетча скопировал. И тут что то пошло не так. Сначала из 10 попыток 1 раз только открыл страницу 192.168.1.203. И то данные пятизначные не понятные откуда. Например DS18B20 и DHT22 показывают температуру в доме 16844. Подумал модулю ENC28J60 не хватает питание, хотя в обоих случаях ардуино питается от 12В 1А блока питания. Модуль ENC28J60 работает от 3.3В. В проекте от 3.3В также работает и NTC термистор. В общем, отключил NTC термистор и страницу стало открывать нормально. Но данные все те же. Сейчас первая DS18B20 показывает 0, вторая 16836, DHT22 тоже 16836, а влажность вроде нормальные данные 24%, хотя тоже врет думаю. Обычно 30-35%.
В общем, как получить "правильные" данные? Знаю что сервер можно поднять и на W5100, но надо использовать именно ENC28J60.
Есть волшебное слово отладка. Займитесь ей. Вы думаете софт пишут и он сразу работает?! А потом в него немного ошибок дописывают чтоб разрабов не уволили?!
Идея вебсервака на ардуино пагубна, не невозможна, просто плоха, слабовато оно, брали бы оранжпи было бы менее проблемно даже дешевле.
В Arduino IDE есть отладчик? Или имеете ввиду монитор порта? Пробовал выводить данные в монитор порта. Что интересно там данные показываются нормально.
Честно говоря, не знал про Orange Pi. Спасибо за наводку.
Ардуино и эти датчики просто лежали без дела. Поэтому решил сделать что то полезное, может и не очень, на досуге.
В общем пока решил проблему так: подключил модуль, который получает 5В, а при выходе отдает 3.3В и все компоненты, которые работают от 3.3В запитал через него. А в коде пришлось float на int изменить. Тогда все работает нормально. Теперь ищу как же сохранить и дробные части. Наткнулся на такое:
Класс std не знаю откуда, может из Math.h, но не работал. std::modf написал просто modf. Компиляция и загрузка идет без ошибок, но ожидаемого результата все равно не получил. Целая часть сохраняется в X, а вот дробная в Y не сохраняется, равно 0.
*****
Решил простым способом: