#define START_FLAG (1 << 0)
#define MANIPULATOR1_FLAG (1 << 1)
#define MANIPULATOR2_FLAG (1 << 2)
#define MANIPULATOR3_FLAG (1 << 3)
EventGroupHandle_t xEventGoods = NULL; // 运载货物的事件组
// 车1运送
void car_transport_task1(void *param_t){
EventBits_t uxBits;
uxBits = xEventGroupWaitBits(xEventGoods, // 事件组句柄
START_FLAG, // 等待开始事件
pdTRUE, // 读取后不清空标志位
pdTRUE, // ADN关系,1个值无所谓
portMAX_DELAY);
printf("[MANIPULATOR1] 等到“运送”指令 : %X\n", uxBits);
vTaskDelay(pdMS_TO_TICKS(random(500,2000)));
uxBits = xEventGroupSetBits(xEventGoods, MANIPULATOR1_FLAG); // 设置机械臂1标志位
printf("[MANIPULATOR1] 机械臂1准备就绪 : %X\n", uxBits);
vTaskDelete(NULL);
}
// 车2运送
void car_transport_task2(void *param_t){
EventBits_t uxBits;
delay(1000);
uxBits = xEventGroupWaitBits(xEventGoods, // 事件组句柄
START_FLAG, // 等待开始事件
pdFALSE, // 读取后不清空标志位
pdTRUE, // ADN关系,1个值无所谓
portMAX_DELAY);
printf("[MANIPULATOR2] 等到“运送”指令 : %X\n", uxBits);
vTaskDelay(pdMS_TO_TICKS(random(500,2000)));
uxBits = xEventGroupSetBits(xEventGoods, MANIPULATOR2_FLAG); // 设置机械臂2标志位
printf("[MANIPULATOR2] 机械臂2准备就绪 : %X\n", uxBits);
vTaskDelete(NULL);
}
// 车3运送
void car_transport_task3(void *param_t){
EventBits_t uxBits;
delay(1000);
uxBits = xEventGroupWaitBits(xEventGoods, // 事件组句柄
START_FLAG, // 等待开始事件
pdFALSE, // 读取后不清空标志位
pdTRUE, // ADN关系,1个值无所谓
portMAX_DELAY);
printf("[MANIPULATOR3] 等到“运送”指令 : %X\n", uxBits);
vTaskDelay(pdMS_TO_TICKS(random(500,2000)));
uxBits = xEventGroupSetBits(xEventGoods, MANIPULATOR3_FLAG); // 设置机械臂3标志位
printf("[MANIPULATOR3] 机械臂3准备就绪 : %X\n", uxBits);
vTaskDelete(NULL);
}
// 发送指令
void order_task(void *param_t){
pinMode(4, INPUT_PULLUP);
while(1){
if(digitalRead(4) == LOW){
// 开始做汉堡
EventBits_t uxBits; // 设置事件标志位的返回值
uxBits = xEventGroupSetBits(xEventGoods, START_FLAG); // 这个返回值有可能会清空标志位,具体读文档
printf("[ORDER] 开始发送“指令” : %X\n", uxBits);
uxBits = xEventGroupWaitBits(xEventGoods, // 事件句柄
CAR1_FLAG | CAR2_FLAG | CAR3_FLAG, // 等待代表电动车1、电动车2、电动车3的标志位
pdFALSE, // 是否清空对应标志位
pdTRUE, // 等待的Bits判断关系 True为 AND, False为 OR
portMAX_DELAY); // 等待超时时间
printf("[ORDER] “指令”发送完毕 : %X\n", uxBits);
// 重置事件组
xEventGroupClearBits(xEventGoods, START_FLAG | MANIPULATOR1_FLAG | MANIPULATOR2_FLAG | MANIPULATOR3_FLAG);
uxBits = xEventGroupGetBits(xEventGoods);
printf("[ORDER] 物资都齐全,电动车发车 : %X\n", uxBits);
vTaskDelete(NULL);
}
vTaskDelay(100);
}
}
void setup() {
Serial.begin(115200);
xEventGoods = xEventGroupCreate(); //初始化事件组
// 启动各个线程
xTaskCreate(order_task, "Order", 1024*2, NULL, 1, NULL);
xTaskCreate(car_transport_task1, "Manipulator1", 1024*2, NULL, 1, NULL);
xTaskCreate(car_transport_task2, "Manipulator2", 1024*2, NULL, 1, NULL);
xTaskCreate(car_transport_task3, "Manipulator3", 1024*2, NULL, 1, NULL);
}
void loop() {
delay(100);
}
Loading
esp32-s3-devkitc-1
esp32-s3-devkitc-1