Files
@ aee85174089e
Branch filter:
Location: protofusion-esp32-template/main/squeeze.c - annotation
aee85174089e
1.8 KiB
text/plain
Add missing files for squeeze and nv storage
aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e aee85174089e | #include "driver/adc.h"
#include "esp_adc_cal.h"
#include "esp_log.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "squeeze.h"
static const char *TAG = "squeeze";
esp_adc_cal_characteristics_t adc1_chars;
// Private prototypes
static void squeeze_process(void);
void squeeze_init(void)
{
// ADC1 chan0 is PIN1
adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_DB_12);
esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_12, ADC_WIDTH_BIT_DEFAULT, 0, &adc1_chars);
xTaskCreatePinnedToCore(squeeze_process, "squeeze", 1024*2, NULL, 10, NULL, 1);
}
// Definitions
#define ALPHA_FAST 0.02f
#define ALPHA_SLOW 0.005f
// Private variables
static float reading_fast = 0.0f;
static float reading_slow = 0.0f;
static float delta_last = 0.0f;
static uint8_t triggered_flag = 0;
static void squeeze_process(void)
{
for(;;)
{
uint32_t millivolts = esp_adc_cal_raw_to_voltage(adc1_get_raw(ADC1_CHANNEL_0), &adc1_chars);
reading_fast = (ALPHA_FAST * millivolts) + ((1.0-ALPHA_FAST) * reading_fast);
reading_slow = (ALPHA_SLOW * millivolts) + ((1.0-ALPHA_SLOW) * reading_slow);
float delta = reading_fast - reading_slow;
//ESP_LOGI(TAG, "ADC read %lu fast=%g slow=%g delta=%g", millivolts, reading_fast, reading_slow, delta);
if(delta > 4.0 && delta_last < 4.0)
{
ESP_LOGI(TAG, "Trigger at delta %g", delta);
// set flag, consumed on read by squeeze_triggered()
triggered_flag = 1;
}
delta_last = delta;
vTaskDelay(10 / portTICK_PERIOD_MS);
}
}
float squeeze_value(void)
{
return reading_fast;
}
uint8_t squeeze_triggered(void)
{
if(triggered_flag == 1)
{
// consume
triggered_flag = 0;
return 1;
}
else
{
return 0;
}
}
|