2024-06-09 14:27:26 -07:00

97 lines
2.7 KiB
C++

/// © MiroZ 2024
#include "app_config.h"
#include "TaskMgr.h"
#include "Sensors.h"
static const char *TAG = "sensors";
#define ms_to_us(ms)(ms*1000)
Sensors::Sensors()
{
}
void Sensors::start()
{
m_bmp280 = new Bmp280(Wire);
m_bme68x = new Bme68x(Wire);
m_ld2410 = new LD2410();
if(!m_bmp280->init())
ESP_LOGE(TAG, "bmp280 sensor error");
if(!m_bme68x->init())
ESP_LOGE(TAG, "bme68x sensor error");
if(!m_ld2410->init())
ESP_LOGE(TAG, "ld2410 sensor error");
assert(m_i2c1_task = TaskMgr::getInstance().createTask(std::bind(&Sensors::run_i2c_1, this),
I2C1_TASK_NAME, I2C1_TASK_STACK_SIZE, I2C1_TASK_PRIORITY, I2C1_TASK_CORE));
assert(m_i2c2_task = TaskMgr::getInstance().createTask(std::bind(&Sensors::run_uart, this),
UART_TASK_NAME, UART_TASK_STACK_SIZE, UART_TASK_PRIORITY, UART_TASK_CORE));
}
// handles pressure and voc sensor
void Sensors::run_i2c_1()
{
while(true)
{
// m_bmp280->read();
// m_bme68x->read();
delay(10);
}
}
// handles radar only
void Sensors::run_uart()
{
int64_t last_read = esp_timer_get_time();
while(true)
{
bool has_read = m_ld2410->read();
if(has_read && esp_timer_get_time() - last_read >= ms_to_us(990))
{
int64_t now = esp_timer_get_time();
ESP_LOGI(TAG, "count %d", (int)m_ld2410->stationary_energy[0]);
if(m_ld2410->stationary_energy[0] != 0)
{
ESP_LOGI(TAG, "delta t: %lld", (now - last_read)/1000);
last_read = now;
ESP_LOGI("stationary energy", "%0.0f %0.0f %0.0f %0.0f %0.0f %0.0f %0.0f",
m_ld2410->stationary_energy[3]/m_ld2410->stationary_energy[0],
m_ld2410->stationary_energy[4]/m_ld2410->stationary_energy[0],
m_ld2410->stationary_energy[5]/m_ld2410->stationary_energy[0],
m_ld2410->stationary_energy[6]/m_ld2410->stationary_energy[0],
m_ld2410->stationary_energy[7]/m_ld2410->stationary_energy[0],
m_ld2410->stationary_energy[8]/m_ld2410->stationary_energy[0],
m_ld2410->stationary_energy[9]/m_ld2410->stationary_energy[0]);
ESP_LOGW("motion energy", "%0.0f %0.0f %0.0f %0.0f %0.0f %0.0f %0.0f %0.0f %0.0f",
m_ld2410->motion_energy[5]/m_ld2410->motion_energy[0],
m_ld2410->motion_energy[6]/m_ld2410->motion_energy[0],
m_ld2410->motion_energy[7]/m_ld2410->motion_energy[0],
m_ld2410->motion_energy[8]/m_ld2410->motion_energy[0],
m_ld2410->motion_energy[9]/m_ld2410->motion_energy[0],
m_ld2410->motion_energy[10]/m_ld2410->motion_energy[0],
m_ld2410->motion_energy[11]/m_ld2410->motion_energy[0],
m_ld2410->motion_energy[12]/m_ld2410->motion_energy[0],
m_ld2410->motion_energy[13]/m_ld2410->motion_energy[0]);
m_ld2410->resetGates();
}
}
if(has_read)
// next read will happen in 100ms. sleep untill just before then.
delay(95);
}
}