mirror of
https://github.com/stasenso/Thermometr_pico.git
synced 2026-10-25 17:13:33 +03:00
42 lines
2.3 KiB
C
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
|