#define START_FLAG (1 << 0)
#define ONE_FLAG (1 << 1)
#define TWO_FLAG (1 << 2)
#define THREE_FLAG (1 << 3)
EventGroupHandle_t xEventDONGCHE = NULL;
void ONE_task(void *param_t){
EventBits_t uxBits;
printf("[ONE] 第一节车厢准备...\n");
vTaskDelay(pdMS_TO_TICKS(random(1000,5000)));
printf("[ONE] 第一节车厢准备好了 等待设置标志位!\n");
uxBits = xEventGroupSync(xEventDONGCHE, // 事件句柄
ONE_FLAG, // 要设置的标志位
START_FLAG | ONE_FLAG | TWO_FLAG | THREE_FLAG, // 同步等待的标志位
portMAX_DELAY); // 超时时间
printf("[ONE] 第一节动车准备就绪 : %X\n", uxBits);
vTaskDelete(NULL);
}
void TWO_task(void *param_t){
EventBits_t uxBits;
printf("[TWO] 第二节车厢准备...\n");
vTaskDelay(pdMS_TO_TICKS(random(1000,5000)));
printf("[TWO] 第二节车厢准备好了 等待设置标志位!\n");
uxBits = xEventGroupSync(xEventDONGCHE, // 事件句柄
TWO_FLAG, // 要设置的标志位
START_FLAG | ONE_FLAG | TWO_FLAG | THREE_FLAG, // 同步等待的标志位
portMAX_DELAY); // 超时时间
printf("[TWO] 第二节车厢准备就绪 : %X\n", uxBits);
vTaskDelete(NULL);
}
void THREE_task(void *param_t){
EventBits_t uxBits;
printf("[THREE] 第三节车厢准备...\n");
vTaskDelay(pdMS_TO_TICKS(random(1000,5000)));
printf("[TGHREE] 第三节车厢准备好了 等待设置标志位!\n");
uxBits = xEventGroupSync(xEventDONGCHE, // 事件句柄
THREE_FLAG, // 要设置的标志位
START_FLAG | ONE_FLAG | TWO_FLAG | THREE_FLAG, // 同步等待的标志位
portMAX_DELAY); // 超时时间
printf("[THREE] 第三节车厢就绪 : %X\n", uxBits);
vTaskDelete(NULL);
}
void START_task(void *param_t){
pinMode(4, INPUT_PULLUP);
EventBits_t uxBits;
while(1){
if(digitalRead(4) == LOW){
printf("[START] ...\n");
uxBits = xEventGroupSync(xEventDONGCHE, // 事件句柄
START_FLAG, // 要设置的标志位
START_FLAG | ONE_FLAG | TWO_FLAG | THREE_FLAG, // 同步等待的标志位
portMAX_DELAY); // 超时时间
printf("[START]:动车出发了 下班 %X\n", uxBits);
vTaskDelete(NULL);
}
vTaskDelay(100);
}
}
void setup() {
Serial.begin(115200);
xEventDONGCHE = xEventGroupCreate(); //初始化
xTaskCreate(START_task, "START", 1024*2, NULL, 1, NULL);
xTaskCreate(ONE_task, "ONE", 1024*2, NULL, 1, NULL);
xTaskCreate(TWO_task, "TWO", 1024*2, NULL, 1, NULL);
xTaskCreate(THREE_task, "THREE",1024*4, NULL, 1, NULL);
}
void loop() {
delay(100);
}