esp32-ogn-tracker/main/knob.cpp

47 wiersze
1.1 KiB
C++

#include <stdlib.h>
#include "hal.h"
#include "knob.h"
#include "format.h"
#ifdef WITH_KNOB
volatile uint8_t KNOB_Tick=15;
#ifdef __cplusplus
extern "C"
#endif
void vTaskKNOB(void* pvParameters)
{
uint8_t Tick=KNOB_Tick;
for( ; ; )
{ vTaskDelay(40);
#ifdef WITH_STM32
xSemaphoreTake(ADC1_Mutex, portMAX_DELAY); // request
uint16_t Knob = ADC_Read_Knob(); // read knob position: 0..2047
xSemaphoreGive(ADC1_Mutex);
#endif
#ifdef WITH_ESP32
uint16_t Knob = KnobSense();
#endif
uint16_t PrevKnob = ((uint16_t)Tick<<8)+0x80;
int16_t Err = Knob-PrevKnob;
if(abs(Err)>=(0x80+0x20)) // 0x20 is the histeresis to avoid noisy input
{ KNOB_Tick = (Tick = (Knob>>8)); Play(Play_Vol_1 | Play_Oct_1 | Tick, 5);
// if(KNOB_Tick&1) LED_BAT_On();
// else LED_BAT_Off();
// xSemaphoreTake(CONS_Mutex, portMAX_DELAY);
// Format_UnsDec(CONS_UART_Write, (uint16_t)Tick);
// CONS_UART_Write('\r'); CONS_UART_Write('\n');
// xSemaphoreGive(CONS_Mutex);
}
}
}
#endif // WITH_KNOB