Форум по микроконтроллерам: Библиотека для DS18(B/S)20 под Arduino - Форум по микроконтроллерам

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

Библиотека для DS18(B/S)20 под Arduino

#1 Пользователь офлайн   Alex 

  • Убиватель МК
  • PipPipPipPip
  • Группа: Пользователи
  • Сообщений: 1 891
  • Регистрация: 15 Февраль 11

Отправлено 15 Январь 2016 - 22:12

Хочу представить Вам собственную библиотеку для работы с датчиками DS18B20, DS18S20, DS1820 под Arduino.
Конечно, библиотекой это сложно назвать, т.к. это всего-лишь единственный класс, обеспечивающий всё необходимое для работы с датчиками. Но всё-таки, это самое распространённое слово начинающих, они проводят больше времени за поиском всяких разных библиотек, чем за чтением книг.
Создавая её, я делал акцент на простоту использования. Многим начинающим тяжело разбираться во всяких протоколах, интерфейсах, командах и т.д... По этому, её использование я сделал на столько простым, на сколько это возможным.
Все преобразования, выдержки, посылки, команды, и т.д. реализует класс. Достаточно только подключить библиотеку, объявить объект с указанием номера вывода и максимальным количеством датчиков, и в программе просто читать температуру когда она будет готова. О готовности преобразования библиотека скажет сама.
У неё есть ещё один плюс, по сравнению со всеми остальными библиотеками. Вся работа с датчиками сделана на основе конечного автомата, который посылает нужные команды или читает данные с датчика только тогда, когда это необходимо, не тормозя вашу основную программу. Достаточно просто вызывать в основном цикле (в loop) один из методов библиотеки, который будет возвращать состояние преобразование температуры.

Итак. Сама библиотека :
Прикрепленный файл  ds18x20.rar (2,95К)
Количество загрузок:: 128
Состоит она из 2-ух файлов. Для её подключения, достаточно эти файлы положить рядом с файлом скетча (.ino) и в скетче подключить её строкой :
#include "ds18x20.h"


Библиотека имеет всего 3 метода и конструктор объявления. Рассмотрим их.

Обявление объкта.

ds18x20   name(pin, max_sensors);

name - это имя объекта, с которым вы, в дальнейшем, будете работать в программе.
pin- номер вывода Arduino, к которому подключены датчики.
max_sensors - максимальное количество датчиков, которое вы собираетесь подключать к выводу.


available

bool available()

Сервис производит всё обслуживание интерфейса и протокола, возвращая булево значение.
true - преобразование закончено. Можно читать преобразованную температуру.
false - преобразование ещё не закончено, либо ни одного датчика не найдено.
Необходимо сделать так, чтобы сервис как можно чаще вызывался в основном цикле (loop), чтобы преобразование происходило своевременно. Чем дольше будет доходить до него рабочая точка программы, тем дольше затянется момент преобразования температуры.


get_count

uint8_t get_count()

Метод возвращает количество найденных датчиков.


get_temperature

float get_temperature(sens_num)

Метод возвращает преобразованную температуру.
sens_num - порядковый номер датчика. Счёт начинается с нуля.
Если произошла ошибка чтения датчика, возвратиться число -1000
Метод не читает данные с датчика, он просто забирает из класса уже преобразованную температуру.


Пример использования :
#include "ds18x20.h"
#include <LiquidCrystal.h>

/**********************************************************************************************/
#define   DS18x20_PIN                10
#define   DS18x20_MAX_SENSORS        2
/**********************************************************************************************/
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
ds18x20   ds1820(DS18x20_PIN, DS18x20_MAX_SENSORS);   // Объявляем объект для работы с датчиками. Имя объекта - ds1820
                                                      // Нога = 10 (DS18x20_PIN). Максимальное кол-во датчиков = 2 (DS18x20_MAX_SENSORS)

/**********************************************************************************************/
void setup() {
  lcd.begin(16, 2);
}
/**********************************************************************************************/
void loop() {
uint8_t i;
float   temp;

if(ds1820.available()){               // Если преобразование завершено
  if(ds1820.get_count()>0){             // Если датчиков больше нуля. Т.е. есть хотябы один датчик
    temp = ds1820.get_temperature(0);     // Читаем температуры 1-ого датчика
    lcd.setCursor(0, 0);                  // Выводим её в первую строку LCD
    lcd.print(temp);                      //
  }
  if(ds1820.get_count()>1){             // Если датчиков больше одного. Т.е. есть хотябы два датчика
    temp = ds1820.get_temperature(1);     // Читаем температуры 2-ого датчика
    lcd.setCursor(0, 1);                  // Выводим её во вторую строку LCD
    lcd.print(temp);                      //
  }
}

}
/**********************************************************************************************/

Схема подключения :
Прикрепленное изображение: ds18x20 for Arduino.JPG

Архив со скетчем примера, библиотекой и проектом для Proteus 8 :
Прикрепленный файл  sketch_jan14c.rar (1,24МБ)
Количество загрузок:: 101
В архиве, также, имеется библиотека Arduino UNO для Proteus'а
Не говорите что мне делать, и я не скажу куда Вам идти !
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей