#define BURG_FLAG (1 << 0)
#define BREAD_FLAG (1 << 1)
#define MEAT_FLAG (1 << 2)
#define VEGETABLE_FLAG (1 << 3)
EventGroupHandle_t xEventHamburg = NULL; // 做汉堡的事件组
// 面包服务员
void waiter_bread_task(void *param_t){
EventBits_t uxBits;
printf("[BRED] 骂骂咧咧的开始烤面包...\n");
vTaskDelay(pdMS_TO_TICKS(random(1000,5000)));
printf("[BRED] 面包烤好了,我打算设置标志位!\n");
uxBits = xEventGroupSync(xEventHamburg, // 事件句柄
BREAD_FLAG, // 要设置的标志位
BURG_FLAG | BREAD_FLAG | MEAT_FLAG | VEGETABLE_FLAG, // 同步等待的标志位
portMAX_DELAY); // 超时时间
printf("[BRED] 面包已就绪 : %X\n", uxBits);
vTaskDelete(NULL);
}
// 肉饼服务员
void waiter_meat_task(void *param_t){
EventBits_t uxBits;
printf("[MEAT] 叽叽歪歪的开始煎肉饼...\n");
vTaskDelay(pdMS_TO_TICKS(random(1000,5000)));
printf("[MEAT] 肉饼煎好了,我打算设置标志位!\n");
uxBits = xEventGroupSync(xEventHamburg, // 事件句柄
MEAT_FLAG, // 要设置的标志位
BURG_FLAG | BREAD_FLAG | MEAT_FLAG | VEGETABLE_FLAG, // 同步等待的标志位
portMAX_DELAY); // 超时时间
printf("[MEAT] 肉饼已就绪 : %X\n", uxBits);
vTaskDelete(NULL);
}
// 蔬菜服务员
void waiter_vegetable_task(void *param_t){
EventBits_t uxBits;
printf("[VEGE] 哼哼吱吱的做开始洗蔬菜...\n");
vTaskDelay(pdMS_TO_TICKS(random(1000,5000)));
printf("[VEGE] 蔬菜洗好了,我打算设置标志位!\n");
uxBits = xEventGroupSync(xEventHamburg, // 事件句柄
VEGETABLE_FLAG, // 要设置的标志位
BURG_FLAG | BREAD_FLAG | MEAT_FLAG | VEGETABLE_FLAG, // 同步等待的标志位
portMAX_DELAY); // 超时时间
printf("[VEGE] 蔬菜已就绪 : %X\n", uxBits);
vTaskDelete(NULL);
}
// 厨师线程
void chef_task(void *param_t){
pinMode(4, INPUT_PULLUP);
EventBits_t uxBits;
while(1){
if(digitalRead(4) == LOW){
// 开始做汉堡
printf("[CHEF] 美滋滋的做开始磨洋工...\n");
uxBits = xEventGroupSync(xEventHamburg, // 事件句柄
BURG_FLAG, // 要设置的标志位
BURG_FLAG | BREAD_FLAG | MEAT_FLAG | VEGETABLE_FLAG, // 同步等待的标志位
portMAX_DELAY); // 超时时间
printf("[CHEF] 汉堡做好了,大家可以下班了 : %X\n", uxBits);
vTaskDelete(NULL);
}
vTaskDelay(100);
}
}
void setup() {
Serial.begin(115200);
xEventHamburg = xEventGroupCreate(); //初始化事件组
// 启动各个线程
xTaskCreate(chef_task, "Chef", 1024*2, NULL, 1, NULL);
xTaskCreate(waiter_bread_task, "Bread", 1024*2, NULL, 1, NULL);
xTaskCreate(waiter_meat_task, "Meat", 1024*2, NULL, 1, NULL);
xTaskCreate(waiter_vegetable_task, "Vegetable", 1024*2, NULL, 1, NULL);
}
void loop() {
delay(100);
}
esp:0
esp:1
esp:2
esp:3
esp:4
esp:5
esp:6
esp:7
esp:8
esp:9
esp:10
esp:11
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:20
esp:21
esp:35
esp:36
esp:37
esp:38
esp:39
esp:40
esp:41
esp:42
esp:45
esp:46
esp:47
esp:48
esp:3V3.1
esp:3V3.2
esp:RST
esp:5V
esp:GND.1
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:GND.4
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r