# Библиотека для работы с датчиками температуры DS18B20 по 1-Wire

---

## Описание

Данная библиотека предоставляет драйвер для работы с цифровыми температурными датчиками DS18B20, подключёнными по однопроводному интерфейсу 1-Wire. Библиотека поддерживает:
- Инициализация шины 1-Wire и обнаружение всех датчиков на шине
- Инициализация датчика по:
  - ROM-адресу
  - Пользовательским байтам (TH, TL, UserByte3, UserByte4)
  - Индексу (порядковому номеру) найденного устройства
- Запуск преобразования температуры у всех или отдельных датчиков с выбором метода ожидания окончания преобразования (по шине или задержкой)
- Чтение температуры и проверка статуса подключения датчика
- Возможность замены потерянного датчика в структуре

---

## Быстрый старт

### 1. Настройка порта и таймера для 1-Wire (файл `ow_port.h`):
```c
#define OW_GPIO_Port  GPIOB
#define OW_Pin_Numb   0
#define OW_Pin        (1 << OW_Pin_Numb)
#define OW_TIM        TIM3
#define OW_TIM_1US_PERIOD 24
```

### 2. Подключение библиотеки и инициализация таймера:
```c
#include "dallas_tools.h"

MX_TIM_Init();  // Инициализация таймера (например, TIM3)
```

### 3. Инициализация шины и поиск датчиков:
```c
Dallas_BusFirstInit(&htim);
```

### 4. Инициализация структуры датчика по одному из методов:
```c
DALLAS_SensorHandleTypeDef sens;
// Инициализация по индексу (порядковому номеру найденного датчика)
sens1.Init.init_func = &Dallas_SensorInitByInd;
sens1.Init.InitParam.Ind = 0;

// Инициализация по ROM-адресу
sens2.Init.init_func = &Dallas_SensorInitByROM;
sens2.Init.InitParam.ROM = rom_address;

// Инициализация по пользовательским байтам
sens3.Init.init_func = &Dallas_SensorInitByUserBytes;
sens3.Init.InitParam.UserBytes.UserByte1 = 1;
sens3.Init.InitParam.UserBytes.UserByte2 = 2;
sens3.Init.InitParam.UserBytes.UserByte3 = 3;
sens3.Init.InitParam.UserBytes.UserByte4 = 4;
```

### 5. Добавление датчика в обработку:
```c
Dallas_AddNewSensors(&hdallas, &sens);
```

### 6. Запуск измерения и чтение температуры:
```c
Dallas_StartConvertTAll(&hdallas, DALLAS_WAIT_BUS, 0);
Dallas_ReadTemperature(&sens);
```

| Функция                                                  | Описание                                                   | 
| -------------------------------------------------------- | ---------------------------------------------------------- | 
| `Dallas_BusFirstInit(&htim)`           | Инициализация шины 1-Wire, запуск таймера и поиск датчиков |
| `Dallas_AddNewSensors(&hdallas, &sensor)`                  | Инициализация структуры датчика и добавление в работу      |
| `Dallas_ReplaceLostedSensor(&sensor)`                     | Замена потерянного датчика на новый, если доступен         |
| `Dallas_StartConvertTAll(&hdallas, waitCondition, delay)` | Запуск преобразования температуры на всех датчиках         |
| `Dallas_ConvertT(&sensor, waitCondition)`                 | Запуск преобразования температуры на одном датчике         |
| `Dallas_ReadTemperature(&sensor)`                         | Чтение температуры с датчика                               |
| `Dallas_IsConnected(&sensor)`                             | Проверка подключения датчика (чтение scratchpad)           |
| `Dallas_WriteUserBytes(&sensor, bytes12, bytes34, mask)`  | Запись пользовательских байт в датчик                      |


## Требуемые зависимости

- Драйвер 1-Wire (`onewire.c/h`, `ow_port.c/h`)
- Драйвер DS18B20 (`ds18b20.c/h`)

---

## Примечания
- Функции работы с датчиками возвращают статус в формате `HAL_StatusTypeDef`.
- Ожидание окончания преобразования температуры настраивается через `DALLAS_WaitConvertionTypeDef`:
  - `DALLAS_WAIT_BUS` — ожидание по состоянию линии 1-Wire.
  - `DALLAS_WAIT_DELAY` — фиксированная задержка, зависящая от выбранного разрешения.
  - `DALLAS_WAIT_NONE` — без ожидания (асинхронный режим).
- При потере связи с датчиком функция `Dallas_IsConnected` помечает датчик как потерянный. Для восстановления работы можно вызвать `Dallas_ReplaceLostedSensor`, она будет искать датчик и пытаться его инициализировать по заданной функции инициализации.