собрать термометр на DS18B20 и MT-16S2H
- Войдите на сайт для отправки комментариев
Пнд, 27/01/2014 - 21:09
У меня работают датчики DS1820 и индикатор MT016S2H с ардуино мега. Хочу сделать цифровой термометр. В программировании пока новичок, перелистал форум , но не нашел подобного примера.
Прошу дать ссылку.
Уточняю. Отдельно работают с мега и датчик и табло.
Вот таблица совместимости:
http://www.gaw.ru/html.cgi/txt/lcd/lcm/melt/cros.htm
Судя по ней, можно использовать обычную библиотеку LiquidCrystal.h (или I2C).
А вообще, мне кажеться, что Вы ничего так и не искали..
P.S.Не понятно почему вы тему создали в разделе "Проекты"..
Вы меня наверно не поняли. Я нашел скетч,он компилируется, но вывода информации на табло нет. Отдельно табло и датчик работают. Я предполагаю, что есть ошибка. Если можете - пожалуйста подскажите. Вот скетч:
#include <OneWire.h>
#include <LiquidCrystal.h>
"Temp. OUT: " - на дисплей выводится? (строку инициализации дисплея нужно давать именно ту, с которой работает ;))
в сериал значения температуры (Whole) выводятся нормально?
если на оба вопроса - "да", копать в сторону преобразования типов данных (lcd.print хочет строку в качестве параметра, а вы ему int скормить пытаетесь).
Кстати, в вашем скетче отрицательные температуры вроде как не отрабатываются...
Понял ровно столько, на сколько вы написали.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //у моего табло выводы 13, 12, 11, 10, 5, 4 -это здесь важно?
Конечно важно! Именно этими пинами и получает ваш LCD данные.
и еще lcd.begin(16, 1); если я не ошибаюсь инициализация делается один раз в setup. И экран у Вас 2-х строчный, значит:lcd.begin(16, 2);
и перед выводом обычно используют: lcd.setCursor(0, 0); т.е. указывают куда "писать" данные. 0,0 - первый символ первой строки.
Возьмите как шаблон свой рабочий скетч, тот что работает с экраном и дописывайте свой DS18b20.
Покажите свои рабочие коды, которые работают с экраном и датчиком по отдельности.
Спасибо,Life23! попробую.
Уважаемый Life23!, у меня все получилось - еще раз спасибо за поддержку. Проблема была в указании используемых выводов.
Сразу все заработало. Начальная установка курсора убрала сдвиг текста. Стал изменять текст - тоже дает понимание операторов и я смог вставить комментарий. Но многие функции пока не понимаю, хотя хочется. например первый блок 1-10:
if ( OneWire::crc8( addr, 7) != addr[7]) { delay(1000); return; } } void getTemp() { ds.reset(); ds.select(addr); ds.write(0x44,1); present = ds.reset(); ds.select(addr); ds.write(0xBE); //считываем ОЗУ датчика for ( i = 0; i < 9; i++) { //обрабатывем 9 байт data[i] = ds.read(); } // Вычисляем температуру: LowByte = data[0]; HighByte = data[1]; // что это 1 и 2? HighTemp = data[2]; TReading = (HighByte << 8) + LowByte; Tc_100 = (6 * TReading) + TReading / 4; Whole = Tc_100 / 100; //округление до целого }
Вам также большое спасибо за подсказки, ustas - сразу я их не даже не осознал. Теперь понимаю. отрицательные значения я пока не знаю как обрабатывать. если можете - подскажите пожалуйста.
Тоже интересует.