typedef enum // flange隙音效状态
{
FL_START = 0, //
FL_CHKSPEED, //
FL_SPEEDHIGH, //
FL_SPEEDMID, //
FL_SPEEDLOW,
} FLANGE_State;
typedef struct
{
uint8_t func_state;
uint8_t speed;
} SFCONFIG;
TaskHandle_t ReadHandle;
// uint8_t value = 0;
SFCONFIG value;
void read_task(void *ptr) {
// LEDFLASH * ptLedFlash = (LEDFLASH *)pt;
// byte pin = ptLedFlash->pin;
// int delayTime = ptLedFlash->delayTime;
SFCONFIG * SFptr = (SFCONFIG *)ptr;
FLANGE_State FL_state = FL_START;
bool fl_ab = true;
char flange_buf[10] = "";
while (1)
{
uint8_t FL_func = SFptr->func_state;
uint8_t FL_Speed = SFptr->speed;
// Serial.println(FL_func);
// Serial.println(FL_Speed);
switch (FL_state)
{
case FL_START:
Serial.println("RESTART");
if (FL_func == 1)
FL_state = FL_CHKSPEED;
break;
case FL_CHKSPEED:
Serial.println(FL_Speed);
if (FL_Speed > 160)
FL_state = FL_SPEEDHIGH;
if (FL_Speed > 110 && FL_Speed<=160)
FL_state = FL_SPEEDMID;
if (FL_Speed > 35 && FL_Speed<=110)
FL_state = FL_SPEEDLOW;
if (FL_func == 0)
FL_state = FL_START;
break;
case FL_SPEEDLOW:
if (FL_Speed < 34 || FL_Speed > 110)
FL_state = FL_CHKSPEED;
if (fl_ab)
{
sprintf(flange_buf, "/fla%d.wav", random(1, 6));
}
else
{
sprintf(flange_buf, "/flb%d.wav", random(1, 6));
}
Serial.println(flange_buf);
fl_ab = !fl_ab;
break;
case FL_SPEEDMID:
Serial.println("FL_SPEEDMID");
vTaskDelay(1000);
FL_state = FL_CHKSPEED;
break;
case FL_SPEEDHIGH:
Serial.println("FL_SPEEDHIGH");
vTaskDelay(1000);
FL_state = FL_CHKSPEED;
break;
}
vTaskDelay(100);
}
}
void speed_task(void * ptr) {
pinMode(2, INPUT);
while (1) {
value.speed = map(analogRead(2), 0, 4096, 0, 256);
vTaskDelay(100);
}
}
void button_task(void * ptr) {
pinMode(13, INPUT_PULLUP);
while (1) {
value.func_state = 1;
if (digitalRead(13) == LOW)
{
value.func_state = 0;
vTaskDelay(100);
}
}
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
xTaskCreate(speed_task, "GIVE SPEED", 1024, NULL, 1, NULL);
xTaskCreate(button_task, "GIVE TAGRT", 1024, NULL, 1, NULL);
xTaskCreate(read_task, "SHOW", 1024*3, (void*)&value, 1, &ReadHandle);
// Serial.println("Hello, ESP32!");
}
void loop() {
vTaskDelay(2000);
int waterMark = uxTaskGetStackHighWaterMark(ReadHandle);
Serial.print("Task Free Memory: ");
Serial.print(waterMark);
Serial.println(" Bytes");
Serial.print("Task Used Memory: ");
Serial.print(1024*3 - waterMark);
Serial.println(" Bytes");
Serial.println(value.func_state);
Serial.println(value.speed);
vTaskDelay(1000);
}