Files
Thermometr_pico/src/dht22.h
T
2026-05-02 20:02:11 +03:00

42 lines
2.3 KiB
C

#ifndef DHT22_H // защита от двойного включения
#define DHT22_H // открываем тело заголовка
#include "hardware/pio.h" // типы и API PIO
#include "pico/types.h" // базовые типы Pico SDK
typedef enum { // коды результата чтения
DHT22_OK = 0, // чтение успешно
DHT22_TIMEOUT, // датчик не ответил вовремя
DHT22_CHECKSUM_ERROR, // контрольная сумма не сошлась
DHT22_BUS_STUCK // линия данных зажата в нуле
} dht22_status_t; // тип статуса DHT22
typedef struct { // состояние драйвера датчика
PIO pio; // используемый блок PIO
uint sm; // номер state machine
uint pin; // GPIO линии данных
uint offset; // смещение программы в PIO
} dht22_t; // дескриптор DHT22
/*
* Инициализирует драйвер DHT22.
* На вход принимает:
* dev - структуру, куда сохраняется состояние драйвера;
* pio - блок PIO, который будет выполнять программу чтения;
* sm - номер state machine внутри выбранного PIO;
* pin - GPIO, к которому подключена линия данных датчика.
* Ничего не возвращает.
*/
void dht22_init(dht22_t *dev, PIO pio, uint sm, uint pin); // инициализирует PIO и GPIO
/*
* Выполняет одно чтение DHT22.
* На вход принимает:
* dev - ранее инициализированный дескриптор датчика;
* temperature_x10 - указатель, куда будет записана температура в десятых долях градуса;
* humidity_x10 - указатель, куда будет записана влажность в десятых долях процента.
* Возвращает код результата: успех, таймаут, ошибка контрольной суммы или залипшая шина.
*/
dht22_status_t dht22_read(dht22_t *dev, int16_t *temperature_x10, uint16_t *humidity_x10); // читает температуру и влажность x10
#endif // DHT22_H