#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